pytest.main()的使用
1. pytest的两种运行模式,一种是命令行运行,另外一种是调用pytest.main() 运行
2. pytest.main() 运行模式时,不添加任何参数,表示运行当前目录下的所有的测试文件;
2.1 main()方法中不填写任何参数,表示运行当前目录下的所有的测试文件;
2.2 添加参数:pytest.main(['-s','-v','-k "print"',''])
(1)‘-s’:关闭捕捉,输出打印信息;----就是运行的时候是否出入代码里边的一些打印信息,比如你的测试代码里边包含了print语句,则print的内容会显示出来;如果不填写该参数,则print语句的值不会 打印出来
(2)‘-v’:用于增加测试用例的冗长。---没太看懂到底代表啥意思,等看懂了再补充上,这是复制的别人的
(3)‘-k’ :运行包含某个字符串的测试用例。如:pytest -k add XX.py 表示运行XX.py中包含add的测试用例。
(4)‘q’:减少测试的运行冗长。
(5)‘-x’:出现一条测试用例失败就退出测试。在调试阶段非常有用,当测试用例失败时,应该先调试通过,而不是继续执行测试用例
2.3 要执行测试用例的过滤方法:
(1)指定某个测试类或测试方法,用“::”隔开。如:命令格式:pytest 文件名.py::测试方法 ,pytest.main([模块.py::类或方法]) ,pytest 文件名.py::测试类::测试方法 ,pytest.main([模块.py::类::方法])
3. python文件中包含如下代码,则可运行当前目录下,的测试类或者测试方法(以test_开头或者以test结尾的类.py文件,以test_开头的测试方法,具体可参照配置文件),同时使用到多个参数时,格式如下:
if __name__ =="__main__":
pytest.main(['-s','-k print', 'add/test_second.py::test_noprint_cock'])
************************************************************************************************************************************************************************
4.pytest的配置文件
1. 配置文件放在哪里?---放在项目的根目录下边,不要乱放!
4.1 文件名需要命名为:pytest.ini
4.2 文件结构及参数如下:
[pytest]
addopts = -v -s --html=py_test/scripts/report/report.html -p no:warnings --reruns=1 ,配置运行时的参数
testpaths = ./py_test/scripts,配置要跑的脚本在哪个目录下
python_files= test_rerun.py,配置测试文件匹配模式
python_classes = Test*,配置测试类的匹配模式,比如这个是类文件以Test开头,则可以匹配到
python_function = test*,配置函数 、方法匹配模式,比如这个是以test开头则可以匹配到
xfail_strict = true,配置是否允许预期失败的用例存在
-s:表示输出调试信息,包括 print打印的信息
-
v:显示更详细的信息
-
vs:这两个参数一起用
-
n :支持多线程或者分布式运行测试用例
如:pytest
-
vs .
/
testcase
/
test_login.py
-
n
2
-
-
html : 测试报告位置
-
-
reruns : 失败重跑
-
p no:warnings : 取消警告
-
-
ff : 先执行上次失败的用例
-
-
lf : 只执行上次失败的用例
-
x : 遇到测试用例fail,就结束测试
-
-
maxfail
=
num:遇到num条测试用例fail, 就结束测试
-
k :根据测试用例的部分字符串指定测试用例
如:pytest
-
vs .
/
testcase
-
k “ao”
5. pytest的配置文件
****************************************************************************************************************************************************************
6. pytest的mark标签
6.1 pytest.skip (用于函数内,跳过测试用例)
1
2
3
4
|
def test_2(): if 1 < 2 : pytest.skip( '1111111' ) pass |
@pytest.mark.skip(用于函数外,跳过测试用例)
1
2
3
4
5
6
|
@pytest .mark.skip(reason = 'feature not implemented' ) def test_1(): pass # 模块级别跳过。(注:参数allow_module_level的值设为True) pytest.skip( 'skip all tests' , allow_module_level = True ) |
@pytest.mark.skipif(用于函数外,条件condition,跳过原因reason="xxx")
1
2
3
|
@pytest .mark.skipif(condition = '1<2' ,reason = 'feature not implemented' ) def test_1(): pass |
************************************************************************************************************************************************************************
6.2 ordering-执行顺序
- 控制用例执行顺序的方法
- 在需要调整用例执行顺序的函数(或方法)前增加
@pytest.mark.run(order=x) x表示
3.数字数字形式: 小数、整数、负数
执行顺序:
1、由小到大
2、由正到负
3、未标记 的在正数后,负数前执行
顺序: 1,2,3,无标记,-3,-2,-4
*******************************************************************************************************************************************************
6.3 xfail 预期失败
xfail(condition, reason)
--condition 预期失败的条件
--reason 预期失败的原因
xfail-strict=true ,则只要被pytest.mark.xfail 标记的方法,结果都为失败;若xfail-strict=false,则被pytest.mark.xfail标记得方法,按照实际执行结果来看成功还是失败的
pytest.ini加参数,
不希望出现 预期失败结果成功 的情况
就在配置文件中添加一个参数:
xfail_strict = true
6.5 @pytest.mark.parametrize("mobile,code", [(121,212),(123,321)])
6.6 rerunfailure-失败重跑
失败重跑机制
安装pytest-rerunfailure
在设置文件pytest.ini中添加命令
reruns = 重跑次数
addopts = --reruns=10
6.7 自定义的pytest.mark的使用