【问题标题】:There is Jmeter response time difference between Jmeter run results and manually captured the response timeJmeter运行结果与手动捕获的响应时间存在Jmeter响应时间差异
【发布时间】:2017-04-04 18:40:37
【问题描述】:

Jmeter 运行结果与使用 Web 应用程序上的秒表从本地系统手动捕获的响应时间之间存在 Jmeter 响应时间差异。

  1. 从本地 Windows 系统浏览 Web 应用程序并使用秒表查看加载页面的响应时间。
  2. 在非 gui/gui 模式下运行 Jmeter 并观察响应时间(仅使用侦听器进行调试,运行脚本时未添加侦听器)
  3. 可以看出两者之间存在差异。请建议如何知道 Jmeter 是否捕获了正确的响应时间。

【问题讨论】:

  • 您正在测试什么样的应用程序? JMeter 默认捕获服务器端性能。如果要捕获客户端性能,则需要使用 Selenium Web Driver 创建测试计划。

标签: jmeter


【解决方案1】:

如果您正确配置了 JMeter,您应该会为相同的请求获得相同或相似的响应时间。 “正确”的配置代表:

  1. 您应该 configure JMeter to retrieve embedded resources 并为此使用约 5 个线程的并行线程池

    此选项“告诉”JMeter 获取主 HTML 页面中引用的图像、样式和脚本,并像真正的浏览器一样并行执行

  2. 添加HTTP Cache Manager to your Test Plan。真正的浏览器下载嵌入式资源,但只下载一次,在后续请求中,资源将从磁盘缓存返回,没有实际请求。 HTTP 缓存管理器启用缓存模拟和缓存控制标头处理。
  3. 添加HTTP Cookie Manager 表示cookie/会话并处理基于cookie的身份验证
  4. HTTP Header Manager 添加到您的测试计划中以表示浏览器标头。这可能很重要,即缺少 Accept-Encoding 标头可能会禁用服务器端压缩,因此客户端将接收更多数据并且需要更多时间。
  5. 假设“良好”的 JMeter 配置,您应该会看到或多或少相同的行为

    如果仍然存在差异 - 使用嗅探器工具(如Wireshark)捕获 JMeter 和浏览器发送的请求并修改 JMeter 配置以消除差异

【讨论】:

    【解决方案2】:

    JMeter 具有每个请求捕获的三个基本测量值:

    • 已用时间(从刚开始发送请求到收到最后一个比特的总时间跨度)

    • 延迟(从同一时间点开始,到服务器开始响应时结束)

    • 还有连接时间(包含在延迟中,基本上是与服务器握手的时间,包括 SSL/TLS 协商)

    因此,如果您在侦听器中设置数据写入器(例如 SimpleDataWriter,尽管 AggregateReport 和 SummaryReport 也可以这样做),您将在数据文件中看到这些指标(而标准侦听器/可视化器/聚合器会停留在经过的时间仅)。

    但请注意,这些指标不包括响应呈现,尤其是浏览器执行的任何代码。

    JMeter 根本不这样做:显然,它只测量服务器 + 网络的综合性能,跳过客户端的所有内容(除了基本必需品,如协议协商)。

    这或许可以解释您所经历的差异。

    以及记录的服务器处理时间与 JMeter 测量的响应时间之间的差异:服务器只是不计算网络带来的内容。

    PS 而且您不必坐下来用浏览器点击秒表:现代浏览器有一个开发工具,能够向您显示按阶段划分的精确计时。例如,只需在 Chrome 中调用 Ctrl+Shift+I,切换到网络选项卡并在执行请求时查看时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多