Jmeter10入門-Javaリクエスト



Getting Started With Jmeter 10 Java Request



一部のリクエストロジックがより複雑な場合、Jmeterに付属するサンプル推定の実装がより困難になるか、パフォーマンスが低下します。現時点では、独自のJavaコードを記述して、独自のリクエストを実装できます。
たとえば、Socketリクエスト、Httpリクエスト、RocketMQリクエストなど、Javaを実装できる限り、jmeterで実行できます。

目次



Jmeter10-Javaリクエスト

0x00準備:



0x01Javaリクエストクラスを作成します

0x02サンプルコード:

0x03テストコード



0x04パッケージjar

0x05使用

0x06デモプロジェクト


0x00準備:

まず、独自のJavaプロジェクトを作成し、Jmeter関連のパッケージをインポートし、httphttphttpなどのリクエスト関連のパッケージをインポートします。

// Jmeter related classes Import org.apache.jmeter.config.Arguments // request parameters Import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient // request base class Import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext // request context, can be understood as the content passed by Jmeter Import org.apache.jmeter.samplers.SampleResult // request result


0x01Javaリクエストクラスを作成します

1.クラス継承を要求するAbstractJavaSamplerClient
2. public Arguments getDefaultParameters()メソッドを実装して、リクエストに必要なパラメーターを作成します
3.リクエスト初期化メソッドを1回だけ記述し、public void setupTest(JavaSamplerContext context)メソッドを実装します
4.リクエストループ実行メソッドを記述し、複数回実行し、パブリックSampleResult runTest(JavaSamplerContext context)メソッドを実装します
5. public void teardownTest(JavaSamplerContext context)メソッドを実装するためのリクエスト終了メソッドを記述します

0x02サンプルコード:

httpリクエストのデモ。

package com.max.javarequest import com.max.javarequest.core.HttpClientUtil import org.apache.jmeter.config.Arguments import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext import org.apache.jmeter.samplers.SampleResult import java.util.ArrayList import java.util.List import org.apache.commons.lang3.StringUtils /** * http request sample * @author max.bai * @date 2019.02 */ public class SleepTapHttpRequest extends AbstractJavaSamplerClient { private String reqUrl private String deviceid private String mac private String userid private String payload = 'requestdata' private HttpClient httpClient private HttpPost httpPost public Arguments getDefaultParameters() { / / Set the parameters required by the request, will be displayed in the jmeter page Arguments params = new Arguments() params.addArgument('reqUrl', '') params.addArgument('deviceid', '') params.addArgument('mac', '') params.addArgument('userid', '') return params } public void setupTest(JavaSamplerContext context) { / / Initialize the request, get the request parameters reqUrl = context.getParameter('reqUrl') deviceid = context.getParameter('deviceid') mac = context.getParameter('mac') userid = context.getParameter('userid') httpClient = new DefaultHttpClient() httpPost = new HttpPost(reqUrl) httpPost.setHeader(HTTP.CONTENT_TYPE, 'application/x-www-form-urlencoded charset=utf-8') } // request execution public SampleResult runTest(JavaSamplerContext context) { // Create a sample. The sample content will see the contents after adding the observation tree. SampleResult results = new SampleResult() results.sampleStart() //Start timing try { //System.out.println(payload) results.setSamplerData(payload) / / set the request data String res = doPost(ppayload) // send http post request //System.out.println('>'+res+'<') results.setResponseData(res, 'utf-8') //Set the request response content results.setDataType(SampleResult.TEXT) if('true'.equals(res)){ results.setSuccessful(true) //Set the request result successfully }else{ results.setSuccessful(false) //Set the request result failed } } catch (Exception e) { //e.printStackTrace() results.setSuccessful(false) } results.sampleEnd() //Timed end The response to the request is the start and end of the decision. return results } public void teardownTest(JavaSamplerContext context) { super.teardownTest(context) } /** * send http post request * @param reqData requests data * @return response data */ private String doPost(String reqData){ String reseContent = '' try { httpPost.setEntity(new StringEntity(reqData == null ? '' : reqData, 'utf-8')) HttpResponse response = httpClient.execute(httpPost) HttpEntity entity = response.getEntity() if (null != entity) { reseContent = EntityUtils.toString(entity, ContentType.getOrDefault(entity).getCharset()) EntityUtils.consume(entity) } } catch (Exception e) { throw new IllegalStateException(e) } return reseContent } }


0x03テストコード

テストコードは、プロジェクトで作成し、実行してテストし、正常にパッケージ化してJmeterで実行することができます。

package com.max.javarequest import org.apache.jmeter.config.Arguments import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext public class Test { public static void main(String[] args) { // test http // fill in the parameters Arguments params = new Arguments() params.addArgument('reqUrl', 'http://39.105.100.51:9191/ttt/bbbb') params.addArgument('deviceid', '1') params.addArgument('mac', '1CCCCCC00001') params.addArgument('userid', '1') // instantiate the request and execute the request JavaSamplerContext context = new JavaSamplerContext(params) SleepTapHttpRequest sttest = new SleepTapHttpRequest() sttest.setupTest(context) for(int i=0i<20i++){ sttest.runTest(context) } sttest.teardownTest(context) } }

0x04パッケージjar

プロジェクトはjarパッケージにパッケージ化され、Jmeterのlib / ext /ディレクトリに配置されます。 RocketMQなどの関連するjarファイルもここに配置されます。

D: oolsapache-jmeter-4.0libext


0x05使用

Jmeterで追加->サンプラー-> Javaリクエスト
クラス名で書かれたJavaクラスがあります。選択すると、クラスに設定されているパラメータが下に表示されます。
対応するパラメータ実行を入力します。結果監視ツリーでは、要求送信情報、応答情報、およびそれが成功したかどうかを表示できます。

0x06デモプロジェクト

プロジェクトには、TCP、Http、RocketMQリクエストが含まれています。

https://download.csdn.net/download/max229max/10983455