步骤:
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>