Pytest插件pytest-rerunfailures失败重跑
Pytest插件pytest-rerunfailures失败重跑
安装
pip install pytest-rerunfailures
doc
- 当前最新版本11.0(2023-1-12)
- python>=3.7
- pytest 6.0以上
使用方法
第一种用法:装饰器 @pytest.mark.flaky
示例代码
import pytest
from time import ctime @pytest.mark.flaky(reruns=3, reruns_delay=2)
def test_a():
print(ctime())
import random assert random.choice([True, False]) # 这个代码你可能直接passed了,随机的 if __name__ == '__main__':
pytest.main(['-sv',__file__])
示例输出
test_demo.py::test_a Sun Jan 29 09:39:35 2023
RERUN
test_demo.py::test_a Sun Jan 29 09:39:37 2023
PASSED ========================= 1 passed, 1 rerun in 2.13s ==========================
装饰器中的参数
- reruns=重跑次数,如果都失败那么这个用例就失败了
- reruns_delay就是重跑的间隔
结果会记录你rerun的次数
如果把assert改为
assert random.choice([1, 0, 0, 0, 0])
那你的输出很可能就是如下的
test_demo.py:10: AssertionError
=========================== short test summary info ===========================
FAILED test_demo.py::test_a - AssertionError: assert 0
========================= 1 failed, 3 rerun in 6.20s ==========================
flaky还有一个参数
- condition:有点类似于skipif中的条件
示例代码
import sys import pytest
from time import ctime @pytest.mark.flaky(reruns=3, reruns_delay=2,condition=sys.platform.startswith('linux'))
def test_a():
print(ctime())
import random
assert random.choice([1, 0]) if __name__ == '__main__':
pytest.main(['-sv', __file__])你测试多次会发现,遇到失败的情况压根就不会重跑的,因为condition不满足
第二种用法:命令行
跟多数插件一样,它也支持命令行的用法
你可以这样用
$ pytest --reruns 5 --reruns-delay 1
但是condition并没有这个命令行,它变成了--only-rerun(确切的说也不是变,有点不太一样了)
# 遇到AssertionError错误就重跑
$ pytest --reruns 5 --only-rerun AssertionError
# 遇到AssertionError或者ValueError 就重跑
$ pytest --reruns 5 --only-rerun AssertionError --only-rerun ValueError示例代码
def test_a():
assert int('a') # 会产生一个ValueError
pytest -sv --reruns 2 --reruns-delay 1 --only-rerun ValueError test_demo.py
test_demo.py:4: ValueError
==================== short test summary info =================================================
FAILED test_demo.py::test_a - ValueError: invalid literal for int() with base 10: 'a'
==================== 1 failed, 2 rerun in 0.06s ===============================================
--only-rerun的意思很明确,只有遇到ValueError才重跑
同样的代码,换个参数--rerun-except,除了ValueError才会重跑,遇到ValueError并不重跑
pytest -sv --reruns 2 --reruns-delay 1 --rerun-except ValueError test_demo.py
test_demo.py:4: ValueError
======================== short test summary info =================================================
FAILED test_demo.py::test_a - ValueError: invalid literal for int() with base 10: 'a'
======================== 1 failed in 0.06s ====================================================
测试AssertionError的时候 貌似跟我预期的不太一样,可能是我眼花了。
如果命令行没有-v显示的是R标记
test_demo.py RRF # 重跑了2次后失败了 , 对应底部的1 failed, 2 rerun in 0.06s
部分源码
命令行
# command line options
def pytest_addoption(parser):
group = parser.getgroup(
"rerunfailures", "re-run failing tests to eliminate flaky failures"
)
group._addoption(
"--only-rerun",
action="append",
dest="only_rerun",
type=str,
default=None,
help="If passed, only rerun errors matching the regex provided. "
"Pass this flag multiple times to accumulate a list of regexes "
"to match",
)
group._addoption(
"--reruns",
action="store",
dest="reruns",
type=int,
default=0,
help="number of times to re-run failed tests. defaults to 0.",
)
group._addoption(
"--reruns-delay",
action="store",
dest="reruns_delay",
type=float,
default=0,
help="add time (seconds) delay between reruns.",
)
装饰器参数
def get_reruns_count(item):
...
if "reruns" in rerun_marker.kwargs:
... def get_reruns_delay(item):
...
if "reruns_delay" in rerun_marker.kwargs:
... def get_reruns_condition(item):
...
if rerun_marker is not None and "condition" in rerun_marker.kwargs:
...
Pytest插件pytest-rerunfailures失败重跑的更多相关文章
- Pytest(4)失败重跑插件pytest-rerunfailures
安装: pip3 install pytest-rerunfailures 重新运行所有失败用例 要重新运行所有测试失败的用例,请使用--reruns命令行选项,并指定要运行测试的最大次数: $ py ...
- pytest框架之rerunfailures失败重运行机制
web自动化测试中,稳定性在整个测试运行中都至关重要,但不能保证测试脚本或者测试环境一直都能够稳定,它牵扯到诸多因素,在这里就不赘述,pytest框架相较于unittest的一大优势就在于拥有用例失败 ...
- pytest文档8-html报告报错截图+失败重跑
前言 做web自动化的小伙伴应该都希望在html报告中展示失败后的截图,提升报告的档次,pytest-html也可以生成带截图的报告. conftest.py 1.失败截图可以写到conftest.p ...
- pytest失败重跑
一.说明 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来.自动化运行用例时候,也会出现偶然的bug,可以针对单个用例 ...
- pytest 失败重跑截图
1.环境准备 /*@param: 作者:流浪的python Date:2019/01/19 env:python 3.7(由于3.0-3.5以下部分pytest可能有部分兼容问题安装建议2.7-2.9 ...
- Pytest学习笔记9-失败重跑
前言 在进行自动化测试的过程中,我们一定会有这样的需求:希望失败的用例可以自动重跑 在pytest中,提供了pytest-rerunfailures插件可以实现自动重跑的效果 插件安装 pip命令安装 ...
- testng优化:失败重跑,extentReport+appium用例失败截图,测试报告发邮件
生成的单html方便jenkins集成发邮件,= = 构建失败发邮件 参考:https://blog.csdn.net/galen2016/article/details/77975965 步骤: 1 ...
- 【转载】扩展Robot Framework,实现失败用例自动再执行(失败重跑)
使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法: 通过改写RobotFramework源代码增加--retry选项,实现test级别的失败 ...
- testng增加失败重跑机制
注: 以下内容引自 http://www.yeetrack.com/?p=1015 testng增加失败重跑机制 Posted on 2014 年 10 月 31 日 使用Testng框架搭建自动测试 ...
- RF实现多次失败重跑结果合并的基础方法和优化方法
实现思路:通过分次执行失败案例重跑,然后通过结果文件合并命令实现多次失败重跑结果文件的合并,并输出合并后的log和report文件: 说明:具体失败案例重跑命令和结果文件合并命令请参考本博客其他相关章 ...
随机推荐
- EXCEL_BASIC
公式类 比较大小 A1单元格的值大于B1单元格时为"A",小于时为"a",等于时为"e" =IF(A1>B1,"A" ...
- ubuntu生成pem证书连接服务器(已验证)
SSH 密钥认证是什么? 与用户密码登录相比,SSH 密钥认证更安全,因为只有拥有密钥的人才能连接,并且密钥通过不同的算法进行了很好的加密.它还通过无密码登录使 SSH 连接变得简单. 这个搞两个方案 ...
- Swagger的介绍
一.Swagger是什么? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. 二.Swagger 的优势? 支持 API 自动生成同步的在线 ...
- 2022春每日一题:Day 13
题目:后缀排序 什么是后缀数组?他主要包含两个数组:sa和rk. 其中sa[i]表示将字符串后缀排序后第i小的编号,rk[i]表示后缀i的排名. 显然sa[rk[i]]=i,rk[sa[i]]=i. ...
- 2022春每日一题:Day 9
题目:IncDec Sequence 思维题,差分好题,每次区间操作,对应差分a[l]+=v,a[r+1]-=v,在差分数组中一定有一个正负号抵消,那么我们求出差分数组中正数(负数)和,记做s1,s2 ...
- solidedge型材库/.sldlfp格式转.par
一.打开solidworks型材库:D:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\lang\chinese-simplified\weldment profi ...
- python编程学习方法及计算机基础理论
**从零开始学习编程 ** 一.学习前语 在学习python之前首先先说几点学习建议,首先是培养自己能解决问题的能力: 1.遇到问题时给自己设置一个解决该问题的时间限制 0-5min:自己解决问题(百 ...
- MQ系列8:数据存储,消息队列的高可用保障
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系 ...
- 关于linux mint更改资源管理器的快捷键
前言 首先要知道 linux mint 的默认资源管理器是 nemo 我很不习惯 ctrl+d 在nemo里面是 收藏到侧边栏 我习惯 ctrl+d 在windows上是删除文件 所以下面我就修改这个 ...
- vue3 第二天vue响应式原理以及ref和reactive区别
前言: 前天我们学了 ref 和 reactive ,提到了响应式数据和 Proxy ,那我们今天就来了解一下,vue3 的响应式 在了解之前,先复习一下之前 vue2 的响应式原理 vue2 的响应 ...