pytest一些用法
import pytest
#测试文件以test_开头(以_test结尾也可以)
#测试类以Test开头,并且不能带有 init 方法
#测试函数以test_开头
"""
pytest插件
pytest-html ==生成html格式的测试报告
pytest-xdist 多线程
pytest-ordering 指定测试用例的执行顺序
pytest-rerunfailures 失败重执行
allure-pytest 生成allure测试报告
复制python 包
pip freeze > requirements.txt
PS:在pytest项目下创建一个a.txt文件,将这些参数放进去,使用 pip install -r a.txt 一次性全部安装
==============================================================================================
1.pytest 参数化
@pytest.mark.parametrize()
1.1单个参数化
1.2多个参数化
2.pytest执行测试用例的顺序
2.1 默认顺序:默认从上到下
2.2自定义顺序 ps:需下载插件pip install pytest-ordering
3.跳过用例执行
@pytest.mark.skip('跳过说明,可不填')
@pytest.mark.skipif(条件成立跳过,reason=)
@pytest.mark.skipif(con == '冒烟', reason='我是skipif,因为条件成立被跳过了')
4.失败不计入失败用例中
@pytest.mark.xfail()
5.参数传递
5.1单个参数 将上一个方法里面的返回传递给下一个方法,调用的时候传入方法名
pytest.fixture()
5.2多个参数
定义一个全局变量和一个空列表,将需要返回的值追加到列表中然后return返回列表,下一个方法再遍历列表
6.pytest执行参数详解
-r 用于skip方法中打印不执行的理由
-v 显示更详细的信息
-s 输出调试信息,包括print打印的信息,一般 -vs一起用
-n 支持多线程或者分布式运行测试用例
'-n=2' 2个线程
--reruns 次数 失败用例重新执行多少次
'--reruns=5' 失败用例重新执行5次
-x 表示只要有一个用例报错,那么测试停止
--maxfail=次数 表示出现多少个报错就停止
-k 根据测试用例的部分字符串执行测试用例
-k='包含的字符串'
7.pytest的命令行执行方式
7.1 指定目录下的py文件执行
pytest.main(['-vs','./testcase'])
7.2指定py文件执行
pytest.main(['-vs','py文件'])
7.3通过nodeid指定用例执行,nodeid由模块名,分隔符,类名,方法名,函数名组成
(::双冒号为分隔符)
#目录下指定的测试用例(没有类)
pytest.main(['-vs','./testcase::test_01'])
#目录下指定的测试类下面的测试用例
pytest.main(['-vs','./testcase::Testpy::test_01'])
8.pytest.main()执行方法 单独的py文件中的pytest.main()
8.1用来读取pytest.ini文件
8.2可指定参数执行 pytest.main(['-vs','py文件'])
ps:该文件名最好不要以test开头,该文件最好与pytest.ini文件在同一项目路径下,与测试用例属于同一目录,会优先读取pytest.ini文件
9.conftest.py文件的作用及用法
9.1 conftest.py文件名字固定不能修改
9.2 congftest.py文件所在目录必须存在__init__.py文件
9.3 不能被其他模块导入
9.4 所有目录测试文件执行前都会执行一遍conftest.py文件
9.5 结合@pytest.fixture使用
9.5.1 fixture的作用范围
pytest.fixture(scope='function')
fixture里面的scope参数可以控制fixture的作用范围:session>module>class>functon
-function:每一个函数或方法都会调用(默认就是function)
-class:每一个类都会调用一次
-module:每一个.py文件都会调用一次
-session:多个文件调用一次,可以跨.py文件调用
9.5.2 使用场景
每个接口需要共用的token
每个接口需要共用到的测试用例数据(如参数化数据,数据驱动)
每个接口需要共用到的配置信息
===============================================================&