npm 包 @pollyjs/adapter-puppeteer 使用教程

阅读时长 9 分钟读完

简介

@pollyjs/adapter-puppeteer 是一个 npm 包,用于在 Puppeteer 环境中记录并重放 http 请求和响应。其中,@pollyjs 是一个用于 web 提供端到端测试的免费、开源工具,它支持多种语言和框架。

本文主要介绍如何使用 @pollyjs/adapter-puppeteer 在 Puppeteer 环境中进行端到端测试。

安装

在项目目录下,通过 npm 安装 @pollyjs/adapter-puppeteer 包:

使用场景

假设我们有一个 Web 应用,它需要使用一些后端 API 接口来进行数据交互。我们希望在测试环境中自动化地测试这个应用,包括它的前端和后端。

但在测试中,我们可能需要多次发送同一个请求,以及在不同的环境下执行测试。如果这些请求都发送到了生产环境,那么就会产生一些不必要的测试数据、资源浪费和统计数据扭曲等问题。

为了解决这些问题,我们可以使用 @pollyjs/adapter-puppeteer 在 Puppeteer 环境中记录并重放 http 请求和响应。这样,我们就可以在测试过程中使用一些虚拟数据,而不是对同一个请求不断地发送到生产环境中。

基本使用

首先,需要安装 puppeteer 包以进行 Puppeteer 环境的模拟:

接着,我们需要引入 @pollyjs/adapter-puppeteer 包。在测试文件的开头添加以下代码:

然后在测试函数中,创建并启用一个 Polly 对象:

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

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

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

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

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

Polly 构造函数中,我们为 Polly 实例设置一个名称 "TestSuite"。包含 adapters 属性的配置对象表示 Polly 将记录哪些请求和响应,针对 Puppeteer 环境,我们要使用 PuppeteerAdapter

adapterOptions 配置项告诉 Polly 如何与 Puppeteer 环境进行交互,其中 puppeteer 属性是一个已启动的 Puppeteer 浏览器实例,在测试之前需初始化。

connect 方法将 Polly 连接到 Puppeteer 浏览器实例,disconnect 方法则将其断开连接。

在测试函数中,我们可以使用 polly 对象来记录并重放网络请求。例如:

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

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

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

在这个示例中,我们首先使用 polly 对象记录了一个 POST 请求到 https://api.example.com/login 路径,而后,我们填写表单并签入,使得发出对该请求的POST请求,保证了该部分相关业务逻辑和正式环境下一致,从而完成了对登录操作的端到端测试。

包含选择器的请求拦截

你还可以使用 PuppeteerAdapter 提供的带选择器的 intercept 方法,该方法接收一个选择器和一个回调函数,当选择器匹配到的元素被点击时,就会执行回调函数。

例如,我们可以在测试页面上记录相关表格的下拉选择数据(mock),实现代码如下:

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

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

在这个示例中,我们在 https://api.example.com/table-data 的 GET 请求中,通过 intercept 方法提供了一个选择器: .dropdown select,来查找 HTML 页面中的 dropdown 组件。在该请求匹配的选择器处,我们将响应体设置为一个 JSON 对象,包含了需要的数据。

Mock 响应

Polly 还提供了灵活的 API,让你可以对请求响应进行灵活配置。

例如,以下代码将对 https://api.example.com/user 地址下的 GET 请求进行记录,并返回一个状况编码为 200 的 JSON 响应和一个数据体:

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

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

在这个示例中,我们使用 .intercept 方法配置了一个捕获该请求的响应,其中我们以JSON格式将响应的userName返回。

Proxy

如果你想让 Puppeteer 浏览器与一个使用代理连接的代理服务器交互,你可以使用 adapterOptions 中的 proxy 选项进行配置。

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

-----

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

在这个示例中,我们在 Puppeteer 配置文件中查找 HTTP_PROXY 环境变量,它的内容为代理服务器的 URL。如果找到了该环境变量,则初始化浏览器实例时,将代理服务器的 URL 添加到 args 中。

在 Polly 的 adapterOptions 中,我们只需要将同样的代理服务器 URL 设置到 proxy 中即可。

结束语

通过使用 @pollyjs/adapter-puppeteer,我们可以轻松地模拟网络请求和响应,使测试更加稳定和可重复,同时还可以节省测试成本。由于其易于使用和高度灵活的 API,它成为了前端开发和测试过程中的必备工具,你可以在你的测试代码中添加它,以方便地测试所有网络相关操作。

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