前言:最近一段时间在学习pytest框架,在学习过程中也遇到了很多的问题,简单跟大家分享一下
1. 什么是单元测试框架:
(1). 单元测试框架:指在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试。
(2). 常见的单元测试框架有哪些:
二、单元测试框架和自动化测试框架有什么关系? --
备注:pytest的安装,此处就不做介绍了
三、pytest框架自动发现测试用例的规则(默认情况)
注意:可自定义规则,后续会介绍
1. 模块名:
规则:符合test_*.py格式 或者 *_test.py格式;如test_login.py / login_test.py

2. 测试类:
规则:类名符合Test*格式;且类中不带构造方法(__init__方法)

3. 测试函数:
规则:方法名符合test*() 格式

4. 特殊类:
规则:继承了unittest.TestCase的类也可以被发现(pytest框架兼容unittest)

4. 如何使用pytest执行用例
1. 通过主函数进行执行(main方法)

2. 通过命令行执行
备注:命令行模式,多种参数可自行组合,常见可供参考:
3. 通过全局配置文件进行配置自动执行(pytest.ini文件)
注:pytest.ini这个文件它是pytest单元测试框架的核心配置文件之一1.位置:一般放在项目的根目录
注意:1. 在ini配置文件中:相关的key值不可改,为固定写法,如:addopts, testpath等等;对应的值的作用见截图说明,其他参数可自行查阅资料
2. 对于python_files,python_classes,python_functions等配置,即pytest执行是自动取发现用例的文件名,类名,方法名的相关规则(如果没有当前ini文件,
即按照默认规则去发现用例,如果配置了当前规则, 则默认发现用例规则不生效)
5、pytest固件功能介绍(fixture, 又称夹具)
1. 创建一个fixture:

说明:一个普通函数,通过装饰器@pytest.fixture()进行装饰,他就是一个固件函数
参数说明:
1)scope参数:定义当前固件函数的作用范围:
参数值--function: 方法级别,最小级别,默认级别,代表测试用例中,每一个方法(函数)在执行前后都会执行一次当前固件函数

参数值--class: 类级别,代表测试用例中,每一个类/普通函数在执行前后都会执行一次固件函数

参数值--module: 模块级别,可以理解为一个py文件,整个文件执行前后都会执行一次固件函数

参数值--package: 包级别,针对当前固件所在的目录结构中,其父目录下第一条用例执行开始和最后一条用例执行结束都会执行一次固件函数


参数值--session: 会话级别,即当前pytest执行的整个项目,执行开始喝执行结束都会执行一次固件函数
----自己琢磨吧,哈哈哈!!!
2) autouse: 自动使用当前固件函数,默认为False
值为:False,此时用例需要使用固件函数时,需要手动将固件函数名称,当成参数传递给用例函数

值为:True,此时直接使用,不需要传值,自动调用
![]()

3)parame,用于参数化
parmes接受参数类型:list类型, tuple类型, str类型



注意:接受dict类型时,需要特殊处理,固件传递给用例函数的是字典中的key值

4)其他参数:
2. 测试固件(fixture)统一管理 -- conftest.py文件
conftest.py说明:该文件可实现全局的前后置应用;名称固定,不可更改(同pytest.ini文件)--可在不同目录定义多个该文件
作用:定义为conftest.py文件中的固件函数,可以在其他的多个文件中进行重复只用,重复利用代码,方便维护

使用示例:可直接将conftest.py中定义的固件的函数名称,当成参数传入到测试函数中

特别说明:用例函数中,可同时调用多个固件函数,如:


6、pytest断言
pytest断言,相对于unittest而言,非常简单,没有unittest中,基本格式为:assert a == b即可

7、参数化
方式一:通过固件函数实现参数化

方式二:通过标记:@pytest.mark.parametrize() 实现参数化


说明:装饰器中的参数,除了可以传入一个固定的值,还可以是一些表达式,如:

8、用例的筛选与过滤
1. 用例忽略执行:
命令:@pytest.mark.skip

2. 根据条件判断用例是否执行:
命令:@pytest.mark.skipif(condition=num >= 10, reason="条件不符合")

3. 根据用例断言结果来判断最终结果:
命令:@pytest.mark.xfail
规则说明:如果用例本身断言成功,那么执行结果为失败;反之相同

4. 自定义用例执行顺序:
命令:@pytest.mark.run(order=num) -- 根据num的值,从小到大执行
说明:用例默认的执行顺序为从上到下执行(unittest时根据ASSIC码从小到大执行)

9. 生成测试报告
1. 使用pytest-html插件生成html报告
执行命令如下:pytest -svv test_demo.py test_demo2.py --html=./report/report.html
test_demo.py test_demo2.py:需要执行测试的py文件
--html=./report/report.html:需要生成报告的路径和文件名


注意:此时,生成的报告,html信息和css等文件在不同的文件,如果需要合并执行一下命令:pytest -svv test_demo.py test_demo2.py --html=./report/report.html --self-contained-html


2. 生成allure报告
1. 首选需本地安装allure,具体方法参考:https://www.cnblogs.com/XiqueBlogs/p/16178092.html
2. 生成测试结果json文件:
命令:pytest -vvs test_demo.py test_demo2.py --alluredir ./tmp
./tmp: 为需要生成文件的路径

3. 将测试结果json文件转换成allure的html格式的报告
python执行命令:os.system('allure generate ./tmp -o ./report_allure --clean')




浙公网安备 33010602011771号