使用JMeter做性能測試時(shí),有時(shí)Jmeter本身的功能并不能很好的滿足實(shí)際的需求,這時(shí)可能就需要自己來擴(kuò)展開發(fā)了,Jmeter是支持我們自定義編寫測試腳本的,本文簡單記錄下使用Jmeter擴(kuò)展組件開發(fā)-自定義java請求的流程。
項(xiàng)目工程github:https://github.com/testerwan/JmeterExtended
1、使用IDEA創(chuàng)建一個(gè)Maven工程,pom.xml中添加依賴的jar包(ApacheJMeter_core、ApacheJMeter_java)
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>3.2</version>
</dependency>
2、idea中創(chuàng)建一個(gè)Class com.wan.Second 該類實(shí)現(xiàn)了JavaSamplerClient接口 實(shí)現(xiàn)接口的方法
package com.wan;
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.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
/**
* Created by wan on 19/5/21.
*/
public class Second implements JavaSamplerClient{
//URLNAME 就是在圖形化界面當(dāng)中顯示的變量名稱
private static final String URLNAME = "URL";
//設(shè)置界面當(dāng)中默認(rèn)顯示的變量的值
private static final String DEFAULTURL = "http://www.baidu.com";
/**
* 這個(gè)方法決定了在jmeter當(dāng)中要顯示哪些屬性
* @return arguments
*/
//用來存儲響應(yīng)的數(shù)據(jù),目的是將響應(yīng)結(jié)果放到察看結(jié)果樹當(dāng)中
private String resultData;
public Arguments getDefaultParameters() {
System.out.println("getDefaultParameters run");
Arguments arguments = new Arguments();
arguments.addArgument(URLNAME,DEFAULTURL);
return arguments;
}
private String inputUrl;
/**
* 這個(gè)方法就是一個(gè)初始化方法,我們所有的初始化的動作都可以在這里寫
* @param javaSamplerContext
*/
public void setupTest(JavaSamplerContext javaSamplerContext) {
inputUrl = javaSamplerContext.getParameter(URLNAME,DEFAULTURL);
System.out.println("setupTest run");
System.out.println("用戶輸入的url地址是:"+inputUrl);
}
/**
* 這個(gè)方法就是實(shí)現(xiàn)你具體功能邏輯的方法
* @param javaSamplerContext
* @return
*/
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult result = new SampleResult();
System.out.println("runTest run");
StringBuffer sb = new StringBuffer();
try {
URL url = new URL(inputUrl);
URLConnection conn = url.openConnection();
byte[] buffer = new byte[1024];
int len;
result.sampleStart();//標(biāo)記事務(wù)的開始
InputStream in = conn.getInputStream();
while ((len=in.read(buffer))!=-1){
resultData = new String(buffer,"UTF-8");
sb.append(resultData);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// resultData = "這就是響應(yīng)結(jié)果";
resultData = sb.toString();
result.setSampleLabel("自定義java請求訪問");
result.setSuccessful(true);//告訴查看結(jié)果樹訪問是否成功
result.setResponseData(resultData,null);
result.setDataType(SampleResult.TEXT);
return result;
}
/**
* 這個(gè)方法就是來做一些收尾的工作的。
* @param javaSamplerContext
*/
public void teardownTest(JavaSamplerContext javaSamplerContext) {
System.out.println("teardownTest run");
}
}
3、對工程進(jìn)行打包:mvn clean package
image.png
4、把打包后的jar包 拷貝到j(luò)meter安裝目錄下的bin/lib/ext文件夾下
image.png
5、啟動Jmeter,創(chuàng)建一個(gè)線程組,添加一個(gè)java請求 選擇類名為com.wan.Second 執(zhí)行線程組后 查看結(jié)果樹中 能看到請求相應(yīng)能正??吹?,說明自定java請求腳本執(zhí)行成功
image.png
image.png
image.png




