当前位置:   article > 正文

pytest教程-29-重复执行用例插件-pytest-repeat_pytest repeat

pytest repeat

领取资料,咨询答疑,请➕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

举例:

  1. # file_name: test_repeat.py
  2. import pytest
  3. def test_01():
  4. print("\n测试用例test_01")
  5. def test_02():
  6. print("\n测试用例test_02")
  7. def test_03():
  8. print("\n测试用例test_03")
  9. if __name__ == '__main__':
  10. pytest.main(['-s', 'test_repeat.py'])

命令行输入指令: pytest --count=3 test_repeat.py -s -v ,运行结果:

  1. collected 9 items
  2. test_repeat.py::test_01[1-3]
  3. 测试用例test_01
  4. PASSED
  5. test_repeat.py::test_01[2-3]
  6. 测试用例test_01
  7. PASSED
  8. test_repeat.py::test_01[3-3]
  9. 测试用例test_01
  10. PASSED
  11. test_repeat.py::test_02[1-3]
  12. 测试用例test_02
  13. PASSED
  14. test_repeat.py::test_02[2-3]
  15. 测试用例test_02
  16. PASSED
  17. test_repeat.py::test_02[3-3]
  18. 测试用例test_02
  19. PASSED
  20. test_repeat.py::test_03[1-3]
  21. 测试用例test_03
  22. PASSED
  23. test_repeat.py::test_03[2-3]
  24. 测试用例test_03
  25. PASSED
  26. test_repeat.py::test_03[3-3]
  27. 测试用例test_03
  28. PASSED
  29. ========================================================================================================================================================================= 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)指定某个用例重复执行

  1. # file_name: test_repeat.py
  2. import pytest
  3. def test_01():
  4. print("\n测试用例test_01")
  5. @pytest.mark.repeat(3)
  6. def test_02():
  7. print("\n测试用例test_02")
  8. def test_03():
  9. print("\n测试用例test_03")
  10. if __name__ == '__main__':
  11. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/649501
推荐阅读
  

闽ICP备14008679号