pytest简介1 -初级篇
官网:https://docs.pytest.org/en/stable/deprecations.html#support-for-tests-written-for-nose
一.pytest的基本简介
pytest 安装: pip3 install pytest
pytest查看版本:pytest --version
1. pytest是python的一个成熟的单元框架,比unitest更加灵活,容易上手;
2. 它可以和selenum,requests,appium结合实现 web自动化,接口自动化,app自动化;
3. pytest可以 实现测试用例的跳过以及reruns失败用例重试;
4. 它可以和allure生产美观的测试报告;
5. 它可以和jenkins持续集成;
6.pytest有很多非常强大的插件,他们能够是实现很多非常使用的操作。
pytest
pytest-html 生成html格式的自动化测试报告
pytest-xdist 测试用例分布式执行,多cpu分发
pytest-ordering 用于改变测试用例的执行顺序
pytest-rerunfailures 用例失败后重跑
allure-pytest 用于生成美观的测试报告
上面的安装包,可以放到requirements.txt中,用pip install -r requirements.txt 去自动安装
二. 使用pytest,默认的测试用例的规则以及基础应用
1.模块名(也就是py文件名)必须是以test_开头 或者 _test结尾
2.测试类必须以Test开头,并且不能有init方法
3.测试方法必须以test开头
三 pytest测试用例的运行方法
1.主函数模式
1)运行所有: 在主函数中写: pytest.mian()
2)指定模块: pytest.main(['-vs','test_login.py模块名或者文件夹名或者用例名'])
3)指定目录:pytest.main(['-vs','./interface_test'])
4) 通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成。
pytest.main(['-vs','./pythonProject/TestDemo1_test.py::TestDemo1'])
pytest.main(['-vs','./pythonProject/TestDemo1_test.py::TestDemo1::test_03'])
2.命令模式
1) 运行所有:pytest
2) 指定模块:pytest -vs test_login.py
3) 指定目录:pytest -vs api_folder/
参数详解:
-s : 表示输出调试信息,包括print信息
-v: 显示详细的信息
-vs: 这两个参数一起用
-n:支持多线程或者分布式运行测试用例
如:pytest -vs ./pythonProject/TestDemo1_test.py -n 2
或者pytest.main(['-vs','./pythonProject/TestDemo1_test.py',‘-n=2’])
--reruns NUm:失败用例重跑
-x : 只要有一个用例报错,测试停止
--maxfail=2 : 出现2个用例失败就停止
-k:根据测试用例的部分字符串指定测试用例
- 如:pytest -vs ./
TestDemo1_test.py -k "02"
--html ./report/report.html: 在当前路径的report文件夹中生成report.html测试报告
4)重新执行用例:
pytest.main(['-vs', './TestDemo1_test.py::TestDemo1','--reruns=2'])
pytest -vs ./TestDemo1_test.py::TestDemo1 --reruns 2
eg其他:
pytest -vs ./TestDemo1_test.py::TestDemo1 -x
pytest -vs ./TestDemo1_test.py::TestDemo1 --maxfail 2
3.通过读取pytest.ini配置文件运行
pytest.ini文件它是 pytest单元测试框架的核心配置文件。
1.位置:一般是放在项目的根目录
2.编码:必须是ANSI,可以使用notpad++更改编码格式。(pycham中直接创建的话是不行的,编码格式是utl8不对,必须改为ANSI编码)
3.作用:改变pytest默认的行为。
4.运行的规则:不管是主函数的模式运行,命令行模式运行,都会去读取这个配置文件。
在根目录新建一个pytest.ini文件,内容为:
[pytest] addopts =-vs #命令行的参数,用空格分隔 testpaths =./testcase #测试用例的路径 python_files=test_*.py #模块名的规则,默认是test_开通,可以修改的 pytest_classes=Test* #类名的规则,默认是Test开通,可以修改的 python_functions=test* #方法名的规则:默认是test开通,可以修改的
四 pytest用例的执行顺序是怎样的呢?
unittest.ascII的大小来决定的执行的顺序
pytest:默认从上大小
改变默认的执行顺序:就使用mark标记---即使用装饰器: @pytest.mark.run(order=2) 来指定执行的顺序
五. 如何分组执行(冒烟,分模块执行,分接口和web执行)
1)在用例的方法上面添加装饰器: @pytest.mark.smoke
smoke: 自己定义的‘冒烟用例’的标记,分布在各个模块里面
执行命令:
- pytest -m "smoke"
执行多个标记的用例:or
- pytest -m "smoke or productmanage"
PS: pytest -m 说明:用于标记测试用例,执行特定的测试用例。
设置pytest.ini文件:
[pytest] addopts =-vs #命令行的参数,用空格分隔 testpaths =./testcase #测试用例的路径 python_files=test_*.py #模块名的规则,默认是test_开通,可以修改的 pytest_classes=Test* #类名的规则,默认是Test开通,可以修改的 python_functions=test* #方法名的规则:默认是test开通,可以修改的 markers = smoke:冒烟用例 usermanage:用户管理用例
productmanage:产品管理用例
六.生成报告
设置pytest.ini文件:
[pytest] addopts =-vs --html ./report/report.html #命令行的参数,用空格分隔. 配置在当前路径下的report目录下生成report.html报告 testpaths =./testcase #测试用例的路径 python_files=test_*.py #模块名的规则,默认是test_开通,可以修改的 pytest_classes=Test* #类名的规则,默认是Test开通,可以修改的 python_functions=test* #方法名的规则:默认是test开通,可以修改的 markers = smoke:冒烟用例 usermanage:用户管理用例 productmanage:产品管理用例
七.pytest跳过测试用例
(1)无条件跳过测试用例
@pytest.mark.skip(reason="notNeedTest")
(2)有条件跳过
@pytest.mark.skipif(age>18,reason="已成年")