jmeter中HTTPclient 3.1和HTTP client 4的响应时间差异

Posted

技术标签:

【中文标题】jmeter中HTTPclient 3.1和HTTP client 4的响应时间差异【英文标题】:Difference in response time between HTTPclient 3.1 and HTTP client 4 in jmeter 【发布时间】:2014-02-08 10:00:50 【问题描述】:

我正在使用 HTTPS 测试我的网站。当我使用默认实现时,响应时间会更高。如果我将实现用作 HTTPclient 3.1,则响应时间会减少。为什么 HTTPclient 4 和 HTTPclient 3.1 的响应时间不同?要使用 https 测试我的网站,我需要使用 HTTPclient 4 还是 HTTPclient 3.1 ?哪个将为我提供与浏览器一样的确切响应时间?

以下是我的示例测试计划,

【问题讨论】:

【参考方案1】:

根据HTTP Request documentation

HTTP 请求 - 这有一个实现下拉框,用于选择要使用的 HTTP 协议实现: Java - 使用 JVM 提供的 HTTP 实现。与 HttpClient 实现相比,这有一些限制 - 见下文。 HTTPClient3.1 - 使用 Apache Commons HttpClient 3.1。这不再被开发,并且在未来的 JMeter 版本中可能会放弃对此的支持。 HTTPClient4 - 使用 Apache HttpComponents HttpClient 4.x。 空白值 - 不设置 HTTP 采样器的实现,因此依赖于 HTTP 请求默认值(如果存在)或 jmeter.properties 中定义的 jmeter.httpsampler 属性 Java HTTP 实现有一些限制: 无法控制如何重新使用连接。当 JMeter 释放连接时,它可能会或可能不会被同一线程重用。 API 最适合单线程使用 - 各种设置通过系统属性定义,因此适用于所有连接。 通过代理处理 HTTPS 时存在错误(未正确处理 CONNECT)。请参阅 Java 错误 6226610 和 6208335。 它不支持虚拟主机。

最好使用HTTPClient4 实现

但是,如果您希望您的请求尽可能像真正的浏览器,您需要考虑使用以下组件:

在HTTP Request Defaults 中告诉 JMeter 检索所有嵌入式资源并使用包含 2-5 个请求的线程池(就像真正的浏览器一样) 使用HTTP Cookie Manager - 模拟浏览器cookie并处理基于cookie的身份验证 使用HTTP Header Manager - 设置用户代理字符串、内容类型、接受语言等标头。 使用HTTP Cache Manager - 模拟浏览器缓存

【讨论】:

嗨 dmitri.. 我已经在使用您提到的所有元素来充当浏览器。我的用例是在 http 和 https 之间比较我的网站。但我真正担心的是,当我使用 HTTPclient 3.1 时,响应时间更接近 http 的响应时间。当我使用 HTTPclient 4 时,响应时间是 http 响应的五倍。正如您所提到的,将来不会支持 HTTPclient 3.1。为什么 HTTPclient 3.1 和 HTTPclient 4 的响应时间差别很大? 您似乎遇到了跟踪为issues.apache.org/jira/browse/HTTPCLIENT-925 的问题。我已经针对启用 SSL 的 Apache 服务器在本地测试了 HttpClient 3 和 4 实现,并且响应时间几乎相同。我建议从真正的浏览器测量时间并选择最接近的实现。我个人会选择 HttpClient 4,但你可以使用 HTTPClient 3.1 - 没有人会从下载区域删除以前的 JMeter 版本,并且最新的 JMeter 2.11 中仍然存在 HTTPClient 3.1 感谢 dmitri 的宝贵解释。【参考方案2】:

我在 HTTPS 中针对本地站点所做的基准测试根本无法证实这里所说的内容。

HttpClient 4 现在甚至比 HttpClient 3.1 更快,特别是自 2.10 以来,它修复了该领域的一个问题:

https://issues.apache.org/bugzilla/show_bug.cgi?id=55023

在 2.11 中实现了更多性能改进:

https://issues.apache.org/bugzilla/show_bug.cgi?id=55857

https://issues.apache.org/bugzilla/show_bug.cgi?id=55865

您还可以看到,Dmitri 提到的问题已关闭为“不是问题”,因为报告的问题是错误的。

如果您确认自己不属于 JIRA 中描述的情况,那么描述您如何领导测试可能会有所帮助。

【讨论】:

嗨 ubik,我在 2.9 中遇到了问题,所以我尝试使用 2.11。我仍然面临同样的问题。我的测试计划包含很少的请求(HTTPS),并且我包括了 cookie 管理器,并发池大小为 4。使用 HTTPclient 4 我得到的响应时间远高于 httpclient3.1。我力图更改 jmeter.property 或 system.property 中的任何 SSL 配置。我的服务器也有更高的规格。您能建议我获得准确响应时间的解决方案吗?我需要更改属性文件中的任何 ssl 配置吗? 在我的问题中添加了测试计划 嗨 ubik,有 cmets 吗?我还包括了样本测试计划。 你没有设置你访问的网站 abc.com 只是假的吧?是内部的还是外部的? 内部网站

以上是关于jmeter中HTTPclient 3.1和HTTP client 4的响应时间差异的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter 复用长连接 解决端口占用的问题

httpClient-3.1学习笔记

Net Core 3.1 IHttpClientFactory/HttpClient 第一次请求慢

.NET 3.1 中来自 HTTPClient 的 SendAsync 中的对象循环 Json

android 中HttpClient和URLConnection的区别

httpclient 3.1跳过https请求SSL的验证