1. 程式人生 > 實用技巧 >Pytest系列(11)- 失敗重跑外掛pytest-rerunfailures的詳細使用

Pytest系列(11)- 失敗重跑外掛pytest-rerunfailures的詳細使用

一、環境前提

以下先決條件才能使用pytest-rerunfailures

  • Python 3.5, 最高 3.8, or PyPy3
  • pytest 5.0或更高版本

安裝外掛

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

三、提前瞭解重點

命令列引數:--reruns n(重新執行次數),--reruns-delay m(等待執行秒數)

裝飾器引數:reruns=n(重新執行次數),reruns_delay=m(等待執行秒數)

四、重新執行所有失敗的用例

​ 要重新執行所有測試失敗,使用 --reruns 命令列選項,並指定要執行測試的最大次數:`

pytest --reruns 5 -s 

4.1 知識點

​ 執行失敗的fixture或setup_class也將重新執行

4.2 新增重新執行的延時

​ 要在兩次重試之間增加延遲時間,使用 --reruns-delay 命令列選項,指定下次測試重新開始之前等待的秒數

pytest --reruns 5 --reruns-delay 10 -s

五、重新執行指定的測試用例

​ 要將單個測試用例新增flaky裝飾器 @pytest.mark.flaky(reruns=5) ,並在測試失敗時自動重新執行,需要指定最大重新執行的次數

5.1 例子

import pytest

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

​ 執行結果

collecting ... collected 1 item

11_reruns.py::test_example RERUN                                         [100%]
11_reruns.py::test_example PASSED                                        [100%]

========================= 1 passed, 1 rerun in 0.05s ==========================

5.2 同樣的,這個也可以指定重新執行的等待時間

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

注意事項:

如果指定了用例的重新執行次數,則在命令列新增--reruns對這些用例是不會生效的

六、相容性問題

  • 不可以和fixture裝飾器一起使用: @pytest.fixture()
  • 該外掛與 pytest-xdist--looponfail 標誌不相容
  • 該外掛與核心 --pdb標誌不相容