我知道在JMeterHTTP Request
中使用内置Java HTTP客户端时,可能会也可能不会合并取决于JVM的实现和配置。JMeter是否池HTTP连接?
但是,使用HttpClient3.1或HttpClient4时JMeter池连接?
JMeter文档中有一些提示可能存在,但文档中没有明确说明它。
如果有,有没有办法控制连接池?例如,你可以设置池的大小吗?
我知道在JMeterHTTP Request
中使用内置Java HTTP客户端时,可能会也可能不会合并取决于JVM的实现和配置。JMeter是否池HTTP连接?
但是,使用HttpClient3.1或HttpClient4时JMeter池连接?
JMeter文档中有一些提示可能存在,但文档中没有明确说明它。
如果有,有没有办法控制连接池?例如,你可以设置池的大小吗?
当使用HttpClient3.1或HttpClient4时,JMeter执行一些HTTP连接池。
在这两种情况下,每个线程都会汇集连接。连接不会跨线程共享。
当使用HttpClient3.1时,JMeter在每个线程上使用SimpleHttpConnectionManager的实例。
当使用HttpClient4时,JMeter在每个线程上使用PoolingClientConnectionManager子类的一个实例,它使用PoolingClientConnectonManager的默认设置(每个路由2个连接,最多20个连接)。
JMeter没有提供控制连接池参数的机制。我不得不去JMeter的源代码找到这个答案。请参阅参考以下链接(2.13标记的代码):
注:这个答案是正确的JMeter的2.13。 JMeter的其他版本的答案可能会有所不同。
JMeter的3更新:在你的HTTPSampler配置,你可以使用条目
<boolProp name="HTTPSampler.concurrentDwn">true</boolProp>
<stringProp name="HTTPSampler.concurrentPool">10</stringProp>
根据这个代码片段(从http://svn.apache.org/viewvc/jmeter/tags/v3_0/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java?view=markup线785ff)指定连接池的大小
if(this.testElement.isConcurrentDwn()) {
try {
int maxConcurrentDownloads = Integer.parseInt(this.testElement.getConcurrentPool());
connManager.setDefaultMaxPerRoute(Math.max(maxConcurrentDownloads, connManager.getDefaultMaxPerRoute()));
} catch (NumberFormatException nfe) {
// no need to log -> will be done by the sampler
}
}
}
通过JMeter UI进行配置有点古怪:
将HTTP采样器配置视图切换到“高级”,勾选“Ret分享所有嵌入式资源“,然后”并行下载“并输入一个数字。如果你不想让JMeter解析图像的响应,你可以选择“取回所有嵌入的资源”
是的,必须使用httpclient实现!非常感谢! – hao