Jmeter自定義Java請求開發

1、本次實驗目的

IDEA新建maven項目,使用java開發自定義jmeter的請求。html

本次開發使用的代碼,會百度雲分享給你們。java

2、本次實驗環境

 

Ideaapache

2017.02json

Jmeterapp

5.1.1dom

3、新建maven項目

pom.xml文件中導入依賴。maven

 

 
<dependencies> <!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_functions --> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_functions</artifactId> <version>5.1.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_core --> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_core</artifactId> <version>5.1.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_java --> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_java</artifactId> <version>5.1.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.5</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies>

 

4、代碼編寫

4.一、以上一節監控的demo實現的兩個接口爲例,來編寫實現請求的自定義請求

打開jmeter,添加javarequest以下圖所示:ide

image.png默認只有兩個class。post

4.二、新建class實現JavaSamplerClient接口

 

 
package com.jmeter.functions; import org.apache.jmeter.config.Arguments; import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient; import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; import org.apache.jmeter.samplers.SampleResult; public class CustemRequest implements JavaSamplerClient { @Override public void setupTest(JavaSamplerContext javaSamplerContext) { } @Override public SampleResult runTest(JavaSamplerContext javaSamplerContext) { return null; } @Override public void teardownTest(JavaSamplerContext javaSamplerContext) { } @Override public Arguments getDefaultParameters() { return null; } }

 

咱們能夠看到,具體會實現4個方法。ui

4.三、實現具體方法

啓動上一節實現的應用。localhost:8086

image.png

具體實現代碼以下:

 

 
package com.jmeter.functions; import com.alibaba.fastjson.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.utils.URIBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.apache.jmeter.config.Arguments; import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient; import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; import org.apache.jmeter.samplers.SampleResult; import java.net.URISyntaxException; import java.util.LinkedList; import java.util.List; import java.util.Random; public class CustemRequest implements JavaSamplerClient { //定義顯示請求地址的變量名 private static final String REQUEST_RUL = "URL"; //定義默認請求的URL地址 private static final String DEFAULT_URL = "http://localhost:8086/user/get"; //用戶輸入的URL private String inputUrl; //用來保存http請求的響應結果,並把結果放到jmeter的查看結果樹裏面 private String ResponseResult; //返回成功的狀態碼 private static final int SUCCESS_CODE = 200; //如下方法,打印輸出的目的就是檢驗此4個方法的執行順序,你們執行的時候能夠後臺結果詳細查看 @Override public void setupTest(JavaSamplerContext javaSamplerContext) { System.out.println("******setupTest******"); inputUrl = javaSamplerContext.getParameter(REQUEST_RUL,DEFAULT_URL); System.out.println("用戶默認輸出的URL地址------>:" + inputUrl); } /** * 真正執行的方法 * @param javaSamplerContext * @return */ @Override public SampleResult runTest(JavaSamplerContext javaSamplerContext) { SampleResult sampleResult = new SampleResult(); Object[] param = new Object[]{"id"}; Object[] value = new Object[]{26}; List<NameValuePair> nameValuePairs = getParam(param, value); /** * 標記一個事務的開始 */ sampleResult.sampleStart(); try { ResponseResult = (String) sentGetRequest(inputUrl, nameValuePairs); } catch (Exception e) { e.printStackTrace(); } sampleResult.setSampleLabel("自定義本地的請求訪問"); sampleResult.setSuccessful(true); //告訴查看結果樹是否成功 sampleResult.setResponseData(ResponseResult,"utf-8"); sampleResult.setDataType(SampleResult.TEXT); return sampleResult; } @Override public void teardownTest(JavaSamplerContext javaSamplerContext) { } @Override public Arguments getDefaultParameters() { //在jmeter顯示屬性 Arguments arguments = new Arguments(); arguments.addArgument(REQUEST_RUL,DEFAULT_URL); return arguments; } //自定義實現get請求 /** * 發送get請求 * @param url 請求URL地址 * @param nameValuePairs 請求參數 * @return JSON或者字符串 * @throws Exception */ public static Object sentGetRequest(String url, List<NameValuePair> nameValuePairs) throws Exception{ CloseableHttpClient client = null; CloseableHttpResponse response = null; try { /** * 新建HttpClient對象 */ client = HttpClients.createDefault(); /** * 新建URIBuilder */ URIBuilder uriBuilder = new URIBuilder(url); /** * 設置參數 */ uriBuilder.addParameters(nameValuePairs); /** * 建立HttpGet */ HttpGet httpGet = new HttpGet(uriBuilder.build()); /** * 設置請求頭部編碼 */ httpGet.setHeader(new BasicHeader("content-Type","application/x-www-form-urlencoded; charset=utf-8")); /** * 請求服務 */ response = client.execute(httpGet); int statusCode = response.getStatusLine().getStatusCode(); if (SUCCESS_CODE == statusCode){ /** * 獲取返回對象 */ HttpEntity entity = response.getEntity(); /** * 經過EntityUtils獲取返回內容 */ String result = EntityUtils.toString(entity,"utf-8"); return result; }else { System.out.println("請求失敗!!!!!!"); } } catch (URISyntaxException e) { e.printStackTrace(); }finally { response.close(); client.close(); } return null; } private static List<NameValuePair> getParam(Object[] params,Object[] values){ /** * 參數簡單校驗合法性 */ boolean flag = params.length>0 && values.length>0 && params.length == values.length; if (flag){ List<NameValuePair> nameValuePairs = new LinkedList<>(); for (int i = 0 ; i<params.length; i++){ nameValuePairs.add(new BasicNameValuePair(params[i].toString(),values[i].toString())); } return nameValuePairs; }else { System.out.println("請求參數爲空且參數長度不一致"); } return null; } public static void main(String[] args) { Object[] param = new Object[]{"id"}; Object[] value = new Object[]{26}; final String DEFAULT_URL = "http://localhost:8086/user/get"; List<NameValuePair> nameValuePairs = getParam(param, value); try { String o = (String) sentGetRequest(DEFAULT_URL, nameValuePairs); System.out.println(o); } catch (Exception e) { e.printStackTrace(); } } } 

 

4.四、maven處處jar包

    • 放到jmeter G:\apache-jmeter-5.1.1\lib\ext目錄
    • 從新打開jmeter

 

image.png

image.png

5、總結

至此咱們自定義的java的request的請求已經開發完畢。

有兩個問題?後面會一一實現。

  1. 在代碼中如何實現get請求中的id參數化?
  2. 在代碼中如何編寫post請求?

原文出處:https://www.cnblogs.com/hardy-test/p/11204353.html

相關文章
相關標籤/搜索