一、pytest简介
- pytest是一个非常成熟的python的单元测试框架,比unittest更灵活,容易上手。
- pytest可以和selenium、requests、appium结合实现web自动化、接口自动化、app自动化。
- pytest可以实现测试用例的跳过以及reruns失败用例重试。
- pytest可以和allure生成非常美观的测试报告。
- pytest可以和Jenkins持续集成。
- pytest有很多非常强大的插件,并且这些插件能够实现很多实用的操作。 1. pytest2. pytest-xdist 测试用例分布式执行,多CPU分发。3. pytest-ordering 用于改变测试用例的执行顺序。4. pytest-rerunfailures 用例失败后重跑5. pytest-html 生成html格式的自动化测试报告。6. allure-pytest 用于美观的测试报告。
将插件放到requirements.txt中,通过pip install -r requirements.txt安装插件。
二、pytest默认的测试用例规则以及基础应用
- 模块名必须以test_开头或者以_test结尾。
- 测试类必须以Test开头,并且不能有init方法。
- 测试方法必须以test开头。
三、pytest测试用例运行方式
1.主函数模式
- 运行所有:pytest.main()
- 指定模块:pytest.main(['-vs','test_login.py'])
- 指定目录:pytest.main(['-vs','/interface_cases'])
- 通过nodeid指定用例运行:nodeid由模块名、分隔符、类名、方法名、函数名组成 1. pytest.main(['-vs','./interface_cases/test_login.py::test_01'])2. pytest.main(['-vs','./interface_cases/test_login.py::TestLogin::test_01'])
2.命令行方式
- 运行所有:pytest
- 指定模块:pytest -vs test_login.py
- 指定目录:pytest -vs test_login.py /interface_cases
- 通过nodeid指定用例运行:pytest -vs ./interface_cases/test_login.py::TestLogin::test_01
参数详解:
- -s:输出调试信息,包括print打印的信息
- -v:显示更详细的信息
- -vs:两个参数一起使用
- -n:支持多线程或者分布式运行测试用例- 如:pytest -vs ./interface_cases -n 2
- --reruns NUM:失败用例重跑次数
- -x:只要有一个用例报错,则测试停止
- --maxfail NUM:出现几个用例失败就停止
- -k:根据测试用例的部分字符串指定测试用例 - 如:pytest -vs ./testcase -k "ao"
- -m:执行标记的测试用例 - 如:pytest -vs -m smoke or usermanage
- --html ./reports/report.html:生成html测试报告
3.读取pytest.ini配置文件运行(主要)
pytest.ini是pytest单元测试框架的核心配置文件。
- 位置:一般在项目根目录。
- 编码:必须是ANSI。
- 作用:改变pytest默认的行为。比如修改模块名、类名、函数名的筛选策略。
- 运行的规则:不管是主函数模式、命令行模式运行,都会去读取这个配置文件。
[pytest]
addopts = -vs --html ./reports/report.html
testpaths = ./cases
python_files = test_*.py
python_classes = Test
python_functions = test
markers =
smoke:冒烟
usermanage:用户管理
四、pytest测试用例的执行顺序
默认从上到下执行。
改变执行顺序:使用mark标记
@pytest.mark.run(order=1)
五、pytest如何分组执行(冒烟,分模块,分接口和web执行)
smoke:冒烟用例,分布在各个模块里
使用mark将用例标记成冒烟、具体模块
@pytest.mark.smoke
...
@pytest.mark.usermanage
- pytest -m "smoke"
- pytest -m "smoke or usermanage"
六、pytest跳过测试用例
1.无条件跳过
@pytest.mark.skip(reason="还没调试好")
2.有条件跳过
age = 18
@pytest.mark.skipif(age >= 18, reason="已成年,不执行")
版权归原作者 陈皮话没 所有, 如有侵权,请联系我们删除。