前言
1.pytest是一个非常成熟的单元框架,比unittest更灵活,更容易
2.pytest可以和selenium、request、appium结合实现web自动化、接口自动化、app自动化。
3.pytest可以实现测试用例跳过、失败重跑
4.pytest可以和allure生成非常美观的测试报告
5.pytest可以和jenkins持续集成
6.pytest有非常强大的插件,并且你这些插件能实现很多的实用的操作。
pytest
pytest-html 生成html格式的测试报告
pytest-xdist 测试用例分布式执行,多cpu并发
pytest-ordering 用于改变测试用例的执行顺序
pytest-rerunfailures 用于失败重跑
allure-pytest 用于生成美观的测试报告
(需要安装的插件可以放在requirement.txt中,通过pip install -r requirement.txt
安装/)
1.模块名必须以test_开头,或者以_test结尾
2.测试类必须以Test开头,并且不能有init方法
3.测试方法必须以test开头
(1)运行所有:pytest.main()
(2)指定模块:pytest.main([‘-vs’,’ -vs test_login.py’])
(3)指定目录:pytest.main([‘-vs’,‘./testcase’])
(4)通过nodeid指定运行用例:nodeid由模块名、分隔符、类名、方法名、函数名组成。
pytest.main([‘-vs’,‘./testcase/test_login.py::test_01’])
(1) 运行所有:pytest.main()
(2)指定模块:pytest -vs test_login.py
(3)指定目录:pytest -vs ./testcase
(4)通过nodeid指定运行用例:nodeid由模块名、分隔符、类名、方法名、函数名组成。 pytest -vs ./testcase/test_login.py::test_01
- 参数详解:
-s:表示输出调试信息
-v:显示更详细的信息
-vs:一起使用,常用
-n:支持多线程或者分布式运行用例;如 pytest -vs ./testcase/test_login.py -n 2
–reruns NUMS:用例失败重跑
-x:只要有一个用例报错,运行停止
–maxfail=2 :出现两个以上失败,运行停止
-k :根据测试用例的部分字符串指定测试用例;如 pytest -vs ./testcase -k “ab”
–html :生成测试报告(默认的不推荐,建议使用allure测试报告),如:–html ./report/report.html
pytest.ini是pytest测试框架的核心配置文件
1.位置:一般放在项目的根目录
2.编码:必须是ANSI,可以使用notepad++修改编码格式
3.作用:改变pytest的默认行为
4.运行规则:所有的运行方式,都会去读取这个配置文件
5.格式:
[pytest]
# 01.可添加多个命令行参数,用空格分隔
addopts = -s -v
# 02.搜索文件夹,执行指定文件夹里面的用例
testpaths = ./testcase
# 03.配置搜索测试文件名称,默认是test开头的文件,可以自定义修改
python_files = test*.py
# 04.配置测试搜索的类名,默认是Test开头的类,可以自定义修改
python_classes = Test_*
# 05.配置测试搜索的测试函数名,默认是以test开头的方法/函数,可以自定义修改
python_functions = test*
@pytest.mark.run(order=1)
示例:
smoke:冒烟用例,分布在各个模块中的部分用例。
model1:模块1的用例
model2:模块2的用例
markers =
smoke: 冒烟用例
model1:模块1的用例
model2:模块2的用例
@pytest.mark.smoke
def test_login_003(self):
print("用例003")
@pytest.mark.model1
def test_login_004(self):
print("用例004")
运行用例时使用参数-m+需要执行的makers,执行多个时,用or连接:
pytest -m "smoke"
pytest -m "smoke or model1"
@pytest.mark.skip("跳过原因:本轮不执行")
def test_login_001(self):
print("用例001")
@pytest.mark.skipif(level > 2, reason="级别大于2的执行")