一、环境要求

  1. Python3.6至Python3.9,或者PyPy3
  2. pytest 5.0以上

二、安装插件

pip install pytest-rerunfailures -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

三、重新运行所有失败用例

重跑所有用例使用 --reruns 命令行,并指定最大重跑次数,设置重跑间隔时间使用--reruns-delay命令行

pytest --reruns 5 --reruns-delay 1   

运行失败的fixture或setup_class也将重新执行

四、重新运行所有符合表达式的失败用例

使用--only-return命令行运行指定错误的用例

pytest --reruns 5 --only-rerun AssertionError --only-rerun ValueError  # 会重跑所有报AssertionError和ValueError错误的用例

五、重新运行指定的测试用例

在单个用例上添加装饰器@pytest.mark.flaky(reruns=5),在运行失败时会自动重新运行,需要指定最大重新运行的次数

@pytest.mark.flaky(reruns=5)
def test_example():
    import random
    assert random.choice([True, False])

指定重新运行的间隔时间

@pytest.mark.flaky(reruns=5, reruns_delay=2)
def test_example():
    import random
    assert random.choice([True, False])

指定环境下才重跑(当其他条件满足时condition可忽略)

@pytest.mark.flaky(reruns=5, condition=sys.platform.startswith("win32"))
def test_example():
   import random
   assert random.choice([True, False])

六、注意事项

如果指定了用例的重新运行次数,则在命令行添加--reruns对这些用例是不会生效的

七、兼容性问题

1.不可以与类,模块还有包级别的fixture装饰器一起使用: @pytest.fixture()
2.该插件与pytest-xdist的 --looponfail 标志不兼容
3.该插件与核心--pdb标志不兼容

参考项目地址:https://github.com/pytest-dev/pytest-rerunfailures

Q.E.D.


Nothing really matters to me!