pytest重复运行所有或指定测试用例(pytest-repeat插件)

网友投稿 390 2022-08-28


pytest重复运行所有或指定测试用例(pytest-repeat插件)

前言

我们平时在做测试的时候经常会遇到网络抖动,导致测试用例执行失败,重新执行后用例又执行成功了;有时候还会遇到功能不稳定,偶尔会出现bug,我们经常需要反复多次的运行用例,从而来复现问题。pytest-repeat插件就可以实现重复运行测试用例的功能。

pytest-repeat安装

pip install pytest-repeat

使用方式

命令行使用--count参数来指定测试用例的运行次数。

pytest --count=5 test_file.py # --count=5表示重复执行5次

举例:

# file_name: test_repeat.pyimport pytestdef 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 ,运行结果:

从结果中可以看到,每个测试用例被重复运行了三次。

通过指定--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.pyimport pytestdef 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遍,但重复运行的过程中一旦遇到失败用例就会停止运行。

去期待陌生,去拥抱惊喜。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:pytest参数化自定义测试用例标题【@pytest.mark.parametrize(ids=XXX)】(pytest标签)
下一篇:java方法重载和参数类型自动提升方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~