当前位置: 首页 > news >正文

超详细的 pytest 教程(一)使用入门篇

前言

pytest到目前为止还没有翻译的比较好全面的使用文档,很多英文不太好的小伙伴,在学习时看英文文档还是很吃力。本来去年就计划写pytest详细的使用文档的,由于时间关系一直搁置,直到今天才开始写。本文是第一篇,主要介绍pytest的入门使用,后续会分篇针对pytest中的各个功能出详细的使用教程。

一、环境安装

pytest是python中的第三方库,使用之前需要先安装,在命令行中运行以下安装命令 :

pip insatll pytest

检查安装是否成功以及安装的版本,命令行命令如下:

pytest --version

执行上述命令,能够输出版本信息,那就说明安装成功啦。

二、用例编写

当我们通过pytest执行用例时,pytest会自动递归遍历执行路径下所有的目录,根据pytest中默认用例的识别的规则,自动收集测试用例。所有在使用pytest编写测试用例之前,我们首先需要了解一下pytest收集用例时默认的用例识别规则。

1、默认的用例识别的规则

  • 1、用例文件:所有文件名为 test_ 开头 或者 _test 开头的文件会被识别为用例文件。

  • 2:用例类,测试文件中每个Test开头的类就是一个测试用例类。

  • 3、测试用例:测试类中每个test开头的方法就是一条测试用例,测试文件中每个test开头的函数也是一条测试用例,

备注:上述默认的用例查找规则,可在pytest的配置文件进行修改(后续章节会详细介绍配置文件的使用)

另外pytest兼容unittest,以unittest的用例编写规范写的用例,pytest都能够识别出来

通过了解上述pytest中用例识别的规则,可以知道pytest中用例编写,能使用函数的形式,也能使用类的形式,那么接下来就分别给大家介绍一下这两种方式编写用例。

2、函数形式编写用例

规则:用例方法名以test开头即可

# \testcases\test_demo1.py def test_demo(): assert 100 == 100

使用命令 pytest 就可以执行测试函数,输出结果如下:

C:\testcases>pytest 
======================test session starts ======================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\testcases
plugins:  testreport-1.1.2
collected 1 item                                                           
test_demo1.py .    [100%]
====================== 1 passed in 0.26s ======================

3、以类的形式编写用例

规则: 测试类命名以Test开头,用例方法以test开头

# test_demo2.py
class TestDome:def test_demo1(self):assert 11 == 11def test_demo(self):assert 22 == 21

命令pytest运行上述用例,结果如下:

====================== test session starts ======================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\testcases
plugins:  testreport-1.1.2
collected 2 items                                                                   
test_demo1.py .F                  [100%]
====================== FAILURES ======================
___________ TestDome.test_demo ____________
self = <test_demo1.TestDome object at 0x0445F450>def test_demo(self):
>       assert 22 == 21
E       assert 22 == 21
test_demo1.py:25: AssertionError
====================== short test summary info =======================
FAILED test_demo1.py::TestDome::test_demo - assert 22 == 21
====================== 1 failed, 1 passed in 0.53s ======================

上面的运行结果可以看出来,一条用例执行通过,一条执行失败

三、执行测试

在上面我们使用的是 pytest这个命令去执行测试用例。关于pytest执行测试,有两种方式,一种是命令行通过pytest这个命令执行,另外在代码中可以通过pytest.main()这个方法来执行测试。接下来就和大家分别详细的介绍一下pytest执行测试的方式和常用的参数

1、执行参数

测试用例

# 测试用例
class TestDome:def test_demo1(self):print('----测试用例执行-----------')assert 11 == 11

参数 -v : 显示测试的详细参数信息

C:\testcases>pytest -v
========================== test session starts ==========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0 
cachedir: .pytest_cache
rootdir: C:\git_project\pytest-report-me-main\testcases
plugins: testreport-1.1.2
collected 1 item                                                                         test_demo1.py::TestDome::test_demo1 PASSED          [100%]
========================== 1 passed in 0.27s ==========================

参数 -s: 显示测试执行的输出信息

C:\testcases>pytest -s
=========================== test session starts ===========================
platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0
rootdir: C:\testcases
plugins: testreport-1.1.2
collected 1 item     
test_demo1.py::TestDome::test_demo1 ----测试用例执行---输出1--------
----测试用例执行---输出2--------
PASSED
=========================== 1 passed in 0.28s ===========================

2、pytest.main执行的参数传递

pytest.main方法执行测试参数传递方式:

所以的参数放在列表中,每个参数就是列表中的一个元素

pytest.main(['-v','-s'])

详细的参数可以使用命令 pytest -h 查看

3、指定执行的测试目录

命令 pytest 测试目录路径


pytest testcase/

pytest会执行指定目录路径下所有的测试用例

4、指定执行的测试文件

命令 pytest 测试文件路径

pytest testcase/test_demo1.py

pytest会执行指定测试文件中下所有的测试用例

5、指定执行的测试类

命令 pytest 测试文件::测试类

pytest testcase/test_demo1.py::TestClass

pytest会执行指定测试类里面所有的测试用例

6、指定执行的测试用例

命令 pytest 测试文件::测试类::测试方法

pytest testcase/test_demo1.py::TestClass::test_method

pytest会执行指定的测试方法

基本的入门就给大家介绍到这里,从一篇开始给大家详细介绍pytest的相关特性

相关文章:

超详细的 pytest 教程(一)使用入门篇

前言 pytest到目前为止还没有翻译的比较好全面的使用文档&#xff0c;很多英文不太好的小伙伴&#xff0c;在学习时看英文文档还是很吃力。本来去年就计划写pytest详细的使用文档的&#xff0c;由于时间关系一直搁置&#xff0c;直到今天才开始写。本文是第一篇&#xff0c;主…...

二叉树理论基础知识点

二叉树的种类 在我们解题过程中二叉树有两种主要的形式&#xff1a;满二叉树和完全二叉树 满二叉树 满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 如图所示&#xff1a; 这…...

【算法基础】堆⭐⭐⭐

一、堆 1. 堆的概念 堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: (1)堆中某个结点的值总是不大于或不小于其父结点的值; (2)堆总是一棵完全二叉树。 将根结点最大的堆叫做最大堆或大根堆,根结点…...

时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测

时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测 目录时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测预测效果基本介绍研究回顾程序设计参考资料预测效果 基本介绍 CNN-SVM预测模型将深度学习模型作为特征学习器&#xff0c;将SVM 支持向量机 作为训练器进行…...

【TypeScrip】TypeScrip的任意类型(Any 类型 和 unknown 顶级类型):

文章目录一、安转依赖&#xff1a;【1】nodejs 环境执行ts【2】使用ts-node二、Any 类型 和 unknown 顶级类型【1】没有强制限定哪种类型&#xff0c;随时切换类型都可以 我们可以对 any 进行任何操作&#xff0c;不需要检查类型【2】声明变量的时候没有指定任意类型默认为any【…...

智能洗地机什么牌子好?智能洗地机排行

要说家庭清洁热门的产品&#xff0c;洗地机肯定首当其冲&#xff0c;集洗吸拖为一体的清洁工具&#xff0c;省时又省力&#xff0c;可谓是家里清洁好助手&#xff0c;今天笔者就为大家介绍几款重量轻、噪音轻、拖地干净的洗地机! 一、CEYEE希亦T800洗地机 在国内&#xff0c;洗…...

【数据结构与算法】链表1:移除链表 设计链表链表反转(双指针法、递归法)

文章目录今日任务1.链表理论基础&#xff08;1&#xff09;什么是链表&#xff1f;&#xff08;2&#xff09;链表的类型&#xff08;3&#xff09;链表的存储方式&#xff08;4&#xff09;链表的定义&#xff08;5&#xff09;链表的操作&#xff08;6&#xff09;性能分析2.…...

山东大学软件学院面向对象简答题整理【个人向】

面向对象简答题整理【个人向】 0.试用面向对象语言简述改写和重定义的异同&#xff0c;以及方法绑定时的差别 改写是子类的方法和父类的方法具有相同的方法名和类型签名重定义是子类的方法和父类的方法方法名相同但类型签名不同在方法绑定时&#xff0c;改写是动态绑定&#…...

JAVA时间类及JAVA8新时间类

文章目录Java旧时间类关系图![在这里插入图片描述](https://img-blog.csdnimg.cn/e2c2c26c841e40bdb9cc85d0fc4bc1df.png)GMT、时间戳、统一标准时间、时区Java时间类创建时间类示例java.text.DateFormat时间格式转换java.util.Calendar总结Java时间类Java8新时间类InstantCloc…...

ASEMI代理FGH60N60SFD,安森美FGH60N60SFD原装IGBT

编辑-Z 安森美FGH60N60SFD原装IGBT参数&#xff1a; 型号&#xff1a;FGH60N60SFD 集电极到发射极电压&#xff08;VCES&#xff09;&#xff1a;600V 栅极到发射极电压&#xff08;VGES&#xff09;&#xff1a;20V 收集器电流&#xff08;IC&#xff09;&#xff1a;120…...

【云原生之Docker实战】使用dokcer部署web端vscode

【云原生之Docker实战】使用dokcer部署web端vscode 一、vscode-server介绍二、检查本地docke环境1.检查系统版本2.检查docker版本3.检查docker状态三、下载vscode镜像四、部署vscode-server1.创建安装目录2.创建vscode容器3.查看vscode容器状态4.查看vscode容器日志五、访问vsc…...

Docker安装Tomcat、mysql、redis

目录 前言 一、安装Tomcat 二、安装mysql &#xff08;一&#xff09;简单版 &#xff08;二&#xff09;实战版 三、安装redis 前言 镜像可以先去Docker Hub Container Image Library | App Containerization 左上角搜&#xff0c;然后点进入可以看到具体的命令&#…...

【python 基础篇 八】python的常用数据类型操作-------集合

目录1.集合的基本概念2.集合的定义2.1 可变集合 set定义2.2 不可变集合 fronzenset 定义2.3 集合定义的注意事项3.单一集合的常用操作4. 集合之间操作4.1 交集4.2 并集4.3 差集4.4 判定1.集合的基本概念 无序的&#xff0c;不可随机访问的&#xff0c;不可重复的元素集合与数学…...

Spring框架中问题补充

BeanFactory 和 ApplicationContext BeanFactory和ApplicationContext是接口。BeanFactory接口时spring框架的顶层接口&#xff0c;定义管理bean的最基本的方法&#xff0c;例如获取实例、判断等功能。 DefaultListableBeanFactory实现BeanFactory 接口,是主要的创建bean的工…...

【Leedcode】顺序表必备的三道面试题(附图解)

顺序表必备的三道面试题&#xff08;附图解&#xff09; 文章目录顺序表必备的三道面试题&#xff08;附图解&#xff09;前言一、第一题1.题目2.思路图解3.源码二、第二题1.题目2.思路图解3.源码三、第三题1.题目2.思路图解3.源码总结前言 本文给大家介绍三道顺序表学习过程中…...

SOFA Weekly|开源人、本周贡献 issue 精选

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展欢迎留言互动&#xff5e;SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&#…...

2023美赛 ICM E题详细版思路

问题E&#xff1a;光污染注&#xff1a;楷体为题目原文&#xff0c;宋体为思路部分首先&#xff0c;我们需要考虑的就是美赛ABEF的核心问题&#xff0c;数据。这里E题是以光污染为背景的题目&#xff0c;首当其冲的我们就需要收集一些数据以支撑我们的模型。对于E题提出的问题&…...

【LeetCode】剑指 Offer(3)

目录 写在前面&#xff1a; 题目&#xff1a;剑指 Offer 09. 用两个栈实现队列 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 写在前面&…...

springboot simple (13) springboot Elasticsearch(Elasticsearch8.5.1)

这里首先简单的介绍了Elasticsearch&#xff0c;然后实现了springboot集成Elasticsearch。 版本&#xff1a; Elasticsearch&#xff1a;v8.5.1 Kibana&#xff1a;v8.5.1 springboot集成elasticsearch有两种方式。 1&#xff09;rest客户端RestHingLevelClient&#xff1b; …...

《爆肝整理》保姆级系列教程python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

简介 有些 post 的请求参数是 json 格式的&#xff0c;这个前面发送post 请求里面提到过&#xff0c;需要导入 json模块处理。现在企业公司一般常见的接口因为json数据容易处理&#xff0c;所以绝大多数返回数据也是 json 格式的&#xff0c;我们在做判断时候&#xff0c;往往只…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...