gpt4 book ai didi

java - 从 HTTPSampler 获取 HTTPClient 以在 Beanshell 中使用它

转载 作者:行者123 更新时间:2023-12-01 09:15:56 24 4
gpt4 key购买 nike

我有一个混合使用普通 HTTP 采样器和 JSR223 采样器的测试计划。我使用 JSR223 通过 protobuf 协议(protocol)和 HTTP 采样器执行简单 GET/POST 请求的请求。

在通过 SSL 协议(protocol)进行测试期间,我们发现由于 JSR223 采样器提供了大量的 SSL 握手,Nginx 上出现了巨大的负载。问题是我在每个请求中创建了一个新的 HTTPClient:

CloseableHttpClient client = HttpClients.createDefault();

我通过在初始阶段仅创建该客户端的一个实例并在每个 JSR223 采样器中重用它来修复了该问题:

CloseableHttpClient client = vars.getObject("client");

现在我们遇到的情况是每个线程都使用两个 HTTPClient(一个由 HTTPSampler 使用,一个由 JSR223 使用)。问题是有什么方法可以从 HTTPSampler 获取 HTTPClient 以便在 JSR223 中进一步使用它以避免双重握手等问题。

看起来 HTTPSamplers 在测试期间正在彼此之间传输 savingClient。

最佳答案

不幸的是,没有“好的”方法可以做到这一点,所以你的方法似乎是正确的。

理论上,您可以使用 Java Reflection API 来访问同一个 HTTPClient 实例。 ,但请记住,每当您在某个地方使用反射来解决 JMeter 限制时,就会有一只小猫死掉。

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.util.EntityUtils;
import org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl;

import org.apache.jmeter.samplers.SampleResult;

import java.lang.reflect.Field;
import java.lang.reflect.Method;


Field samplerImpl = sampler.getClass().getDeclaredField("impl");
samplerImpl.setAccessible(true);
HTTPHC4Impl impl = ((HTTPHC4Impl) samplerImpl.get(sampler));
Method method = HTTPHC4Impl.class.getDeclaredMethod("setupClient", URL.class, SampleResult.class);
method.setAccessible(true);
URL url = new URL("http://example.com");
HttpClient client = (HttpClient) method.invoke(impl, url, new SampleResult());
HttpGet get = new HttpGet();
get.setURI(url.toURI());
HttpResponse response = client.execute(get);
HttpEntity entity = response.getEntity();
log.info("******************* Response *************************");
log.info(EntityUtils.toString(entity));

演示:

JMeter get HTTPCLient

如果您通过脚本执行高负载,我建议切换到 Groovy 语言,请查看 Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!一些调查和基准。

关于java - 从 HTTPSampler 获取 HTTPClient 以在 Beanshell 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40547225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com