菜单
开源

使用 HAR 转换器

har-to-k6 转换器是一个 NodeJS 工具,可以根据 HAR 文件中包含的 HTTP 请求生成 k6 脚本。它是 浏览器录制器的替代方案。

注意

HAR 是一种文件格式,被所有主流浏览器和各种其他工具用于导出记录的 HTTP 请求。

开始之前

开始之前,请考虑以下几点:

您需要选择一个工具来录制 HAR 文件。多种浏览器和工具可以将 HTTP 流量导出为 HAR 格式。以下是一些常用的工具:

1. 录制 HAR 文件

以下是在 Chrome 中进行录制的基本步骤:

  1. 在 Chrome 中打开一个新的隐身窗口。(这是可选步骤,但这样做可以避免发送浏览器可能已保存的 Cookie 等信息)。
  2. 打开 Chrome 开发者工具(按 F12)。
  3. 选择“网络”(Network)选项卡。
  4. 检查录制按钮(圆形按钮)是否已激活(红色)。
  5. 如果您想录制连续多次页面加载,请勾选“保留日志”(Preserve log)复选框。
  6. 输入您网站的 URL,然后开始执行您希望模拟的负载测试用户执行的操作。
  7. 完成后,在 Chrome 开发者工具中,右键单击 URL,选择“保存为 HAR,包含内容”(Save as HAR with content)。

Save HAR for load testing

2. 使用 har-to-k6 进行转换

har-to-k6 转换器是一个 NodeJS 工具,可以将 HAR 文件(浏览器会话)转换为 k6 脚本。

  1. 确保您已安装 NodeJS(版本 >=11.0.0)。

  2. 安装转换器。您可以使用 npm

    bash
    npm install -g har-to-k6

    有关其他安装选项,请查看 har-to-k6 安装说明

  3. 使用 convert 命令从 HAR 文件生成 k6 脚本

    bash
    har-to-k6 myfile.har -o loadtest.js

    此命令会自动为您生成 k6 脚本。它会读取 HAR 文件(myfile.har)并将其转换为 k6 测试脚本(loadtest.js)。

3. 修改自动生成的 k6 脚本

在上一步中,转换器创建了一个用于测试的 k6 脚本。现在,您应该评估是否需要修改 k6 脚本的任何部分。

根据您的用例,您可能需要:

  • 配置负载选项
  • 删除第三方内容
  • 关联动态数据

配置负载选项

现在,k6 已经自动生成了一个“功能”测试。默认情况下,此测试使用一个虚拟用户并运行一次迭代。

现在是时候配置您的性能测试的负载选项了。k6 允许您通过几种方式进行配置:

  • 在运行测试时作为 CLI 参数

    bash
    k6 run --vus 10 --duration 30s loadtest.js
  • 作为脚本文件中的选项。

    JavaScript
    export const options = {
      vus: 10,
      duration: '30s',
    };

要了解有关如何配置负载选项的更多信息,请阅读添加更多 VU 指南选项指南

删除第三方内容

如果您正在录制网站的用户会话,默认情况下,您将录制网站使用的所有 HTTP 请求。这包括来自您的网站使用的第三方工具的请求,例如分析工具、Facebook、Twitter、支持小部件、CDN 等。

您应该删除这些第三方请求:

  • 它们会扭曲您的性能结果的百分位。
  • 您可能无法影响第三方服务的性能。
  • 负载测试可能违反您与提供商的服务条款合同。

您的 k6 脚本可以通过几种方式跳过第三方请求:

  • 编辑自动生成的 k6 脚本,逐个删除请求
  • 下载仅包含选定域请求的 HAR 文件。

在 Chrome 中,您可以使用开发者工具的“网络”筛选器仅选择特定域。筛选器输入框接受正则表达式来匹配多个域。

bash
/loadimpact.com|cloudfront.net/

Save HAR filter domain using regex

筛选出选定的域后,您可以按照本教程第一步所述下载 HAR 文件。HAR 文件将仅包含对选定域的请求。

如果您不知道所有要筛选的域,使用网络筛选器的查询语言会很有帮助。只需在筛选器中输入 domain: 即可查看网络面板记录的所有不同域。

Save HAR filter domain list

关联动态数据

在负载测试中,关联是指从一个请求的响应中提取值并在后续请求中重复使用。通常,关联是为了获取用户旅程中一系列步骤所需的令牌或 ID。

录制的 HAR 文件可能包含您网站上使用的动态数据 - IDCSRF 令牌VIEWSTATEwpnonce 以及其他动态值 - 这些数据将被转换到 k6 脚本中。

为了正确运行负载测试,您可能需要用 k6 从之前请求中获取的动态数据替换一些录制的数据。例如,令牌很快就会过期,它们是用户从录制会话中关联的最常见内容之一。

此处有一些使用 k6 API 关联动态数据的示例。

4. 运行测试

现在,您可以使用 k6 运行负载测试了。如果您尚未安装 k6,请按照k6 安装说明进行操作。

执行 k6 run 命令来运行您的 k6 脚本

bash
k6 run loadtest.js

要了解有关运行 k6 的信息,请查看运行 k6 教程