pytest 使用总结

转载自:https://www.cnblogs.com/returnes/p/14302422.html

一、pytest常用插件

  pyttest-html # 生成html格式的自动化测试报告

  pytest-xdist # 测试用例分布执行,多cpu分发

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

  pytest-rerunfailures # 用例失败后重跑

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

二、pytest常用规则

  1、模块名必须以test开头或者test结尾;

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

  3、测试函数或方法必须以test开头;

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

1、主函数模式

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

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

  (3)指定目录:pytest.main(['-vs','./interface_testcase'])

  (4)通过nodeid指定用例运行:nodeid有模块名、分隔符、类名、方法名、函数名组成 pytest.main(['-vs','./interface/test_interface::test_login.py'])

2、主函数模式

  (1)运行所有:pytest

  (2)指定模块:pytest -vs test_login.py

  (3)指定目录:pytest -vs./interface_testcase ​   |  命令 pytest 测试目录路径  

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

3、参数详解:

  -s :表示输出调试信息、包括打印信息

  -v :显示更详细的信息、包括所执行文件路径nodeid

  -vs :组合

  -n :支持多线程或者分布式运行测试用例,pytest -vs test_login.py -n2

  -reruns NUM :失败用例重跑

  -x :表示只要一个用例报错,那么测试停止

  --maxfail=2 :出现两个用例失败就停止

  -k :根据测试用例的部分字符模糊匹配测试用例,如:pytest -vs ./TestCase -k "login" --html ./report/report.html:生成测试报告

4、通过pytest.ini配置文件运行

  pytest.ini 文件是单元测试框架核心配置文件

  1、位置:一般放在项目根目录

  2、编码:必须为ANSI,可以使用notpad++修改编码格式

  3、作用:改变pytest默认的行为

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

[pytest]
addopts = -vs --html ./report/report.html #命令行的参数,用空格分隔
testpaths = ./testcase #测试用例的路径
python_files = test_*.py   #模块名的规则
python_classes = Test*   #类名的规则
python_functions = test #方法名的规则
markers=
smoke:冒烟用例
usermanage:用户管理模块
productmanage:商品管理模块

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

  1、unittest:ascll的大小顺序执行

  2、pytest:默认从上到下

  3、改变默认执行顺序:使用mark标记, 如:@pytest.mark.last @pytest.mark.run(order=2)

五、分组执行,可区分web和接口

1、配置文件pytest.ini中添加:
markers=
smoke:冒烟用例
usermanage:用户管理模块
productmanage:商品管理模块
2、用例装饰器
@pytest.mark.smoke@pytest.mark.usermanage
3、执行命令
pytest -m smoke or usermanage

六、pytest跳过测试用例

1、无条件跳过
@pytest.mark.skip(reason="跳过原因")
2、有条件跳过
@pytest.mark.skipif(arg>10,reason="如果arg大于10,跳过")

七、使用@pytest.fixture()装饰器来实现部分用例的前后置

@pytest.fixture(scope='',param='',autouse='',ids='',name='')
1scope被标记方法的作用域,function(默认)、classmodulepackagesession
2param参数化,支持列表、元祖,列表字典、元祖字典
3autouse=True,自动执行,默认False
4ids,当使用param参数化时,给每个值设置个变量名,可做表格title
5name,表示给@pytest.fixture()所标记的方法起个别名
6、被装饰的方法前置代码yield之前,后置代码yield之后
7、上代码
复制代码
 1 import pytest
 2 
 3 @pytest.fixture(scope='function',params=['aa','bb'])
 4 def my_fixture(reqest):
 5     print('前置')
 6     yield reqest.param
 7     print('后置')
 8     # return reqest.param
 9 
10 def test_01(self,my_fixture):
11     print(my_fixture)
复制代码

八、通过conftest.py和pytest.fixture()结合使用实现全局的前置应用

1、项目全局、模块全局
2conftest.py文件是单独存放的一个夹具配置文件,经常是不能更改。
3、原则上conftest.py需要和运行的用例放到统一层,并且不需要做任何import导入的操作
4@pytest.fixtrue()他的作用既可以部分也可以全部前后置
5conftest.pypytest.fixture()结合使用,作用全局的前后置
posted @   别摸我的马甲线  阅读(255)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示