如何使用Java 開發(fā)Apache JMeter JavaRequest
開發(fā)Apache JMeter Java?Request的目的
目前較多的壓測都是Http接口,但是實際工作中也可能會遇見一些無法通過http 來實現(xiàn)的岗屏,有單協(xié)議的,有多協(xié)議的吨拍,為了簡單快捷我們可以使用Java Request來實現(xiàn);
二.?[endif]實現(xiàn)Java Request
1.???? [endif]創(chuàng)建maven工程
2.?? [endif]在pom文件添加依賴【Apache JMeter Core和Apache JMeter Java】
3.?? [endif]繼承AbstractJavaSamplerClient類,并重寫setupTest()/getDefaultParameters()/runTest()/teardownTest()方法;
package hg.auto.cases;
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;
/**
?*@authorderrick
?*/
public class HsCases extends AbstractJavaSamplerClient {
??? private SampleResult results;
???privateString nickname;
???privateString pwd;
???private static finalString PARAMS_PASSWORD = "derrick";
???private static finalString PARAMS_NICKNAME = "derrick";
???private static finalString CHARSET_UTF_8 = "UTF-8";
??? @Override
??? public void setupTest(JavaSamplerContext arg) {
???????results= new SampleResult();
???????results.setSamplerData(toString());
???????results.setDataType("text");
???????results.setContentType("text/plain");
???????results.setDataEncoding(CHARSET_UTF_8);
??? }
??? @Override
??? public Arguments getDefaultParameters() {
???????Arguments params =new Arguments();
???????params.addArgument("nickname", PARAMS_NICKNAME);
???????params.addArgument("pwd", PARAMS_PASSWORD);
???????returnparams;
??? }
??? @Override
??? public SampleResult runTest(JavaSamplerContextcontext) {
???????results.sampleStart(); // 定義一個事務(wù),事務(wù)開始
??????? nickname = context.getParameter("nickname");
???????pwd = context.getParameter("pwd");
???????login(nickname, pwd);
???????results.sampleEnd(); // 定義一個事務(wù),事務(wù)結(jié)束
??????? return results;
??? }
??? public void login(String nickname, String pwd) {
???????results.setResponseCode(CHARSET_UTF_8);
???????if(PARAMS_PASSWORD.equals(pwd)&&PARAMS_NICKNAME.equals(nickname)) {
???????????results.setSuccessful(true);
???????????results.setResponseCodeOK();
???????????results.setResponseMessage("success");
???????????results.setResponseData("{\"Code\":\"10000\",\"Token\":\"WRETCHEDNESS34T343453T1LUO198812004\"}", CHARSET_UTF_8);
???????} else {
???????????results.setResponseCode("500");
???????????results.setResponseMessage("user pwd error");
???????????results.setSuccessful(false);
???????????results.setResponseData("{\"Code\":\"9999\",\"Msg\":\"用戶名或密碼錯誤隶校,請重試! \"}", CHARSET_UTF_8);
???????}
??? }
??? @Override
??? public void teardownTest(JavaSamplerContext arg) {
???????System.out.println("tread down");
??? }
}
三.?打包測試
1.?? 將jar包放在jmeter lib/ext目錄下蛹锰,重新啟動Jmeter
2.?? Jmeter 配置 Java Request請求深胳,選擇執(zhí)行請求的類和默認(rèn)配置參數(shù)和值
到此Java Request請求配置完成,后續(xù)請求執(zhí)行階段與Http請求執(zhí)行一致铜犬,而Jmeter request 請求的核心步驟不在于Jmeter的配置舞终,關(guān)鍵在于Java 代碼的實現(xiàn)內(nèi)容,主要邏輯存放在Java代碼癣猾,而Jmeter主要是來執(zhí)行該代碼
3.?? 常用方法介紹
public voidsetupTest(JavaSamplerContext context){};? //? 測試啟動時調(diào)用敛劝,主要做一些初始化工作;
public void teardownTest(JavaSamplerContext context){}; // 測試結(jié)束時調(diào)用纷宇,主要做一些資源回收工作夸盟;
public Arguments getDefaultParameters(){return null;}; //設(shè)置可用參數(shù)及參數(shù)默認(rèn)值,主要用于Jmeter界面與代碼參數(shù)之間的交互操作;
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {return null;}; // 必選像捶,實現(xiàn)自定義請求
4.?? [endif]代碼中的方法執(zhí)行的先后順序:
??????getDefaultParameters()-->setupTest(JavaSamplerContext?context) -->runTest(JavaSamplerContext?context)-->teardownTest(JavaSamplerContext?context)
?