HTTP 代理服务器 JMeter:录制示例脚本

⚡ 智能摘要

JMeter HTTP代理服务器会将浏览器活动记录到一个可重用的测试脚本中。该记录器位于浏览器和网站之间,将每个请求捕获到记录控制器中,然后由多个虚拟用户重放保存的计划。

  • 🎬 核心宗旨: 代理服务器会在普通浏览器浏览被测应用程序时监视并记录用户活动。
  • 🧱 计划框架: 线程组、HTTP 请求默认值和录制控制器在录制开始之前创建。
  • 🎯 Target 控制器: 此设置决定捕获的采样器在测试计划树中的写入位置。
  • 🌐 浏览器设置: 浏览器必须将其HTTP代理指向 JMeter 端口,默认为 8888。
  • 🔐 HTTPS 录制: 导入 ApacheJMeter将 TemporaryRootCA.crt 设置为受信任的证书颁发机构,然后将其删除。
  • 🧹 清理脚本: 广告和分析请求也会被记录,应该排除或删除。
  • 🔗 先进行相关性分析再进行尺度变换: 用 ex 替换已记录的会话令牌tracted 变量,或者重放失败。
  • ⚠️ 版本说明: WorkBench 已被移除 JMeter 5.0;该元素现在是 HTTP(S) 测试脚本录制器。

JMeter HTTP代理服务器记录脚本

什么是 JMeter HTTP代理服务器?

此 JMeter HTTP代理服务器是一个内置的记录器,它位于浏览器和被测网站之间。它会在用户正常浏览应用程序时监视并记录用户活动,并将捕获到的每个请求转换为测试计划中的HTTP请求采样器。 JMeter 3.0 该元素已被命名为 HTTP(S) 测试脚本录制器这两个名称描述的是同一个组件。

Record 测试 它帮助测试人员记录和回放针对测试目标的活动。这是一种自动化测试,但可以同时针对多个用户进行测试。

为什么选择录制而不是手动编写脚本?

现代网站上真实的用户访问路径会产生数十个请求,每个请求都有自己的请求头、Cookie 和表单参数。ping 手动将所有这些数据输入采样器既慢又容易出错。录制可以精确捕捉浏览器发送的流量,这带来了三个优点:

  • 精度: 标头顺序、cookie 和隐藏表单字段将按服务器接收到的原样捕获。
  • 速度: 一段十页的旅程记录只需几分钟就能用文字记录下来,而手动撰写则需要几个小时。
  • 覆盖范围: 界面中不可见的后台 AJAX 调用仍然会出现在录制过程中。

这段录音只是一个起点,而非最终的测试结果。它还需要进行清理、关联和参数化处理才能用于后续测试。 负载测试以下各节涵盖了从一个空开始的完整路径。 JMeter 一个可以可靠重放的脚本窗口。

这里是 路线图 这个实例

HTTP 代理服务器 JMeter

如何录制脚本 JMeter 5.x

当前版本是 Apache JMeter 5.6.3 版本于 2024 年 1 月 9 日发布,它要求 Java 8 或更高版本, Java 建议使用 17 版本。如果您按照本页下方的图文教程操作,将不会找到 WorkBench 节点,因为它已在 5.0 版本中移除。该功能并未消失,只是位置发生了变化。现在,录制器直接添加到测试计划中,并称为 HTTP(S) 测试脚本录制器。

最快的方法是使用捆绑模板。选择 文件 > 模板 > 录音 和 JMeter 生成一个完整的计划,其中包含线程组、HTTP 请求默认值、录制控制器和录制器本身,所有这些组件都已连接在一起。手动构建相同的结构需要以下步骤。

  1. 构建计划框架。 添加一个线程组,然后在该线程组下添加一个录制控制器。录制的采样器将放置在这里。
  2. 将录音机添加到测试计划中。 右键单击“测试计划”节点并选择 添加 > 非测试元素 > HTTP(S) 测试脚本录制器它是 Thread Group 的兄弟群组,而不是子群组。
  3. 设置端口。 默认端口为 8888。任何空闲端口均可使用,前提是浏览器配置与之匹配。
  4. 选择 Target 控制器。 选择第一步中创建的录制控制器,这样请求就会按照预期分组,而不是分散在计划根目录。
  5. 添加 URL 排除模式。 在“请求筛选”选项卡上,排除具有如下模式的静态资源: .*\.(bmp|css|js|gif|ico|jpe?g|png|svg|woff2?)这样就省去了后面将要描述的大部分手动清理工作。
  6. 启动录音机。 点击 开始 在录像机面板的顶部。 JMeter Apache 写道JMeter此时,TemporaryRootCA.crt 已放入其 bin 文件夹中,这使得 HTTPS 录制成为可能。
  7. 将浏览器指向代理服务器。 使用 localhost 和选定的端口,然后正常浏览应用程序。
  8. 停下来整理一下。 按下停止键,删除所有剩余的第三方通话记录,并保存套餐。
  9. 规模化之前先进行验证。 右键单击线程组并选择 验证这会使用单线程运行一次计划,因此故障会在施加任何负载之前显现出来。

另一个习惯区分了可运行的脚本和可靠的脚本。仅使用图形界面进行构建和调试,然后从命令行运行真正的测试。 jmeter -n -t plan.jmx -l results.jtl -e -o report它还会生成一个 HTML 仪表板。同样的命令也是以下功能的基础: 分布式测试 跨越多个负载发电机。安装说明包含在内。 JMeter 安装指南完整的流程记录在案。 Apache JMeter 录音机页面.

⚠️ 版本说明: 以下演示中的屏幕截图是在一台较旧的设备上截取的。 JMeter 该版本仍然保留了 WorkBench 节点。WorkBench 已在后续版本中移除。 JMeter 5.0. 所有概念仍然适用;只是记录器的位置发生了变化,目前的程序就是上面给出的程序。

步骤 1)设置 HTTP 代理服务器

这是设置代理的分步指南

  1. 开始 JMeter
  2. 选择 测试计划 在树上
  3. 添加 线程组右键单击 测试计划 并添加一个新的线程组: 添加 > 主题(用户) > 线程组

设置 HTTP 代理服务器

  1. 添加 HTTP请求选择线程组;右键单击 添加 > 配置元素 > HTTP 请求默认值

设置 HTTP 代理服务器

在新的 HTTP 请求默认值元素中:在服务器名称或 IP 中输入“google.com”。其他字段应保持空白

设置 HTTP 代理服务器

  1. 添加 录音控制器右键单击“线程组”,然后添加录制控制器: 添加 > 逻辑控制器 > 录音控制器

设置 HTTP 代理服务器

  1. 添加 代理服务器 在 Workbench 中,右键单击 Workbench 并添加 HTTP 代理: 添加 > 非测试元素 > HTTP 代理服务器。 上 JMeter 5.x,右键单击 测试计划 改为节点并选择 HTTP(S) 测试脚本录制器.

设置 HTTP 代理服务器

  1. Target 控制器 录制的脚本将被添加到哪里

设置 HTTP 代理服务器

  1. 开始 代理服务器。返回 HTTP 代理服务器,然后单击 开始 按钮。现在您的 JMeter 代理服务器启动

设置 HTTP 代理服务器

  1. 启动浏览器(我使用 Firefox),选择 工具 > 附加选项 > 先进的 > 网络 > 设置 > 输入如下图所示的 HTTP 代理。在当前状态下。 Firefox 通过发布相同的对话即可达成一致 个人设置 > General (将军) > 网络设置.

设置 HTTP 代理服务器

第 2 步)记录你的活动

  1. 立即推出 http://www.google.com 在您的网络浏览器中(JMeter 还开着)
  2. 活动是否搜索关键字“guru99“。
  3. 返回 JMeter在 HTTP 代理服务器中,单击 Stop 停止 等结束了

记录活动

  1. 录制完成后你会看到 JMeter 自动创建一个新的HTTP请求如下图

记录活动

JMeter 已经记录了用户请求 主页 of Google 网站。 http://www.google.com/

上图显示了其他 HTTP 请求,您应该删除它们。因为有时 JMeter 当您搜索关键词时,它还会记录一些广告链接。 Google我们应该在测试计划中忽略它们。

  1. 点击“文件”>“将测试计划另存为”。

记录活动

  1. 弹出对话框 > 在“文件名”字段中输入测试计划的名称 > 单击“保存”。现在,您的测试计划已保存为 RecordingTestPlan.jmx。

记录活动

步骤 3)运行测试计划

  1. 选择 线程组 > 添加 > 监听器 > 摘要报告

运行测试计划

  1. 摘要报告将显示一些基本统计信息

运行测试计划

  1. 选择Thread Group,输入如下图信息

运行测试计划

您可以参考这篇文章。 JMeter 性能测试 了解线程组配置的详细信息。

  1. 开始测试前,请选择“摘要报告”。准备运行测试时,请选择“运行”>“开始”(Ctrl+R)。 JMeter 将会将您的活动回放 100 次。测试进行期间,统计数据会不断变化,直到测试结束。

运行测试计划

步骤 4)保存测试结果

  1. 点击 保存表数据 将测试结果保存到文件

保存测试结果

  1. 输入测试结果的名称,然后单击保存。测试结果在 JMeter 默认保存为*.csv格式

保存测试结果

下载文件录制测试计划

下载文件 HTTP 代理服务器

记录HTTPS流量和证书

现在几乎所有网站都提供 HTTPS 服务,而最初的教程发布时 HTTPS 尚未普及。代理服务器只有在浏览器信任它的情况下才能读取加密流量,因此需要额外一步操作。

当录音机启动时, JMeter 生成一个名为“临时根证书”的证书 Apache (阿帕奇)JMeter临时根证书.crt 在其 bin 目录中。将该文件导入浏览器作为受信任的证书颁发机构,然后重启浏览器。 JMeter 现在它可以为每个站点提供自己的证书,并解密会话以进行录制。

以下三点值得注意:

  • 该证书有效期为七天。 这是故意的。删除它,然后…… JMeter 与其延长有效期,不如重新生成一个新的。
  • 用完后取下。 在运行中的机器上保留受信任的根证书是一种真正的安全风险,而不是理论上的风险。
  • 有些应用程序会拒绝。 使用证书固定或相互 TLS 的网站根本无法通过代理进行记录,必须使用浏览器开发者工具手动构建脚本。

相关性:使录制的脚本可重放

录制的脚本会精确地重现第一次发生的情况,但这与第二次发生的情况截然不同。录制过程中捕获的会话标识符、令牌和生成的密钥在脚本重放时已失效,运行失败的方式看起来像是应用程序错误。

相关性是解决之道。 后处理器 例如正则表达式 ExtracTor 或 JSON Extractor 从登录响应中获取最新值,将其存储在一个变量中,稍后请求引用该变量而不是记录的字面值。

工作流程很简短:

  1. 使用“查看结果树”监听器重新播放脚本一次,并找到第一个失败的请求。
  2. 将失败的请求与记录进行比较。两次运行中任何不同的值都需要进行关联分析。
  3. 添加一个前任trac找到产生该值的响应,然后将硬编码的字面值替换为变量引用。
  4. 添加一个 断言 因此,即使页面返回 HTTP 200 错误信息,测试仍然失败。

只有在相关性测试之后,脚本才能安全地扩展规模。在一百个用户规模下运行不相关的录制测试,主要是为了评估错误处理能力,而不是其他方面。 性能其他要素将在下文中介绍。 JMeter 教程.

故障排除

如果在运行上述场景时遇到问题,请执行以下操作:

  1. 检查您是否通过代理连接到互联网。如果是,请删除代理。
  2. 打开一个新实例 JMeter.
  3. 打开 RecordingTestPlan.jmx 文件 JMeter.
  4. 右键单击工作台 > 合并 > 选择 HTTP 代理服务器.jmx。 JMeter 5.x 版本,合并到测试计划节点中,因为 WorkBench 已不存在。
  5. 点击主题组 > 汇总报告。
  6. 运行测试。

还有两种症状可以解释剩余的大部分故障。如果浏览器报告无法连接,则表示录制程序从未启动,或者浏览器中设置的端口与录制程序中设置的端口不匹配。 JMeter如果页面加载正常,但树状结构中没有任何显示,则说明流量是 HTTPS,但证书尚未导入。

常见问题

它被移除了 JMeter 5.0. 现在,HTTP(S) 测试脚本记录器等非测试元素直接添加到测试计划节点下。

添加 URL 在录制器的“请求过滤”选项卡中,可以排除某些模式。包含常见静态文件扩展名的模式可以去除大部分噪声,防止其到达脚本。

AI 将录制的采样器分类为业务步骤和第三方噪声,然后建议删除哪些采样器以及需要关联哪些值,从而更快地将原始捕获转换为可用的脚本。

是的。根据响应体和要捕获的值,AI 会生成一个正则表达式或边界对。请在“查看结果树”中验证,因为同一个模式可能在一个响应中匹配,而在另一个响应中不匹配。

浏览器不信任 JMeter 代理。导入 ApacheJMeter来自 TemporaryRootCA.crt JMeter 将 bin 文件夹作为可信机构,重启浏览器,然后再次录制。

是的。将设备的 Wi-Fi 代理设置为录像机的 IP 地址和端口,然后安装。 JMeter 设备上的证书。使用证书绑定的应用程序仍然无法被记录。

不。图形界面仅用于构建和调试。实际测试应在命令行模式下运行,这样占用内存更少,并且会在测试结束后生成 HTML 报告。

测试计划保存为 .jmx 格式,这是一种适用于版本控制的 XML 格式。测试结果保存为 .jtl 格式,默认为 CSV 格式,也可以存储为 XML 格式。

总结一下这篇文章: