pytest-rerunfailures失败重跑用例

一、安装插件

#官方
pip install pytest-rerunfailures

#国内源
pip install pytest-rerunfailures -i https://pypi.tuna.tsinghua.edu.cn/simple

二、命令行方式运行

  • 要重新运行所有失败的用例,添加--reruns num参数,其中num表示最大运行次数

    # 失败重运行最大次数为5次
    pytest --reruns 5
    
  • 要在两次重运行之间增加延时,则可以使用--reruns-delay参数,指定下一次重新运行之前需要等待的秒数

    # 失败重运行最大次数为3次,每次重跑时等待10秒
    pytest --reruns 3 --reruns-delay 10
    
  • 重跑失败用例时,还可以与某些表达式进行匹配

    # 下面的代码只会重新运行与 AssertionError断言错误相匹配的错误用例
    pytest --reruns 5 --only-rerun AssertionError
    
    # 多次传递标志会累积参数,因此下面的代码会重新运行匹配 AssertionError 或 ValueError 的错误用例
    pytest --reruns 5 --only-rerun AssertionError --only-rerun ValueError
    
  • 重新运行除匹配某些表达式之外的所有失败用例

    # 下面代码会重新运行除开 AssertionError断言错误相匹配的错误用例
    pytest --reruns 5 --rerun-except AssertionError
    
    # 多次传递标志会累积参数,下面代码会重新运行除开 AssertionError或OSError断言错误相匹配的错误用例
    pytest --reruns 5 --rerun-except AssertionError --rerun-except OSError
    

三、装饰器方式运行

  • 若要将单个测试标记为失败重跑,请添加flaky装饰器,其中包含您希望测试用例重跑的最大次数

    @pytest.mark.flaky(reruns=5)
    def test_example():
        import random
        assert random.choice([True, False])
    
  • 还可以指定重新运行的延迟时间,比如:@pytest.mark.flaky(reruns=5, reruns_delay=2) 表示重运行最大次数为5次,下一次开始前等待2s后再重跑

    @pytest.mark.flaky(reruns=3, reruns_delay=2)
    def test_01():
        import random
        assert random.choice([True, False, False, False])
    
  • 还可以在重跑测试用例时,指定可选条件,比如制定运行的平台

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

四、参考

1、https://github.com/pytest-dev/pytest-rerunfailures

posted @ 2023-03-06 16:32  xyztank  阅读(44)  评论(0编辑  收藏  举报