使用 HAR 转换器
har-to-k6 转换器是一个 NodeJS 工具,可以根据 HAR 文件中包含的 HTTP 请求生成 k6 脚本。它是 浏览器录制器的替代方案。
注意
HAR 是一种文件格式,被所有主流浏览器和各种其他工具用于导出记录的 HTTP 请求。
开始之前
开始之前,请考虑以下几点:
您需要选择一个工具来录制 HAR 文件。多种浏览器和工具可以将 HTTP 流量导出为 HAR 格式。以下是一些常用的工具:
- Chrome
- Firefox
- Microsoft Edge
- Charles recording proxy(HTTP 代理/录制器)
- Fiddler(HTTP 代理/录制器)
1. 录制 HAR 文件
以下是在 Chrome 中进行录制的基本步骤:
- 在 Chrome 中打开一个新的隐身窗口。(这是可选步骤,但这样做可以避免发送浏览器可能已保存的 Cookie 等信息)。
- 打开 Chrome 开发者工具(按 F12)。
- 选择“网络”(Network)选项卡。
- 检查录制按钮(圆形按钮)是否已激活(红色)。
- 如果您想录制连续多次页面加载,请勾选“保留日志”(Preserve log)复选框。
- 输入您网站的 URL,然后开始执行您希望模拟的负载测试用户执行的操作。
- 完成后,在 Chrome 开发者工具中,右键单击 URL,选择“保存为 HAR,包含内容”(Save as HAR with content)。
2. 使用 har-to-k6 进行转换
har-to-k6 转换器是一个 NodeJS 工具,可以将 HAR 文件(浏览器会话)转换为 k6 脚本。
确保您已安装 NodeJS(版本 >=11.0.0)。
安装转换器。您可以使用 npm
npm install -g har-to-k6
有关其他安装选项,请查看 har-to-k6 安装说明。
使用 convert 命令从 HAR 文件生成 k6 脚本
har-to-k6 myfile.har -o loadtest.js
此命令会自动为您生成 k6 脚本。它会读取 HAR 文件(myfile.har)并将其转换为 k6 测试脚本(loadtest.js)。
3. 修改自动生成的 k6 脚本
在上一步中,转换器创建了一个用于测试的 k6 脚本。现在,您应该评估是否需要修改 k6 脚本的任何部分。
根据您的用例,您可能需要:
- 配置负载选项
- 删除第三方内容
- 关联动态数据
配置负载选项
现在,k6 已经自动生成了一个“功能”测试。默认情况下,此测试使用一个虚拟用户并运行一次迭代。
现在是时候配置您的性能测试的负载选项了。k6 允许您通过几种方式进行配置:
在运行测试时作为 CLI 参数
k6 run --vus 10 --duration 30s loadtest.js
作为脚本文件中的选项。
export const options = { vus: 10, duration: '30s', };
要了解有关如何配置负载选项的更多信息,请阅读添加更多 VU 指南和选项指南。
删除第三方内容
如果您正在录制网站的用户会话,默认情况下,您将录制网站使用的所有 HTTP 请求。这包括来自您的网站使用的第三方工具的请求,例如分析工具、Facebook、Twitter、支持小部件、CDN 等。
您应该删除这些第三方请求:
- 它们会扭曲您的性能结果的百分位。
- 您可能无法影响第三方服务的性能。
- 负载测试可能违反您与提供商的服务条款合同。
您的 k6 脚本可以通过几种方式跳过第三方请求:
- 编辑自动生成的 k6 脚本,逐个删除请求
- 下载仅包含选定域请求的 HAR 文件。
在 Chrome 中,您可以使用开发者工具的“网络”筛选器仅选择特定域。筛选器输入框接受正则表达式来匹配多个域。
/loadimpact.com|cloudfront.net/
筛选出选定的域后,您可以按照本教程第一步所述下载 HAR 文件。HAR 文件将仅包含对选定域的请求。
如果您不知道所有要筛选的域,使用网络筛选器的查询语言会很有帮助。只需在筛选器中输入 domain: 即可查看网络面板记录的所有不同域。
关联动态数据
在负载测试中,关联是指从一个请求的响应中提取值并在后续请求中重复使用。通常,关联是为了获取用户旅程中一系列步骤所需的令牌或 ID。
录制的 HAR 文件可能包含您网站上使用的动态数据 - ID
、CSRF 令牌
、VIEWSTATE
、wpnonce
以及其他动态值
- 这些数据将被转换到 k6 脚本中。
为了正确运行负载测试,您可能需要用 k6 从之前请求中获取的动态数据替换一些录制的数据。例如,令牌很快就会过期,它们是用户从录制会话中关联的最常见内容之一。
此处有一些使用 k6 API 关联动态数据的示例。
4. 运行测试
现在,您可以使用 k6 运行负载测试了。如果您尚未安装 k6,请按照k6 安装说明进行操作。
执行 k6 run
命令来运行您的 k6 脚本
k6 run loadtest.js
要了解有关运行 k6 的信息,请查看运行 k6 教程。