Cypress 测试实践:如何优化测试性能

在前端开发中,测试是保证质量的重要步骤。Cypress 是一种流行的前端自动化测试工具,能够为开发者提供不仅仅质量测试的信息,而且性能和可靠性方面的信息。

在测试代码的编写和执行过程中,性能往往成为瓶颈。考虑到测试工具的执行速度是我们进行前端自动化测试时的一个重要指标,优化测试性能变得尤为重要。

在本文中,我们将会学习到一些优化 Cypress 测试性能的技巧来加速测试执行,主要包括以下三个方面:

  1. 编写高效的测试代码
  2. 配置合理的 Cypress 测试并行
  3. 优化环境设计和数据准备

1. 编写高效的测试代码

如何编写高效的测试代码是显而易见的问题。以下是一些技巧来确保测试代码的高效性:

(1)使用 .its 和 .invoke 代替 .get

在 Cypress 中,您可以通过 .get 定位元素以从网页中提取数据。而 .its 和 .invoke 命令更加高效,可以在一次定位中提取多个元素。

例如,以获取张表格单元格中既有内容又有 href 属性为例,以下代码是高效的:

------------- ----
  --------------
  ----------------- ---

------------- ----
  --------
  ---------------
  ---------------
  -------------------- ----

------------- ----
  --------
  --------------- -------
  -------------------- ----

它们从同一个查询中同时提取 table 标签中所有 td 标签的数量、第一个 td 标签的文本内容、第一个 td 标签的 href 属性。

(2)避免使用复杂等待器

华丽的等待器能够使我们的测试代码显得非常专业,但它们会影响测试的性能。Cypress 的默认等待时间已足够让我们从需要等待的操作中获取控制权。

为避免使用开发者定义的等待器,可以使用 Cypress 的 should 命令。他可以在断言通过前一直等待:

-------------------------------------------------

(3)避免测试多个断言

在某些情况下,测试单个断言需要众多步骤。在这种情况下,我们可以通过测试多个断言以避免重复代码。

例如,在一个页面上测试同一元素的多个属性是否符合预期,可以这样编写:

----------- -------------------
  ------------------ -- -
    --------------------------------------- ----------
    ------------------------------------ ------------
    ----------------------------------------
  ---

(4)缩短流程

减少测试流程长度可能会大大提高测试执行速度。代价就是这可能会降低代码覆盖率。

例如,我们在这里使用 Cypress 来模拟一个鼠标悬停一个元素并打开二级菜单的情况:

-------------------------------------
----------------------------------------

可以使用更短的方式来完成这个测试:

----------------------------------------------

2. 配置合理的 Cypress 测试并行

合理的并行化可以帮助我们节省大量时间。如果您有多个测试机器可用,那么您可以轻松地通过配置 Cypress 进行并行化测试。

(1)使用 Cypress Dashboard

Cypress Dashboard 是 Cypress 公司提供的一项服务。使用此服务可以在“特定机器”上免费并行运行 Cypress 测试,而且还提供了许多信息,例如代码覆盖率、性能度量和测试结果等。

您可以在“运行器”信息中找到“CI”选项,设置测试运行时的 CI 指示器。例如,可以通过 Bamboo、Jenkins 等平台使用“CI”。

(2)利用 uncommitted 测试

通过使用 npms 安装 cypress-uncommitted,我们可以使用 test-uncommitted 命令,以停止所有未提交的版本。

这是一种快速测试可行性的方法。如果您使用的仓库中只有极少数量的未提交版本,这将非常有用。

以下是使用 Cypress uncommitted 的 CLI 命令:

---------- -
  ------------------------- -------------------- --- -------- ------ ------------------------------
-

3. 优化环境设计和数据准备

(1)在虚拟机中运行测试

在虚拟机中运行 Cypress 测试可以增加测试的并发性。

(2)尝试使用 Cypress Image Snapshot

使用 Cypress Image Snapshot 可以避免过多的 API 调用,而是直接比较截图。这将使您的测试更快,因为不必等待 API 的响应。

以下是使用 Cypress Image Snapshot 的 CLI 命令:

---------- -
  ---------- -------- ------
  --------- -------- -----
  ---------- -------- --- ----- ---------------------
-

(3)优化完成数据准备

如果您使用的数据保存在某个远程服务器上,则应使用编写的代码块并尽可能减少数据的拉取时间。

例如,以下代码可用于优化测试运行即时生成新数据:

------------------------------------ ------ -- -
  ----- ----- - ----------------------------------
  --- ------ - ---
  --- ---- - - ------- - - -- ---- ------ -- ------------------------------ - ---------------
  ------ -------
---

-------------------------------------- -- -- -
  --------------------------------------- -- -
    ----- ---- - --------------------------------------- - ------------------------
    -------------------------
    --------------------------------
    --------------------------------------------------------------------------
    -------------------------------------------------------------
    --------------------------
    --------------------------------
  ---
---

在常规步骤中,可以使用以下方法调用此命令:

------------- -- -
  ------------
  ----------------------------------
  --------------------
---

总结

通过遵循这些技巧,您可以轻松优化 Cypress 测试的性能。编写高效的测试代码、合理地配置 Cypress 测试并行以及优化环境设计和数据准备都是使测试性能更快的可靠方法。

在优化测试性能时,请记住为所做的每个更改编写清晰、精简和可读代码,这将使测试更易于理解和维护。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6484822e48841e9894386989


猜你喜欢

  • Vue.js 中如何使用 vuex-persistedstate 持久化状态

    在开发 Vue.js 应用程序时,状态管理是一个非常重要的问题。虽然 Vuex 可以帮助我们管理应用程序状态,但是在一些情况下,我们希望在页面刷新或者在关闭浏览器后也能够保留应用程序状态,这时候就需要...

    1 年前
  • 使用 Chai 测试 Angular 应用的最佳实践

    Chai 是一款用于 JavaScript 测试的断言库,它可以与各种测试框架配合使用,如 Mocha、Jasmine 等,能够很好地帮助我们在前端开发中进行单元测试、集成测试等。

    1 年前
  • SPA 应用的资源合并与压缩优化

    在现代的 Web 技术中,SPA(Single Page Application)应用已经成为了越来越常见的一种开发模式。这种模式有着许多优点,包括快速响应、避免不必要的页面刷新、提供更好的用户体验等...

    1 年前
  • Deno 中如何使用 TCP 和 UDP 协议?

    简介 Deno 是一个新型的 JavaScript 运行时,与 Node.js 类似,但它更加现代化、安全,并且没有 npm 包管理器的依赖。它采用 Rust 编写,并且基于 V8 引擎。

    1 年前
  • 在 Angular 项目中使用 RxJS 实现多级数据联动

    在现代的 Web 应用程序中,前端数据交互越来越复杂。其中,数据联动是一个常见的需求,尤其是在表单交互中。例如,当我们选择一个省份时,相关的城市列表会自动更新。在 Angular 中,我们可以借助 R...

    1 年前
  • PM2 如何实现进程实时监控?

    引言 在前后端分离的大环境下,前端开发工程师已经成为 Web 应用开发的必备人才。作为前端工程师,我们需要掌握很多前端技术,包括 JavaScript、HTML、CSS 等技术,也需要学会使用很多的工...

    1 年前
  • Less 中用 JavaScript 生成 @font-face 字体格式

    在前端开发中,@font-face 是非常常用的一种 CSS 规则。通过 @font-face,我们可以引用自定义字体,增强网页的视觉效果和体验。然而,在实际开发中,为了支持不同的浏览器和操作系统,我...

    1 年前
  • Material Design 中 Bottom Sheet 的制作方法

    Material Design 中的 Bottom Sheet(底部工具条)是许多 Android 应用程序中常用的 UI 组件。它可以在应用程序窗口的底部显示一个不同高度的卡片,以显示与应用程序上下...

    1 年前
  • 在 TailwindCSS 中实现霓虹提示的效果

    如果你曾在网页上看到过像霓虹灯一样闪烁的文字,那么你应该会对它产生深刻的印象。这种霓虹效果在网页设计中非常受欢迎,它可以让用户的注意力更加集中,提高交互体验。本文将向你介绍如何在 TailwindCS...

    1 年前
  • Redis 应用实例:基于 Redis 实现在线聊天室

    简介 Redis 是一种高性能的 NoSQL 数据库,其主要特点是快速读写和数据持久化。在前端开发中,Redis 有着广泛的应用场景,如缓存、会话存储、消息队列等。

    1 年前
  • Custom Elements 如何实现模板渲染

    什么是 Custom Elements Custom Elements 是 Web Components 标准中的一部分,它提供了一种自定义 DOM 元素的方法,使开发者能够创造出自己的 HTML 标...

    1 年前
  • 在 Mocha 测试中如何测试 WebSocket?

    WebSocket 是一种在现代 Web 应用中越来越受欢迎的协议,它允许服务器主动向客户端推送数据,而不需要客户端通过不间断的轮询来获取更新。在前端开发中,确保 WebSocket 连接正常的行为很...

    1 年前
  • CSS Flexbox 多行垂直居中布局技巧

    CSS Flexbox 是前端开发中比较常用的布局方式之一,特别是在实现多行垂直居中布局时,Flexbox 的优势更为明显。本文将详细介绍 Flexbox 实现多行垂直居中布局的技巧,并提供实用的代码...

    1 年前
  • Mongoose 中使用 node-jsonwebtoken 进行 token 认证

    在前端开发中,有时候需要使用 token 认证来保护我们的 RESTful API。而在使用 node.js 开发中,我们可以使用 node-jsonwebtoken 来实现简单、安全的 token ...

    1 年前
  • 使用 Web Components 构建可复用的图表组件

    Web Components 是一种被广泛使用的前端开发工具,它可以让开发者更高效地开发可复用组件,同时提高应用程序的可维护性和可扩展性。本篇文章将介绍如何使用 Web Components 构建一个...

    1 年前
  • 如何使用 Node.js 创建基于 WebRTC 的实时音视频应用

    如何使用 Node.js 创建基于 WebRTC 的实时音视频应用 WebRTC 是一种支持浏览器之间实时通信的开放式技术。它为用户提供了通过网络进行音视频通信的强大工具,尤其适用于 Web 应用程序...

    1 年前
  • 性能优化之数据结构的选择

    在前端开发中,优化性能是非常重要的一项工作。除了优化代码逻辑,还需要关注数据的存储和处理方式。数据结构是一种非常重要的思想,能够帮助我们更高效地处理数据。在本文中,我们将重点探讨数据结构的选择对性能优...

    1 年前
  • TypeScript 中如何处理循环异步调用的问题?

    在前端开发中,我们经常会遇到需要循环调用异步函数的情况,例如需要从服务器中获取大量数据,而每次请求的数据量非常有限,此时,我们就需要使用循环异步调用来实现这个目的。

    1 年前
  • 如何使用 normalize.css 代替 CSS Reset?

    在前端开发中,为了让网页在不同的浏览器中有相同的表现效果,常常会使用 CSS Reset。但是,很多开发者都发现 CSS Reset 存在一些问题,比如可能会不必要地覆盖浏览器原生的样式、增加工作量等...

    1 年前
  • 响应式设计实践:如何正确处理 JavaScript 与 CSS 交互?

    在现代 Web 开发中,响应式设计变得越来越重要。在不同的设备上呈现一致的用户体验是一个大挑战,因为设备的类型和屏幕大小多种多样。为了应对这种挑战,前端开发人员需要采用一些工具和技术,同时确保 Jav...

    1 年前

相关推荐

    暂无文章