- 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶尔会出现一些bug,对于这种问题我们可以针对此用例反复执行多次,最终复现出问题来
- 自动化运行用例的时候,也会出现偶然的bug,可以针对单个用例,或者针对某个模块的用例重复执行多次
- Python2.7、3.4+或PyPy
- pytest2.8 或者更高版本
pip install pytest-repeat -i https://pypi.tuna.tsinghua.edu.cn/simple
4、使用场景
场景一:重复执行
重复执行用例2次,使用命令:pytest test_01.py -s --count 2
或者 pytest test_01.py -s --count=2
- 如果需要验证偶现问题,可以将pytest的
-x
与pytest-repeat
结合,以强制运行程序在第一次失败时停止pytest --count 1000 -x test_01.py
- 代码
def test_01(): import random flag = random.choice([False, True, True, True]) print(flag) assert flag
- 执行命令:
pytest --count 100 -x test_01.py -s
- 结果
=========================================================================== test session starts ============================================================================ collected 100 items test_01.py True .True .True .True .True .False F ================================================================================= FAILURES ================================================================================= _____________________________________________________________________________ test_01[6-1000] ______________________________________________________________________________ def test_01(): import random flag = random.choice([False, True, True, True]) print(flag) > assert flag E assert False test_01.py:15: AssertionError ========================================================================= short test summary info ========================================================================== FAILED test_01.py::test_01[6-1000] - assert False !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ======================================================================= 1 failed, 5 passed in 0.11s ========================================================================
@pytest.mark.repeat(count)
- 代码:
import pytest @pytest.mark.repeat(10) def test_01(): print("测试用例")
- 执行命令:
pytest test_01.py -s
- 结果:
=========================================================================== test session starts ============================================================================ platform darwin -- Python 3.9.2, pytest-7.1.1, pluggy-1.0.0 rootdir: /Users/chenbinhao/Desktop/Sunnada-work/learnPytest/learnRepeat plugins: metadata-2.0.1, rerunfailures-10.2, html-3.1.1, repeat-0.9.1 collected 5 items test_01.py 测试用例 .测试用例 .测试用例 .测试用例 .测试用例 . ============================================================================ 5 passed in 0.02s =============================================================================
--repeat-scope
指定重复运行的用例范围(粒度)
- 作用:类似fixture中的scope
function
默认值,对范围内每个用例重复执行,然后再执行下一个用例class
以class为用例集合单位,重复执行class中的用例,再执行下一个classmodule
以模块为单位,重复执行模块里面的用例,然后再执行下一个模块session
重复执行整个测试会话,即所有测试用例执行一次,然后再执行第二次…
- 代码
class TestRepeat: def test_01(self): print("我是测试用例test_01") def test_02(self): print("我是测试用例test_02")
- 结果1:
pytest -s test_01.py::TestRepeat --count 2
=========================================================================== test session starts ============================================================================ platform darwin -- Python 3.9.2, pytest-7.1.1, pluggy-1.0.0 rootdir: /Users/chenbinhao/Desktop/Sunnada-work/learnPytest/learnRepeat plugins: metadata-2.0.1, rerunfailures-10.2, html-3.1.1, repeat-0.9.1 collected 4 items test_01.py 我是测试用例test_01 .我是测试用例test_01 .我是测试用例test_02 .我是测试用例test_02 . ============================================================================ 4 passed in 0.02s =============================================================================
- 结果2:
pytest -s test_01.py::TestRepeat --repeat-scope class
,可以和结果1进行对比=========================================================================== test session starts ============================================================================ platform darwin -- Python 3.9.2, pytest-7.1.1, pluggy-1.0.0 rootdir: /Users/chenbinhao/Desktop/Sunnada-work/learnPytest/learnRepeat plugins: metadata-2.0.1, rerunfailures-10.2, html-3.1.1, repeat-0.9.1 collected 4 items test_01.py 我是测试用例test_01 .我是测试用例test_02 .我是测试用例test_01 .我是测试用例test_02 . ============================================================================ 4 passed in 0.02s =============================================================================
- 代码
def test_repeat(): print("我是测试用例test_repeat") class TestRepeat: def test_01(self): print("我是测试用例test_01") def test_02(self): print("我是测试用例test_02")
- 结果:
pytest -s test_01.py --repeat-scope module
=========================================================================== test session starts ============================================================================ platform darwin -- Python 3.9.2, pytest-7.1.1, pluggy-1.0.0 rootdir: /Users/chenbinhao/Desktop/Sunnada-work/learnPytest/learnRepeat plugins: metadata-2.0.1, rerunfailures-10.2, html-3.1.1, repeat-0.9.1 collected 6 items test_01.py 我是测试用例test_repeat .我是测试用例test_01 .我是测试用例test_02 .我是测试用例test_repeat .我是测试用例test_01 .我是测试用例test_02 . ============================================================================ 6 passed in 0.02s =============================================================================
pytest-repeat不能与unittest.TestCase测试类一起使用。
无论–count设置多少,都只会运行一次,并显示警告
参考文章:https://www.cnblogs.com/poloyy/p/12691240.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)