如果想从头学起Cypress,可以看下面的系列文章哦

https://www.cnblogs.com/poloyy/category/1768839.html

重试的介绍

学习前的三问

  1. 什么是重试测试
  2. 为什么重试很重要
  3. 如何使用重试

为什么要重试

  • 使用 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 函数也将重新运行

  1. beforeEach
  2. 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)- 测试运行失败自动重试的更多相关文章

  1. 精讲RestTemplate第8篇-请求失败自动重试机制

    本文是精讲RestTemplate第8篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  2. 精讲响应式WebClient第6篇-请求失败自动重试机制,强烈建议你看一看

    本文是精讲响应式WebClient第6篇,前篇的blog访问地址如下: 精讲响应式webclient第1篇-响应式非阻塞IO与基础用法 精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方 ...

  3. testng失败自动重试

    使用的监听类有:IRetryAnalyzer.TestListenerAdapter.IAnnotationTransformer public class Retry implements IRet ...

  4. Cypress系列(6)- Cypress 的重试机制

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 重试(Retry-ability) ...

  5. MQ消费失败,自动重试思路

    在遇到与第三方系统做对接时,MQ无疑是非常好的解决方案(解耦.异步).但是如果引入MQ组件,随之要考虑的问题就变多了,如何保证MQ消息能够正常被业务消费.所以引入MQ消费失败情况下,自动重试功能是非常 ...

  6. Cypress系列(2)- Cypress 框架的详细介绍

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html Cypress 简介 基于 JavaSc ...

  7. testng 失败自动截图

    testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法 那么首先新建一个Listene ...

  8. [转载]rabbitmq可靠发送的自动重试机制

    转载地址http://www.jianshu.com/p/6579e48d18ae http://www.jianshu.com/p/4112d78a8753 接这篇 在上文中,主要实现了可靠模式的c ...

  9. rabbitmq 不发送ack消息如何处理:rabbitmq可靠发送的自动重试机制

    转载地址:http://www.jianshu.com/p/6579e48d18ae http://www.jianshu.com/p/4112d78a8753 接这篇 在上文中,主要实现了可靠模式的 ...

随机推荐

  1. 20190925-05Redis五大数据类型之String 000 026

  2. 【小程序】---- 使用 Echarts 的方式

    1.下载 GitHub 上的 ecomfe/echarts-for-weixin 项目,Echarts微信版. 地址:https://github.com/ecomfe/echarts-for-wei ...

  3. 尤雨溪:TypeScript不会取代JavaScript

    来源 |evrone.com译者 | 核子可乐策划 | 蔡芳芳 近日,Evrone 与 Vue.js 的作者尤雨溪进行了一次访谈,了解他对于无后端与全栈方法.以及 Vue.js 适用场景的看法,还有他 ...

  4. Unity接入多个SDK的通用接口开发与资源管理(二)

    接着上篇,本篇对SDK接口进行封装.在开始之前,需要先了解下面知识. (1)unity与android之间的交互 unity通过下面方式调用android中的函数: 方法一: AndroidJavaC ...

  5. 自然常数e的含义

    e是一个重要的常数,但是它的直观含义却不像 π 那么明了.我们都知道,圆的周长与直径之比是一个常数,这个常数被称为圆周率,记作 π = 3.14159......可是e代表什么呢? e是“指数”(ex ...

  6. Hadoop框架:单服务下伪分布式集群搭建

    本文源码:GitHub·点这里 || GitEE·点这里 一.基础环境 1.环境版本 环境:centos7 hadoop版本:2.7.2 jdk版本:1.8 2.Hadoop目录结构 bin目录:存放 ...

  7. h5页面在浏览器上好好的,到手机上熄火了又看不到报错信息怎么办?

    背景 最近小编接了一个新需求,用h5开发页面,通过webview嵌入原生APP中,自己在浏览器上开发爽歪歪,什么信息都能看到,可是一嵌入原生app中,瞬间就熄火了,啥也看不到了,不知道为什么,反正就是 ...

  8. MySQL的共享锁阻塞会话案例浅析输入日志标题

        这是问题是一个网友遇到的问题:一个UPDATE语句产生的共享锁阻塞了其他会话的案例,对于这个案例,我进一步分析.总结和衍化了相关问题.下面分析如有不对的地方,敬请指正.下面是初始化环境和数据的 ...

  9. PHP_Code_Challenge 1~30

    1. 1wMDEyY2U2YTY0M2NgMTEyZDQyMjAzNWczYjZgMWI4NTt3YWxmY= <?php error_reporting(0); require __DIR__ ...

  10. 【测试基础第六篇】bug定义及生命周期

    bug定义 狭义:软件程序的漏洞或缺陷 广义:测试工程师或用户所发现和提出的软件可改进的细节(增强型.建议性)或需求文档存在差异的功能实现 职责:发现bug,提给开发,让其修改 bug类型--了解 代 ...