在IDE中引用Jmeter的安装目录lib/ext中两个文件ApacheJMeter_core.jar和ApacheJMeter_java.jar
Java request的类需要继承AbstractJavaSamplerClient类,在继承AbstractJavaSamplerClient类的时候,需要实现四个方法,分别是
setupTest():初始化方法,用于初始化性能测试时的每个线程;
getDefaultParameters():主要用于设置传入的参数;
runTest():为性能测试时的线程运行体;
teardownTest():测试结束方法,用于结束性能测试中的每个线程。
1 package com.test.jmeterdemo; 2 3 import com.test.http.HTTPClient; 4 import com.test.http.HTTPUtils; 5 import org.apache.jmeter.config.Arguments; 6 import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; 7 import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; 8 import org.apache.jmeter.samplers.SampleResult; 9 10 11 public class TestHTTP extends AbstractJavaSamplerClient { 12 private String url; 13 private String method; 14 private String header; 15 private String reqBody; 16 private String responseCode; 17 private String responseHeader; 18 private String responseBody; 19 20 /** 21 * 这个方法用来控制显示在GUI页面的属性,由用户来进行设置。 22 * 此方法不用调用,是一个与生命周期相关的方法,类加载则运行。 23 */ 24 public Arguments getDefaultParameters() { 25 Arguments arguments = new Arguments(); 26 arguments.addArgument("Url", ""); 27 arguments.addArgument("Method", ""); 28 arguments.addArgument("Header", ""); 29 arguments.addArgument("ReqBody", ""); 30 return arguments; 31 } 32 33 /** 34 * 初始化方法,初始化性能测试时的每个线程 35 * 实际运行时每个线程仅执行一次,在测试方法运行前执行,类似于LoadRunner中的init方法 36 */ 37 public void setupTest(JavaSamplerContext jsc){ 38 url = jsc.getParameter("Url"); 39 method = jsc.getParameter("Method"); 40 header = jsc.getParameter("Header"); 41 reqBody = jsc.getParameter("ReqBody"); 42 } 43 44 /** 45 * 性能测试时的线程运行体 46 * 测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于Loadrunner中的Action方法 47 */ 48 public SampleResult runTest(JavaSamplerContext javaSamplerContext) { 49 SampleResult results = new SampleResult(); 50 results.setSamplerData(url+"\n"+method+"\n"+header+"\n"+reqBody); 51 results.setRequestHeaders(header); 52 //标记事务开始 53 results.sampleStart(); 54 HTTPUtils.Response response = HTTPClient.sendHttpRequest(url, method, header, reqBody); 55 //标记事务结束 56 results.sampleEnd(); 57 if (response != null) { 58 responseCode = String.valueOf(response.getResponseCode()); 59 responseHeader = response.getResponseHeader().toString(); 60 responseBody = (String) response.getResponseBody(); 61 results.setSuccessful(true); 62 } 63 results.setResponseCode(responseCode); 64 results.setResponseHeaders(responseHeader); 65 results.setResponseData(responseBody, "UTF-8"); 66 return results; 67 } 68 69 /** 70 * 测试结束方法,结束测试中的每个线程 71 * 实际运行时,每个线程仅执行一次,在测试方法运行结束后执行,类似于Loadrunner中的End方法 72 */ 73 public void teardownTest(JavaSamplerContext args) { 74 } 75 }