专栏首页自动化、性能测试Cypress系列(6)- Cypress 的重试机制

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

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

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

前言

重试(Retry-ability)是 Cypress 的核心概念之一,有助于我们写出更加健壮的测试

命令和断言

Cypress 测试中经常被调用的两种类型,仍以前面说到的 testLogin.js 为栗子

最后的断言解析

检查标签为 h1 的元素是否包含 jane.lane

断言的一般步骤

  1. 用 查询应用程序的DOM,找到元素

cy.get()

  1. 针对元素或元素列表进行断言尝试 ,我们示例中为

.should("contain", "jane.lane")

关于实际工作中的灵魂拷问

现在的 web 应用基本都是异步的,如果出现以下情况又应该怎么处理呢?

  1. 如果断言发生时,应用程序尚未更新DOM怎么办?
  2. 如果断言发生时,应用程序正在等待其后端响应,而导致页面暂无结果怎么办?
  3. 如果断言发生时,应用程序正在进行密集计算,而导致页面未及时更新怎么办?

上述情况再测试中经常会发生,一般处理方法是在断言前价格固定等待时间(或像 selenium 一样显式、隐式等待),但仍有可能会发生测试失败

Cypress 如何优美的解决上述问题

  1. 命令之后的断言通过,则该命令成功执行完成

cy.get()

  1. 命令之后的断言失败,则 cy.get() 命令会自动重新查询 web 应用程序的 DOM 树,然后 Cypress 将再次尝试对 cy.get() 返回的元素进行断言

cy.get()

  1. 如果断言仍然失败, 仍然会重新查询 DOM 树....以此类推

cy.get()

  1. 直到断言成功 或 命令超时

cy.get()

总结

  • 其实很像selenium 的显式等待,只不过 Cypress 是全局的,不用针对元素去单独识别
  • Cypress 这种自动重试机制避免了在测试代码中编写硬编码等待(强制等待),使测试代码更加健壮

多重断言

  • 在日常测试中,有时候需要多重断言,即获取元素后跟多个断言
  • 在多重断言中,Cypress 将按顺序进行断言,即当第一个断言通过后,会进行第二个断言,通过后进行第三个断言...以此类推

列表的栗子

需求

  • 假设一个下拉列表,存在两个选项,第一个选项是“iTesting”,第二个选项是“testerTalk”
  • 我们需要验证两个选项的存在,并且顺序正确,代码片段如下

代码解析

  1. 总共有三个断言:一个 ,两个 expect()

should()

  1. 断言实际上是 should() 断言的别名,它是 should() 的自定义回调断言,其中包含两个 expect() 断言

and()

  1. 在测试执行过程中,如果第二个断言失败了,那第三个断言永远不会执行
  2. 如果导致第二个断言失败的原因被找到且修复了,且此时整个命令还没有超时,则在进行第三个断言时,还会再次重试第一、第二个断言

重试(Retry-ability)的条件

前言

  • Cypress 并不会重试所有命令,当命令可能改变被测应用程序的状态时,该命令将不会重试(如: ,毕竟要点击)

click()

  • Cypress 仅会重试那些查询 DOM 的命令: 、 find() 、 contains() 等

cy.get()

常用的可重试命令

重点啦!

重试的超时时间默认是 4秒,对应的配置项是: defaultCommondTimeout ,如果想改重试的超时时间,在 cypress.json 文件改对应的字段值即可

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Jmeter系列(18)- 断言Assertions 的入门介绍

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

    小菠萝测试笔记
  • Cypress系列(61)- 断言最佳实践

    Cypress 命令通常具有内置的断言,这些断言将导致命令自动重试,以确保命令成功(或者超时后失败)

    小菠萝测试笔记
  • Jmeter系列(61)- 详解断言持续时间

    小菠萝测试笔记
  • Jmeter(二十一) - 从入门到精通 - JMeter断言 - 上篇(详解教程)

      最近由于宏哥在搭建自己的个人博客可能更新的有点慢。断言组件用来对服务器的响应数据做验证,常用的断言是响应断言,其支持正则表达式。虽然我们的通过响应断言能够完...

    北京-宏哥
  • Jmeter系列(18)- 断言Assertions 的入门介绍

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

    小菠萝测试笔记
  • JMeter专题系列(五)检查点

    检查点:我们对用户名和密码进行了参数化,那么怎样来判断jmeter有没有正确调用t.dat里面的文件呢。当然,我们可以从结果图表中查看。但我还是想在“登录”这个...

    流柯
  • soapUI 接口测试断言

    断言的功能不言而喻, 是指定的restful api是否正常,判断它的响应值是否符合预期标准.

    louiezhou001
  • TestNg中的断言你真的了解吗

    在执行自动化测试脚本的时候,我们需要自动判断测试脚本执行完成后的实际结果是否与预期结果一致,这个时候就需要在程序运行之前写入断言,判断当前程序执行后是否正常。

    软件测试君
  • 性能测试-Jmeter断言(Assertion)

    使用断言的目的:用于检查测试中得到的响应数据等是否符合预期,用以保证性能测试过程中的数据交互与预期一致。在request的返回层面增加一层判断机制;因为requ...

    用户6367961
  • 走进Java接口测试之流式断言库AssertJ

    在设计自动化接口 Cases 时,遵守的核心原则是3A(Arrange-> Actor ->Assert)原则;

    高楼Zee

扫码关注云+社区

领取腾讯云代金券