Pytest系列(11)- 失敗重跑外掛pytest-rerunfailures的詳細使用
阿新 • • 發佈:2020-11-21
一、環境前提
以下先決條件才能使用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
標誌不相容