一、pytest常用插件
# 生成html格式的自动化测试报告
# 测试用例分布执行,多cpu分发
# 用于改变测试用例的执行顺序
pytest-rerunfailures # 用例失败后重跑
#用于生成美观的测试报告
二、pytest常用规则
开头或者test结尾;
2、测试类必须以Test开头,并且不能有init方法;
3、测试函数或方法必须以test开头;
三、pytest测试用例的运行方式
1、主函数模式
(1)运行所有:pytest.main()
(4)通过nodeid指定用例运行:nodeid有模块名、分隔符、类名、方法名、函数名组成pytest.main(['-vs','./interface/test_interface::test_login.py'])
2、主函数模式
(4)通过nodeid指定用例运行:pytest -vs ./interface/test_interface::test_login.py
3、参数详解:
-v :显示更详细的信息、包括所执行文件路径nodeid
-vs :组合
-n :支持多线程或者分布式运行测试用例,pytest -vs test_login.py -n2
-reruns NUM :失败用例重跑
--maxfail=2 :出现两个用例失败就停止
-k :根据测试用例的部分字符模糊匹配测试用例,如:pytest -vs ./TestCase -k "login"--html ./report/report.html:生成测试报告
4、通过pytest.ini配置文件运行
2、编码:必须为ANSI,可以使用notpad++修改编码格式
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的大小顺序执行
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='')
1、scope被标记方法的作用域,function(默认)、class、module、package、session
2、param参数化,支持列表、元祖,列表字典、元祖字典
3、autouse=True,自动执行,默认False
4、ids,当使用param参数化时,给每个值设置个变量名,可做表格title
5、name,表示给@pytest.fixture()所标记的方法起个别名
6、被装饰的方法前置代码yield之前,后置代码yield之后
7、上代码
import pytest
@pytest.fixture(scope='function',params=['aa','bb'])
def my_fixture(reqest):
print('前置')
yield reqest.param
print('后置')
# return reqest.param
def test_01(self,my_fixture):
print(my_fixture)
八、通过conftest.py和pytest.fixture()结合使用实现全局的前置应用
1、项目全局、模块全局
2、conftest.py文件是单独存放的一个夹具配置文件,经常是不能更改。
3、原则上conftest.py需要和裕兴的用例放到统一层,并且不需要做任何import导入的操作
4、@pytest.fixtrue()他的作用既可以部分也可以全部前后置
5、conftest.py和pytest.fixture()结合使用,作用全局的前后置