2016-11-11 8 views
0

通常のHTTPサンプラーとJSR223サンプラーを組み合わせたテスト計画があります。 JSR223私は簡単なGET/POST要求のためにprotobufプロトコルとHTTPサンプラーを介して要求を実行するために使用します。HTTPSamplerからHTTPClientを取得してBeanshellで使用する

SSLプロトコルによるテストでは、JSR223サンプラーが提供するSSLハンドシェイクのためにNginxに大きな負荷がかかっています。

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

CloseableHttpClient client = HttpClients.createDefault(); 

は、私はすべてのJSR223サンプラーにおける初期段階とそれの再使用にこのクライアントの作成だけつのインスタンスとそれを固定:問題は、私はすべての要求に新規にHTTPClientを作成したということでしたですから、すべてのスレッドが2つのHTTPClientを使用している状況があります(1つはHTTPSamplerで、もう1つはJSR223で使用しています)。そして、HTTPSamplerからHTTPClientをJSR223でさらに使用して、ハンドシェイクなどを回避する方法はありますか?

HTTPSamplerのように見えますが、テスト中にsavedClientを相互に転送しています。

答えて

1

残念ながら、これを行う「良い」方法はありませんので、あなたは正しいと思われます。

理論的には、Java Reflection APIを使用して同じHTTPClientインスタンスへのアクセスを取得できますが、Reflectionを使用して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!をチェックアウトします。

関連する問題