一、pytest的简介
1、pytest是一个非常成熟的python的单元测试框架,比unittest更加灵活,容易上手。
2、pytest可以和selenium,requests,appium结合实现web自动化,接口自动化,app自动化。
3、pytest可以实现测试用例的跳过以及reruns失败用例重试。
4、pytest可以和allure生成非常美观的测试用例报告。
5、pytest可以和Jenkins持续集成。
6、pytest有很多非常强大的插件,并且这些插件能够实现很多的实用的操作。
例如:pytest
pytest-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','文件名(模块名)'])
(3)指定目录:pytest.main(['-vs','./目录(路径)'])
(4)通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成。
①pytest.main(['-vs' ,'./文件夹名/文件名::模块名'])
②pytest.main(['-vs' ,'./文件夹名/文件名::类名::模块名'])
(5)运行多个线程:pytest.main(['-vs','./目录(路径)' ,'-n=2'])(同时运行两个线程)
(6)运行失败重跑:pytest.main(['-vs','./目录(路径)','--reruns=2'])(运行失败的用例需要重新多跑2次)
2、命令行模式
(1)运行所有:pytest
(2)指定模块:pytest -vs 文件名(模块名)
(3)指定目录:pytest -vs ./目录(路径)
(4)指定目录:pytest -vs ./文件夹名/文件名::模块名
(5)运行多个线程:pytest -vs ./文件夹/文件名 -n 2(同时运行两个线程)
(6)运行失败重跑:pytest -vs ./文件名 --reruns 2(运行失败的用例需要重新多跑2次)
参数详情:
-s:表示输入调试信息,包括print打印的信息;
-v:显示更详细的信息;
-vs:这两个参数一起用;
-n:支持多线程或者分布式运行测试用例;
例如:pytest -vs ./文件夹/文件名 -n 2(同时运行两个线程)
--reruns 数字:失败用例重跑;
-x:表示只要一个用例报错,那么测试就会停止;
--maxfail=2:出现两个用力失败就停止;
-k:根据测试用例的部分字符串指定测试用例;
例如:pytest -vs -k '测试用例名称中的字符串'
--html ./report/report.html:生成html的测试报告(放在addopts后面)
3、通过读取pytest.ini配置文件运行
pytest.ini这个文件试pytest单元测试框架的核心配置文件
①、位置:一般在项目的根目录
②、编码格式:必须试ANSI,可以使用notpad++修改编码格式
③、作用:改变pytest的默认行为
④、运行规则:不管是主函数模式运行,命令模式运行,都会去读这个配置文件
[pytest] #固定的写法
addopts= -v -s #命令行,指定执行时候的默认信息(需要加的参数),多个参数用空格隔开
minversion=3.0 #指定Pytest的最低版本号
norecursedirs=.pytest_cache #指定忽略执行的目录
testpaths=tests #指定测试目录(文件夹)testpaths=./文件夹(tests)
python_files=test_* #指定测试模块(文件)模糊搜索(配置测试搜索的模块文件名称)
python_classes=Test* #指定测试类搜索的规则
python_functions=test_* #指定测试函数名搜索规则
四、pytest执行测试用例的顺序是怎样的?
1、unittest:ascll码的大小来绝对的执行顺序(数字、字母按照从小到大的顺序执行)
2、pytest:默认从上到下执行
①改变默认执行顺序:使用装饰器mark标记
例如:@pytest.mark.run(order=1)(装饰器标记用例的执行顺序,order=1表示第一个运行)
五、如何分组执行(冒烟,分模块执行,分接口和web执行) #使用装饰器标记测试用例@pytest.mark.somke
smoke:冒烟用例,分布在各个模块里面
使用命令执行:①pytest -vs -m 'smoke' #执行装饰器带有smoke标记的测试用例
②pytest -vs -m 'smoke or usermanage' #执行装饰器带有smoke或者usermanage标记的测试用例
六、pytest跳过测试用例
1、无条件跳过用例
使用装饰器:@pytest.mark.skip(reason='原因')
2、有条件跳过用例
使用装饰器:@pytest.mark.skipif(加条件,reason='原因')