# 清华大学镜像源。
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pytest-rerunfailures
# 阿里云镜像源。
pip3 install -i https://mirrors.aliyun.com/pypi/simple pytest-rerunfailures
# 华为云镜像源。
pip3 install -i https://mirrors.huaweicloud.com/repository/pypi/simple pytest-rerunfailures
reruns
:这个参数指定了测试函数在失败时重试的次数。reruns_delay
:这个参数指定了每次重试之间的时间间隔(以秒为单位)。reruns_filter
:可以使用 reruns_filter
参数来指定一个函数,用于动态决定是否应该重试运行测试函数。该函数接受测试函数对象作为参数,并返回一个布尔值,指示是否应该进行重试。reruns_errors
:可以使用 reruns_errors
参数来指定一个异常类型或元组,表示哪些异常类型应该触发重试。只有在捕获到指定的异常类型时,才会触发重试。reruns_incremental
:可以使用 reruns_incremental
参数来启用增量模式。在增量模式下,重试的次数将逐渐增加,直到测试函数通过或达到最大重试次数。reruns_on_skips
:可以使用 reruns_on_skips
参数来指定是否在跳过测试时也进行重试。如果设置为 True
,则在跳过测试时也会触发重试。@pytest.mark.flaky()
插件提供的装饰器,用于在测试函数上标记重试行为:import random
import pytest
def get_random():
# 0 ~ 101 之间的随机整数。
return random.randint(0, 101)
# 最多重试 5 次,每次间隔 2 s。
@pytest.mark.flaky(reruns=5, reruns_delay=2)
def test_example_1():
r = get_random()
print(f"num={r}")
# 随机数大于等于70才会通过断言,否则进入重试。
assert r >= 70
# num=42
# num=69
# num=86
# ========================= 1 passed, 2 rerun in 4.13s ==========================
# 如果遇到 ZeroDivisionError 就重试。
@pytest.mark.flaky(reruns_errors="ZeroDivisionError")
def test_example_2():
num = 10 / 0
assert 5 > num
# RERUN
# FAILED
pip install -i https://mirrors.aliyun.com/pypi/simple/ pytest-repeat
@pytest.mark.repeat(count)
可以将某些测试用例标记为执行重复多次:import pytest
@pytest.mark.repeat(3)
def test_repeat():
print("测试用例执行")
assert True
# [ 33%]测试用例执行
# [ 66%]测试用例执行
# [100%]测试用例执行
“-------怕什么真理无穷,进一寸有一寸的欢喜。”
微信公众号搜索:饺子泡牛奶。