步骤:
1. 创建Java 工程,打包成jar
测试类需要继承AbstractJavaSamplerClient类
2. 把打包好的jar文件放入JMETER_HOME\lib\ext目录
3.重启Jmeter>新建线程>添加sampler(java请求)>选择类名称“com.test.webservice.perftest”>添加“结果树”>进行测试
Hello.java:(服务)
package com.test.webservice; public class Hello { public String sayHello() { return "Hello"; } public String sayHelloToPerson(String s) { if(s == null || s.equals("")) s = "nobody"; return (new StringBuilder()).append("Hello ").append(s).toString(); } public int sum(int a,int b) { return a+b; }
//调试用,测试时可以删掉
public static void main(String[] args){ Hello person1=new Hello(); person1.sayHelloToPerson("Lily"); System.out.println("测试成功!"); } }
package com.test.webservice; 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 org.apache.log4j.Logger; import org.apache.log4j.LogManager; import com.test.webservice.Hello; public class perftest extends AbstractJavaSamplerClient{ private String a; private String b; private String resultData; // 这个方法是用来自定义java方法入参的。 // params.addArgument("num1","");表示入参名字叫num1,默认值为空。 //设置可用参数及的默认值; public Arguments getDefaultParameters(){ Arguments param=new Arguments(); param.addArgument("name1", ""); param.addArgument("num2", ""); return param; } public void setupTest(JavaSamplerContext arg0){ } //开始测试,从arg0参数可以获得参数值; public SampleResult runTest(JavaSamplerContext arg0){ a=arg0.getParameter("num1"); b=arg0.getParameter("num2"); SampleResult sr=new SampleResult(); sr.setSampleLabel("java请求1"); try { sr.sampleStart(); Hello test=new Hello(); // 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。 resultData=String.valueOf(test.sum(Integer.parseInt(a),Integer.parseInt(b))); if(resultData!=null&&resultData.length()>0){ sr.setResponseData("结果是:"+resultData, null); sr.setDataType(SampleResult.TEXT); } sr.setSuccessful(true); } catch (Throwable e) { sr.setSuccessful(false); e.printStackTrace(); // TODO: handle exception }finally { sr.sampleEnd();// jmeter 结束统计响应时间标记 } return sr; } public void teardownTest(JavaSamplerContext arg0){ } public static void main(String[] args){ Arguments params=new Arguments(); params.addArgument("num1", "1"); params.addArgument("num2", "2"); JavaSamplerContext arg0=new JavaSamplerContext(params); perftest test1=new perftest(); test1.setupTest(arg0); test1.runTest(arg0); test1.teardownTest(arg0); } }
注:执行继承AbstractJavaSamplerClient类的java文件时提示“org.apache.logging.log4j.simplelog.StatusLogger.level 需要设置成trace”,新建xml文件设置属性:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Logger name="org.apache.logging.log4j.simplelog.StatusLogger" level="trace"> <AppenderRef ref="Console"/> </Logger> <Logger name="com.demo" level="debug"> <AppenderRef ref="Console"/> </Logger> <Root level="error"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>