Cypress 自动化测试框架 - 实战教程

阅读时长 9 分钟读完

前言

在前端开发中,自动化测试框架是必不可少的。Cypress 是一款被广泛使用的高效自动化测试框架,它以简洁的语法和易于理解的 UI 测试工具而著称。Cypress 将自动化测试变得更加容易,快速和稳定,因此,它不仅是前端测试的关键工具,也是 Web 应用程序的高质量保证。

本篇文章将详细介绍 Cypress 自动化测试框架,并提供实战教程,让读者能够了解 Cypress 的核心功能,如何正确地编写测试用例,以及如何集成 Cypress 到项目中。

什么是 Cypress

Cypress 是一款自动化测试框架,可以用于测试前端 Web 应用程序。它不需要借助其他程序或浏览器扩展等工具,当你安装 Cypress 后,你就可以开箱即用。Cypress 提供的是一个捕获浏览器中发生的事件,并且可以进行断言的运行环境。

除此之外,Cypress 还拥有许多其他功能,例如:

  • 支持 JavaScript 和 TypeScript 编写测试脚本,能够直接在浏览器运行测试
  • 快速的测试启动和分组,使用了头等公民模式,可以快速定位和解决测试问题
  • 测试脚本和浏览器是直接交互的,可以更方便地进行断言和调试
  • 报错信息友好清晰,不需要繁琐的错误调试信息

Cypress 的安装与配置

Cypress 的安装非常方便,只需要通过 npm 安装即可:

安装完成后,你可以在你的项目目录里看到 node_modules/cypress 目录,其中包含了 Cypress 的相关文件。

接着,我们需要在项目的 package.json 文件中添加一些命令:

现在,我们就可以使用以下命令来启动 Cypress:

这个命令将启动 Cypress 的 UI 界面,你可以在这个界面中执行测试用例和获得测试报告。

Cypress 测试用例

Cypress 虽然很容易入门,但如果你想充分利用它的功能,还需要进行深入的学习。首先,需要了解如何正确地编写测试用例。

创建测试脚本

Cypress 测试用例是通过编写 JavaScript 脚本来实现的。首先,我们需要创建 cypress/integration/ 目录。在该目录下创建一个新的脚本文件,例如 example.spec.js,这个文件就是我们的测试脚本。

在这个测试脚本中,我们首先通过 cy.visit() 命令访问我们需要测试的 Web 应用程序;接着,我们获取了输入框、搜索按钮和搜索结果等 DOM 元素,并且依次对它们进行输入、点击和查找等操作;最后,使用 should() 函数对期望结果进行断言,这个案例里即是判断 search-result 中是否包含字符串 cypress

运行测试用例

创建好测试用例后,我们需要使用 Cypress 进行运行。我们可以通过以下命令运行测试用例:

这将会在命令行界面运行 Cypress,Cypress 将会自动地运行所有测试用例,并显示它们的运行结果。

除此之外,我们还可以使用图形界面来运行 Cypress。我们可以在 package.json 文件中添加以下命令:

在项目根目录下运行以下命令即可开启 Cypress 图形界面:

Cypress 的高级用法

Cypress 同时支持 UI 和 API 测试。Cypress 的 API 定义了一些可以捕获和模拟浏览器行为的命令,每个命令都作为 Cypress 对象的一个方法,可以与其他 Cypress 命令组合使用。

下面是 Cypress 的一些高级用法:

观察响应状态代码

你可以通过 Cypress 从网络响应获取状态码,以检查异步请求的返回结果。例如,如果你已经向服务器发出 AJAX 请求,你需要检查请求是否正常运行,并收到了正确的 HTTP 响应。

-- -------------------- ---- -------
----------------- ---- ------- -------- -- -
  ------ ---- ---- ---- -------- -- -
    ------------
      ------- -------
      ---- ----------------------------------
      ----- -
        -------- -----------
        ---------- ----
      -
    ------------------ -- -
      ----------------------------------
    --
  --
--
展开代码

其中,request() 函数可以向网站地址发送 HTTP 请求并接收响应。上述代码中向服务器发送了一个 POST 请求,请求网站的一个 REST API, body 的内容是一个新笔记的基本信息。

由于请求是异步的,因此我们需要在请求完成之后使用 .then() 方法来获取响应结果并断言状态码是否为 201。

监听网络请求

Cypress 还提供了一个 intercept() 方法,可以让你在代码中拦截并处理每个发出的请求,以确保请求正确。例如:

-- -------------------- ---- -------
----------------- ---- ------- -------- -- -
  ------ ---- ---- -------- -- -
    -------------------- ---------------------------
    ---------------------------------
    ---------------------------
    -----------------------------------------
    ----------------------------------
    -------------------------
    --------------------------------------- -- -
      --------------------------------------------------------
      ---------------------------------------------------------------
      ---------------------------------------------------
    --
  --
--
展开代码

在上面的测试用例中,通过 intercept() 函数,我们拦截了请求 POST /api/notes。通过 wait() 函数监听请求,以确保他已经成功完成。可以断言请求参数、响应状态码等信息。

定制失败错误

Cypress 会在测试用例失败时输出默认信息给用户,以便他们尽快快速定位问题。但是,这个信息有时候可能不完美,不足以描述真正的问题。

你可以自定义你的日志输出,以便更好的描述失败信息,例如:

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

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

    ---------------------
      ----------------------
      ---------------------
      --------------- -----------
  --
--
展开代码

模拟用户行为

通过 Cypress,你可以速写并且无需毫无障碍地输入内容,例如:

-- -------------------- ---- -------
-------------- -- -- -
  ------------ -- -- -
    ---------------------------------
    ---------------------------------------
    --------------------------------
    -------------
    -----------------------------------------------------------------
  --
--
展开代码

上述用例中,我们通过 get() 命令获取搜索框和按钮,并分别进行了操作。

自动化测试与持续集成

当你的团队或公司在快速开发演进时,我们无法仅仅依靠手动测试来确保你的产品的稳定。这时,你需要使用自动化测试工具来确保产品的每个版本都是稳定可靠的。

当你把自动化测试工具与 CI/CD 构建管道相结合时,你的团队可以轻松地构建,测试,交付和部署 Web 应用。这时,你可以使用 Cypress 进行持续集成测试。

以下是 Cypress 针对 CI/CD 的集成步骤:

  1. 建立 CI/CD 流程
  2. 在 CI/CD 流程中添加 Cypress 的脚本命令
  3. 集成和执行 Cypress 测试

以下为一个使用 Travis 作为 CI/CD 的例子:

-- -------------------- ---- -------
--------- -------
--------
  - ---------
------
  ------------
    - --------------
---------
  - -------
--------------
  - --- -------
  - --- --- -----
-------
  - --- --- -------
--------------
  - --- --- --------
----
  -------
    - -----------
展开代码

结语

Cypress 是一个强大的自动化测试工具,可以在开发过程中减少反复测试时浪费的时间和精力。在本文中,我们学习了 Cypress 的基础知识,并提供了几个高级用法,使你能够更好地使用 Cypress 进行测试。我们也讲解了如何将 Cypress 集成到持续集成流程中,以确保产品的质量稳定性。在实战中使用 Cypress,可以大大提高测试效率并节约时间。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bf4b3c0c976d473a3d58a1

纠错
反馈

纠错反馈