pytest单元测试框架简介

一、什么是单元测试框架

单元测试框架是指:在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试。

二、单元测试框架的分类

Java: Juint、TestNG

Python: unnitest、pytest

三、单元测试框架是用来做什么的?

测试发现:从多个文件里面找到测试用例

测试执行:按照一定的顺序和规则去执行,并生成结果

测试判断:通过断言来判断预期结果和实际结果的差异

测试报告:统计测试进度、耗时、用例的通过率,生成测试报告

四、单元测试框架和自动化测试框架有什么区别?

1)什么是自动化测试框架?

去完成一个指定的系统的自动化测试,而封装的一整套的,完善的代码框架。

2)自动化测试框架的作用

提高测试效率,降低维护成本‘

减少人工干预,提高测试的准确性,增加代码的复用性

核心思想就是:让不懂代码的人也能够通过该框架实现自动化测试。

3)pytest单元测试框架和自动化测试框架的关系

pytest单元测试框架只是自动化测试框架的部分之一。

pom:只是自动化测试框架的部分之一

数据驱动:

关键字驱动:

全局配置文件的封装

日志监控:

seleinumr、equests二次封装

断言

测试报告

邮件

五、pytest框架简介

1、pytest是一个非常成熟的python的单元测试框架,比unittest更灵活,更容易上手。

2、pytest可以和seleium、appinum、requests实现Web自动化,App 自动化,和接口自动化。

3、pytest可以实现测试用例的跳过,和reruns失败用例测重试

4、pytest可以结合,allure实现非常美观的测试报告

5、pytest可以和Jenkins实现持续集成。

6、pytest有非常多的强大的插件,并且这些插件可以实现很多实用的操作。

pytest

pytest-html (生成html格式的报告)

pytest-xdist (测试用例分布执行,多CPU分发)

pytest-ordering (用于改变测试用例的执行顺序)

pytest-rerunfailures (用于失败用例重试)

allure-pytest(用于生成美观的测试报告)

批量下载插件

放到requirements.txt文件中,执行 pip install -r requirements.txt 这个命令

 

六、使用pytest默认的测试用例的规则和基础使用

1、pytest的使用规则

模块名必须以test_开头或者_test结尾

测试类必须以Test开头,并且不能有init方法

测试方法必须以test开头

2、通过读取pytest.ini配置文件运行

七、pytest测试用例的运行方式

1、主函数模式

1)运行所有:pytest.main()

2)指定模块:pytest.main(["-vs", “test_login.py”])

(3)指定目录: pytest.main(["-vs", “./interface_testCase”])

4)通过nodeid指定用例运行,nodeid由模块名,分隔符,类名和方法名组成         

1 pytest.main(["-vs", “./interface_testCase/test_interface.py::test_04_func”])
2 pytest.main(["-vs", “./interface_testCase/test_interface.py::TestInterface::test_03_shaheshang”])
View Code
2、命令行模式

1)运行所有:pytest

2)执行模块:cd web_testCase 切换到指定模块所在的目录 

1 pytest -vs test_login.py
View Code

  (3)指定目录: pytest -vs ./interface_testCase

  (4)通过nodeid指定用例运行: pytest -vs ./interface_testCase/test_interface.py::test_04_func

3、通过读取pytest.ini配置文件运行

pytest.ini 这个文件它是pytest单元测试框架的核心配置文件。

位置:一般放在项目的根目录下。

编码:必须是ANSI

作用: 改变pytest默认的行为规则

运行的规则:不管是主函数的模式运行,还是命令行模式运行,都会去读取这个配置文件。

 1 [pytest]
 2 addopts = -vs   # 命令行参数,用空格分隔
 3 # 测试用例路径
 4 testpaths = './web_testCase'
 5 # 模块名规则
 6 python_files = 'test*.py'
 7 # 类名的规则
 8 python_classes = Test*
 9 # 方法名的规则
10 python_functions = test
View Code
  4、参数详解
 1 参数详解:
 2 -s: 表示输出调试信息,包括print打印的信息
 3 -v: 显示更详细的信息,包括用例所在的模块名和类名
 4 -vs: 这两个参数可以一起使用
 5 
 6 --reruns 2: 失败用例重跑
 7 -x :表示只要有一个用例报错,那么测试停止
 8 --maxfail=2: 表示出现两个用例失败就停止
 9 -k: 根据测试用例的部分字符串指定测试用例
10 def test_01_sunwukong  def test_02_xiaohong
11      eg: pytest -vs ./web_testCase -k 'on'  
12 --html ./report/report.html   生成html格式的测试报告
13 -m : 执行指定标记的用例  eg:  -m ’smoke‘  标志只执行smoke用例
14  -n:支持多线程或者分布式运行测试用例    
15  - 主函数模式
16     pytest.main(["-vs", "./web_testCase/test_login", "-n=2"])
17  - 命令行模式书写
18     pytest -vs ./web_testCase/test_login -n 2
19 `如果有5个用例,分配两个线程来执行的话,那么第一个线程会执行1 3 5 用例,第二个线程会执行2 4 用例
View Code

 

八、失败用例重试

失败用例重试使用的参数是:–reruns==2

test_login中有5个用例,模拟让第二个用例执行失败

 1 class TestLogin:
 2     def test_01_sunwukong(self):
 3         print("测试孙悟空")
 4 
 5     def test_02_xiaohong(self):
 6         print("测试小红")
 7         assert 1 == 2
 8 
 9     def test_03_huahua(self):
10         print("测试花花")
11 
12     def test_01_xiaoming(self):
13         print("测试小明")
14 
15     def test_01_dudu(self):
16         print("测试嘟嘟")
View Code

all.py

1 import pytest
2 
3 if __name__ == '__main__':
4     pytest.main(["-vs", "./web_testCase", '--reruns=2'])
View Code

使用命令行模式执行:

1 pytest -vs ./web_testCase --reruns 2
View Code

九、pytest执行测试用例的顺序

unittest: 通过ASCII的大小来决定执行的顺序

pytest: 默认从上到下

安装:pytest-ordering 这个插件

该插件作用:用于改变测试用例的执行顺序

可以通过mark 标记来指定用例执行的顺序

1  @pytest.mark.run(order=1)
2     def test_07_xiaohong(self):
3         print("测试小红")
View Code

十、如何分组执行

1、分组执行使用场景

冒烟、分模块执行、分接口和web执行

smoke:冒烟用例,分布在各个模块里面

pytest.ini 配置文件中添加

1 markers =
2     smoke: 冒烟用例
3     usermanage: 用户管理模块
4     productmanage:商品管理模块
View Code

        在用例中添加标记

1     @pytest.mark.smoke
2     @pytest.mark.usermanager
3     def test_07_xiaohong(self):
4         print("测试小红")
View Code

 

pytest -vs -m ‘smoke’

pytest -vs -m ‘somke or usermanager’

或者在pytest.ini文件中,配置运行指定标记的用例

 1 [pytest]
 2 # 命令行参数,用空格分隔
 3 addopts = -vs -m 'smoke'
 4 # 测试用例文件夹,可自己配置
 5 testpaths = './web_testCase'
 6 # 配置测试搜索的模块文件名称
 7 python_files = 'test*.py'
 8 # 配置测试搜索的测试类名
 9 python_classes = Test*
10 # 配置测试搜索的测试函数名
11 python_functions = test
12 markers =
13     smoke: 冒烟用例
14     usermanage: 用户管理模块
15     productmanage:商品管理模块
View Code

test_login中,用例标记

1 @pytest.mark.smoke
2 def test_07_xiaohong(self):
3      print("测试小红")
View Code

all.py文件中执行

1 import pytest
2 if __name__ == '__main__':
3     pytest.main(["-vs", "./web_testCase"])
View Code

 

十一、pytest跳过测试用例

使用场景:只执行正向用例,不执行反向用例,异常用例

在用例上添加skip标记

1 无条件跳过:
2 
3 @pytest.mark.skip(reason=“不执行花花用例”)
4 
5 有条件跳过:
6 
7 @pytest.mark.skipif(age >= 18, “还未成年”)
View Code

 

posted on 2022-09-04 18:03  繁星唯月2012  阅读(74)  评论(0)    收藏  举报

导航