失败重跑与重复执行插件
2024-01-09 21:34:44
一、失败重跑插件
1.1 概述
- pytest-rerunfailures 是一个用于 pytest 测试框架的插件,它提供了重新运行失败的测试用例的功能。
- 当测试用例失败时,pytest-rerunfailures 可以自动重新运行失败的测试用例,以便给予测试用例更多的机会通过。
- 兼容版本:python3 、pytest 5.0 及以上。
1.2 安装
- 使用国内镜像源安装:
# 清华大学镜像源。
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
1.3 参数讲解
reruns
:这个参数指定了测试函数在失败时重试的次数。reruns_delay
:这个参数指定了每次重试之间的时间间隔(以秒为单位)。reruns_filter
:可以使用reruns_filter
参数来指定一个函数,用于动态决定是否应该重试运行测试函数。该函数接受测试函数对象作为参数,并返回一个布尔值,指示是否应该进行重试。reruns_errors
:可以使用reruns_errors
参数来指定一个异常类型或元组,表示哪些异常类型应该触发重试。只有在捕获到指定的异常类型时,才会触发重试。reruns_incremental
:可以使用reruns_incremental
参数来启用增量模式。在增量模式下,重试的次数将逐渐增加,直到测试函数通过或达到最大重试次数。reruns_on_skips
:可以使用reruns_on_skips
参数来指定是否在跳过测试时也进行重试。如果设置为True
,则在跳过测试时也会触发重试。
1.4 代码示例
@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
二、重复执行插件
2.1 概述
- pytest-repeat 是一个用于 pytest 的插件,它允许你在运行测试时重复运行特定的测试用例。
- 通过重复运行测试用例,你可以增加测试的可靠性,尤其是对于那些具有随机性或不确定性的测试场景。
2.2 安装
- 使用阿里云镜像源安装
pip install -i https://mirrors.aliyun.com/pypi/simple/ pytest-repeat
2.3 代码示例
@pytest.mark.repeat(count)
可以将某些测试用例标记为执行重复多次:
import pytest
@pytest.mark.repeat(3)
def test_repeat():
print("测试用例执行")
assert True
# [ 33%]测试用例执行
# [ 66%]测试用例执行
# [100%]测试用例执行
三、结束语
“-------怕什么真理无穷,进一寸有一寸的欢喜。”
微信公众号搜索:饺子泡牛奶。
文章来源:https://blog.csdn.net/weixin_48776531/article/details/135489885
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!