赞
踩
领取资料,咨询答疑,请➕wei: June__Go
上一小节我们学习了设置用例超时时间插件pytest-timeout,本小节我们讲解一下pytest重复执行用例插件pytest-repeat。
前言
做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,直到复现出这个问题来。还有自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,或者针对某个模块的用例重复执行多次。此外该用例是不管失败与否用例都需要跑多次,与失败重跑不同,失败重跑只会在失败的时候重新尝试多次。pytest-repeat插件就可以实现重复运行测试用例的功能。
pytest-repeat安装
pip install pytest-repeat
使用方式
命令行使用--count参数来指定测试用例的运行次数
pytest --count=5 test_file.py # --count=5表示重复执行5次
举例:
- # file_name: test_repeat.py
-
-
- import pytest
-
-
- def test_01():
- print("\n测试用例test_01")
-
-
- def test_02():
- print("\n测试用例test_02")
-
-
- def test_03():
- print("\n测试用例test_03")
-
-
- if __name__ == '__main__':
- pytest.main(['-s', 'test_repeat.py'])
命令行输入指令: pytest --count=3 test_repeat.py -s -v ,运行结果:
- collected 9 items
-
- test_repeat.py::test_01[1-3]
- 测试用例test_01
- PASSED
- test_repeat.py::test_01[2-3]
- 测试用例test_01
- PASSED
- test_repeat.py::test_01[3-3]
- 测试用例test_01
- PASSED
- test_repeat.py::test_02[1-3]
- 测试用例test_02
- PASSED
- test_repeat.py::test_02[2-3]
- 测试用例test_02
- PASSED
- test_repeat.py::test_02[3-3]
- 测试用例test_02
- PASSED
- test_repeat.py::test_03[1-3]
- 测试用例test_03
- PASSED
- test_repeat.py::test_03[2-3]
- 测试用例test_03
- PASSED
- test_repeat.py::test_03[3-3]
- 测试用例test_03
- PASSED
-
- ========================================================================================================================================================================= 9 passed in 0.02s =========================================================================================================================================================================
从结果中可以看到,每个测试用例被重复运行了三次。
通过指定--repeat-scope参数来控制重复范围
从上面例子的运行结果中可以看到,首先重复运行了3次test_01,然后重复运行了3次test_02,最后重复运行了3次test_03。但是有的时候我们想按照执行顺序为test_01,test_02,test_03这样的顺序来重复运行3次呢,这时候就需要用到另外一个参数了: --repeat-scope 。
--repeat-scope与pytest的fixture的scope参数是类似的:--repeat-scope可设置的值为:module、class、session、function(默认)。
①module:以整个.py文件为单位,重复执行模块里面的用例,然后再执行下一个(以.py文件为单位,执行一次.py,然后再执行一下.py);
②class:以class为单位,重复运行class中的用例,然后重复执行下一个(以class为单位,运行一次class,再运行一次class这样);
③session:重复运行整个会话,所有测试用例运行一次,然后再所有测试用例运行一次;
④function(默认):针对每个用例重复运行,然后再运行下一次用例;
例如:使用 --repeat-scope=session 重复运行整个会话,命令行输入指令: pytest test_repeat.py -s -v --count=3 --repeat-scope=session ,运行结果为:
从结果中可以看到,执行顺序为:test_01、test_02、test_03;然后重复运行3次;
通过装饰器@pytest.mark.repeat(count)指定某个用例重复执行
- # file_name: test_repeat.py
-
-
- import pytest
-
-
- def test_01():
- print("\n测试用例test_01")
-
-
- @pytest.mark.repeat(3)
- def test_02():
- print("\n测试用例test_02")
-
-
- def test_03():
- print("\n测试用例test_03")
-
-
- if __name__ == '__main__':
- pytest.main(['-s', 'test_repeat.py'])
命令行输入指令: pytest test_repeat.py -s -v ,运行结果:
从结果中可以看到只有被装饰器@pytest.mark.repeat(3)标记的用例test_02被重复运行了3次。
重复运行用例直到遇到失败用例就停止运行
通过设置pytest -x 和 pytest-repeat 命令行参数的结合使用就能实现重复运行测试用例直到遇到第一次失败用例就停止运行。
pytest test_file.py -x -v --count=20
命令行中输入上述指令后,测试用以将重复运行20遍,但重复运行的过程中一旦遇到失败用例就会停止运行。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei: June__Go
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。