使用 Cypress 测试 RESTful API 的技巧和经验

阅读时长 10 分钟读完

随着现代应用程序的开发越来越依赖于 RESTful API,我们需要一种可靠的方式来测试这些API,并且需要能够集成到我们的CI/CD流程中。 Cypress是一个开源的JavaScript端到端测试框架,它的主要优势是简单易用、可靠的测试脚本以及直观的测试结果。因此,Cypress是一个非常适合测试RESTful API的工具。在这篇文章中,我们将探讨如何使用Cypress测试RESTful API以及一些实用的技巧和经验。

准备

在开始之前,我们需要新建一个基本的 Cypress 项目。首先,我们需要做一些必要的安装和配置:

安装 Cypress

在你的项目根目录中,运行以下命令安装 Cypress:

我们也可以使用Yarn来安装:

设置配置文件

在根目录中新建一个 cypress.json 文件,用来设置相关配置。

下面是一个 cypress.json 配置文件的示例:

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

这里我们设置了 Cypress 的一些参数,这些参数都非常重要。

  • baseUrl:这是你要测试的API的根url。
  • videosFolder: 设置存放视频文件的目录路径。
  • screenshotsFolder: 设置存放截图的目录路径。
  • videoRecording: 如果设置为 true,则 Cypress 将录制所有测试用例的视频。
  • defaultCommandTimeout: 设置命令超时时间,以毫秒为单位,如果一个命令超过该时间,则将被视为超时,从而提前停止执行。
  • viewportHeightviewportWidth: 设置浏览器的宽度和高度。

请注意,这些配置选项只是 Cypress 中的一些基础配置。如果需要,可以添加其他配置项。

创建测试文件

在Cypress的测试目录cypress/integration中,我们需要创建一个新的测试文件 api.spec.js。 这将是我们编写测试用例的主要文件。

使用 eslint 和 prettier 等工具来格式化代码,这样代码会更易读和易于维护。

编写测试用例

我们来看一个简单的 API 测试用例:

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

在这个测试用例中,我们使用 cy.request 方法发送 GET /users 请求,然后使用 expect 断言来验证请求的响应是否如预期。

这里是一个完整的测试用例,也就是我们在对 API 进行测试时,通常会编写的代码:

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

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

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

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

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

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

在这个案例中,我们完成了四个测试用例来测试 /users 的 API:

  • 获取所有用户
  • 创建新用户
  • 获取新创建的用户
  • 更新用户信息
  • 删除新创建的用户

每个测试用例中,我们都使用 cy.request 方法来执行 HTTP请求。我们还使用了 expect 断言方法,对响应进行了校验。

Cypress API

使用 Cypress 进行 API 测试的最大优点之一就是它提供了灵活的API来模拟各种HTTP请求。

  • cy.request():发送 HTTP请求并获取响应对象。
  • cy.route():模拟服务器响应、捕捉请求并在测试中断言。
  • cy.intercept():拦截请求或响应,并修改或结果。
  • cy.stub():创建一个 PostgREST路由的代码存根。

在我们的测试用例中,我们使用 cy.request 方法来发送HTTP请求。下面,我们会介绍一些其他的方法。

模拟HTTP请求

在一些情况下,我们需要手动模拟HTTP请求,并自己处理响应。Cyress提供了自己的HTTP库,使我们能够简单、直观的做到这一点。

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

在这个测试用例中,我们用 cy.server() 启用了虚拟服务器,然后使用 cy.route 方法给一个GET /users/* 请求匹配响应。

拦截HTTP请求

我们可以使用 cy.intercept() 方法来拦截HTTP请求,并修改或结果。这样我们就可以模拟真实的网络环境,从而更加真实的测试我们的API。

下面是一个拦截HTTP请求的例子:

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

在这个案例中,我们使用 cy.intercept() 拦截了 PATCH /users/1 请求,并将请求中的 name 参数修改为 newName。然后我们发送该请求,并断言修改结果是否正确。

定制请求头部

有时我们需要在API请求中添加一个或多个自定义标头。Cypress提供了一个选项来处理请求头部。

下面是如何使用定制请求头的例子:

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

在这个案例中,我们使用了 headers 选项来定制请求头。我们将使用两个自定义标头 Authorization 和 Custom-Header。

使用别名

在我们的测试用例中,我们可以使用 as() 方法为任何命令设置别名,也可以通过 cy.wait() 方法等待该命令获得结果。

比如说,我们可以使用 as() 为一个请求命名:

小结

在这篇文章中,我们学习了如何使用Cypress测试RESTful API以及一些实用的技巧和经验。 Cypress是一个非常易于使用的框架,可以让我们轻松地测试API,并集成到我们的CI/CD流程中。 使用 Cypress 需要遵循一些基本规则,例如设置正确的配置文件、使用正确的API方法以及编写清晰的测试代码。希望这篇文章能帮助前端开发人员更好的理解并学习这方面的知识。

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

纠错
反馈

纠错反馈