Cypress系列(65)- 测试运行失败自动重试
如果想从头学起Cypress,可以看下面的系列文章哦
https://www.cnblogs.com/poloyy/category/1768839.html
重试的介绍
学习前的三问
- 什么是重试测试
- 为什么重试很重要
- 如何使用重试
为什么要重试
- 使用 Cypress 进行自动化测试时,仍然会存在一些难以验证的行为,并使得测试变得不稳定(不可靠)
- 有时会由于不可以预测的情况(如,外部依赖项中断,随机网络错误等)而导致测试失败
其他导致不可靠测试的因素
- 前端动画
- API 调用
- 测试服务器/数据库的可用性
- 依赖资源的可用性
- 网络问题
重试的优势
- 通过重试,Cypress 能够重试失败的测试用例,以帮助减少测试脆弱性和持续集成(CI)构建失败的情况
- 从而节省团队宝贵的时间和资源,使团队可以专注于最重要的事情
备注
- Cypress 5.0 之前需要通过插件 cypress-plugin-retries 来完成重试的作用
- Cypress 5.0 开始就自带重试的配置项了
通过插件来完成重试
安装 cypress-plugin-retries
npm install -D cypress-plugin-retries
在 cypress/support/index.js 下增加如下代码
require('cypress-plugin-retries’)
在 package.json 的 scripts 代码块下增加如下代码
{
"scripts" : {
"retryCases":"CYPRESS_RETRIES=2 cypress run"
}
}
使用
在 Cypress 安装目录下运行下面命令,所有测试用例若失败都会自动重试 2 次
yarn retryCases
Cypress 自带的重试功能介绍
前言
- 默认情况下,测试将在失败时不重试,需要在配置中启用测试重试才能使用此功能
- 启用测试重试后,可以将测试配置为具有 X 次重试次数
- 例如,测试重试配置了2次重试,则 Cypress 将最多重试2次(共运行3次),然后再标记为失败测试
注意
当再次运行每个测试时,以下 hook 函数也将重新运行
- beforeEach
- afterEach
但 before 和 after 不会触发
重试的工作流程
假设 Cypress 设置了重试两次
- 第一次运行时若成功,则继续往下运行其他的测试用例
- 第一次运行若失败 ,则会重试运行第一次
- 重试运行第一次若成功,则继续往下运行其他的测试用例
- 若重试运行第一次还失败,则重试运行第二次
- 若重试运行第二次仍然失败,则将此 测试用例标记为失败
注:能够在命令日志中查看尝试的次数,并根据需要扩展每次尝试以进行检查和调试
配置重试功能
全局配置
前言
- 通常需要为 cypress run 和 cypress open 分开定义不同的重试次数
- 默认在 cypress.json 中进行配置
- runMode:定义运行 cypress run 时的重试次数
- openMode:定义运行 cypress open 时的重试次数
cypress.json 分开定义

cypress.json 合并定义

这样无论是 cypress run 命令还是 cypress open 命令,重试次数都是 2
自定义配置
测试用例级别
context('测试用例级别', function () {
it('栗子1', {
// 无论是 runMode 还是 openMode 都重试 2 次
retries: 2,
defaultCommandTimeout: 1000
}, function () {
cy.get('#id')
});
it('栗子2', {
// 分开指定重试次数
retries: {
runMode: 2,
openMode: 1
},
defaultCommandTimeout: 1000
}, function () {
cy.get('#id')
});
})
测试结果

栗子1 重试 2 次,栗子2 重试 1次,测试不通过就会打 ×,点击可以查看详细错误信息
(不得不说,这按钮 UI 真好看...)
测试用例集级别
context('测试用例集级别', {
// 此 context 下面的所有测试用例(it)重试次数都是 1
retries: 1,
defaultCommandTimeout: 1000
}, function () {
it('栗子1', function () {
cy.get('#id')
})
it('栗子2', function () {
cy.get('#id')
})
}
)
测试结果

重试功能 + .screenshot() 的栗子
测试代码
context('截图的栗子', function () {
it('栗子', {
retries: 2,
defaultCommandTimeout: 1000
}, function () {
cy.screenshot('user-login-errors')
cy.get('#id')
});
})
测试结果

重试是的截图图片名称会包含 attempt
Cypress系列(65)- 测试运行失败自动重试的更多相关文章
- 精讲RestTemplate第8篇-请求失败自动重试机制
本文是精讲RestTemplate第8篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...
- 精讲响应式WebClient第6篇-请求失败自动重试机制,强烈建议你看一看
本文是精讲响应式WebClient第6篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方 ...
- testng失败自动重试
使用的监听类有:IRetryAnalyzer.TestListenerAdapter.IAnnotationTransformer public class Retry implements IRet ...
- Cypress系列(6)- Cypress 的重试机制
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 重试(Retry-ability) ...
- MQ消费失败,自动重试思路
在遇到与第三方系统做对接时,MQ无疑是非常好的解决方案(解耦.异步).但是如果引入MQ组件,随之要考虑的问题就变多了,如何保证MQ消息能够正常被业务消费.所以引入MQ消费失败情况下,自动重试功能是非常 ...
- Cypress系列(2)- Cypress 框架的详细介绍
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html Cypress 简介 基于 JavaSc ...
- testng 失败自动截图
testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法 那么首先新建一个Listene ...
- [转载]rabbitmq可靠发送的自动重试机制
转载地址http://www.jianshu.com/p/6579e48d18ae http://www.jianshu.com/p/4112d78a8753 接这篇 在上文中,主要实现了可靠模式的c ...
- rabbitmq 不发送ack消息如何处理:rabbitmq可靠发送的自动重试机制
转载地址:http://www.jianshu.com/p/6579e48d18ae http://www.jianshu.com/p/4112d78a8753 接这篇 在上文中,主要实现了可靠模式的 ...
随机推荐
- Q200510-02-02: 重复的DNA序列 SQL解法
重复的DNA序列所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”.在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助. 编写一个函数来 ...
- [Python]打印指定目录下所有子目录
import os for root,dirs,files in os.walk(r"/home/os-hy01"): for dir in dirs: print(dir) -- ...
- [Oracle/Sql] Decode与Case
Decode和case都可以实现SQL中的条件结构,下面为用法示例: select id,name,score,decode(floor(score/20),5,'A',4,'B',3,'C',2,' ...
- SpringMVC执行流程源码分析
SpringMVC执行流程源码分析 我们先来看张图片,帮助我们理解整个流程 然后我们开始来解析 首先SpringMVC基于Servlet来运行 那么我们首先来看HttpServletBean这个类 他 ...
- Solr专题(四)Solr安全设置
因为solr的admin界面默认只需要知道ip和端口就能直接访问,如果被别有用心的人盯上就很容易给你的系统带来重大的破坏,所以我们应该限制访问. 请注意本例使用的是Solr7. Solr集成了以下几 ...
- App网络测试
弱网测试作为健壮性测试的重要部分,对于移动端测试必不可少. 什么样的网络属于弱网? 小于或等于2G速率的都属于弱网,且随着5G的到来,3G网络速率的降低,未来3G也会逐渐划入弱网的行列. 对于弱网的数 ...
- python中的算数运算符+、-、*、/、//、%、**
例如a=5,b=2 + 两个对象相加 a+b=7 - 两个对象相减 a- ...
- selenium中各个模块操作:下拉框、鼠标悬浮连贯、拼图拖拽操作、以及其他拖拽操作、连线操作
1.下拉框的修改操作 方法一:定位到元素后,通过select选择对应的值 方法二:通过两次点击的方法:没有select的value属性时,采用click两次的方法去选择: click第一次后,出现下拉 ...
- C++ (C#)实现获取NX PART预览图
VS环境下 C++版本: 1 int GetPreviewImage(const TCHAR* prtFile, const TCHAR* imageFile) 2 { 3 IStorage* pSt ...
- gRPC-go 入门(1):Hello World
摘要 在这篇文章中,主要是跟你介绍一下gRPC这个东西. 然后,我会创建一个简单的练习项目,作为gRPC的Hello World项目. 在这个项目中,只有很简单的一个RPC函数,用于说明gRPC的工作 ...