Jmeter测试java请求
源代码下载地址:
之前压⼒测试的是注册功能的接⼝,写了⼀个jdbc request上来就根据⼿机号 将数据库的记录清除,但是现在的数据库⼿机号是加密之后的⼿机号,直接传⼀个明⽂的⼿机号是不⾏的,所以在调⽤之前要对⼿机号进⾏加密,查阅资料发现有Bean shell 和java request的两种⽅式,先打算使⽤java request⽅式进⾏压⼒测试。
先写⼀个简单的⼩demo,测试两个数相加
1.创建⼀个Java⼯程
2.导包
将JMeter的lib⽬录下 包括ext 和 junit 中的jar⽂件添加到⼯程中 尤其是ext中的ApacheJMeter_core.jar,ApacheJMeter_java.jar都是必须的,有的不是
myeclipse创建⼯程,导⼊jar包就不再说了,这⾥提供 idea中创建java普通⼯程,添加jar包,并将代码打成jar包的参考:
3.重写jmeter⽅法JavaTest.java
创建⼀个类并实现JavaSamplerClient接⼝或继承AbstractJavaSamplerClient,并重写⽅法。
st;
import org.fig.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.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author: wangsaichao
* @date: 2017/12/13
时间正则表达式java* @description:
*/
public class JavaTest extends AbstractJavaSamplerClient {
private static final Logger logger = Logger(JavaTest.class);
private String num1;
private String num2;
/**
* 这个⽅法是⽤来⾃定义java⽅法⼊参的
* params.addArgument("num1","");表⽰⼊参名字叫num1,默认值为空。
* @return
*/
@Override
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("num1", "");
params.addArgument("num2", "");
return params;
}
/**
* 每个线程测试前执⾏⼀次,做⼀些初始化⼯作
* 获取输⼊的参数,赋值给变量,参数也可以在下⾯的runTest⽅法中获取,这⾥是为了展⽰该⽅法的作⽤
* @param arg0
*/
@Override
public void setupTest(JavaSamplerContext arg0) {
num1 = Parameter("num1");
num1 = Parameter("num1");
num2 = Parameter("num2");
}
/**
* 真正执⾏逻辑的⽅法
* @param arg0
* @return
*/
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult sr = new SampleResult();
sr.setSamplerData("请求参数num1:"+num1+"\n请求参数num2:"+num2);
logger.info("请求参数num1:{} 请求参数num2:{}",num1,num2);
try {
// jmeter 开始统计响应时间标记
sr.sampleStart();
int sum = Integer.parseInt(num1)+Integer.parseInt(num2);
/
/ 通过下⾯的操作就可以将被测⽅法的响应输出到Jmeter的察看结果树中的响应数据⾥⾯了。            sr.setResponseData("结果是:"+sum, "utf-8");
logger.info("结果是:{}",sum);
sr.setDataType(SampleResult.TEXT);
//设置响应执⾏成功
sr.setSuccessful(true);
} catch (Throwable e) {
//有异常,执⾏失败
sr.setSuccessful(false);
e.printStackTrace();
} finally {
// jmeter 结束统计响应时间标记
sr.sampleEnd();
}
return sr;
}
/**
* 测试结束后调⽤
* @param arg0
*/
@Override
public void teardownTest(JavaSamplerContext arg0) {
}
/
**
* main⽅法测试程序是否可⽤,打包时注释掉
* @param args
*/
//    public static void main(String[] args) {
//        Arguments params = new Arguments();
//        Arguments params = new Arguments();
//        //设置参数,并赋予默认值1
//        params.addArgument("num1", "1");
//        //设置参数,并赋予默认值2
//        params.addArgument("num2", "2");
/
/        JavaSamplerContext arg0 = new JavaSamplerContext(params);
//        JavaTest test = new JavaTest();
//        test.setupTest(arg0);
//        test.runTest(arg0);
//        ardownTest(arg0);
//    }
}
参数介绍:
public Arguments getDefaultParameters();可选,定义可⽤参数及默认值;
public void setupTest(JavaSamplerContext arg0):可选,测试前执⾏,做⼀些初始化⼯作;
public SampleResult runTest(JavaSamplerContext arg0);必选,实现⾃定义请求;
public void teardownTest(JavaSamplerContext arg0):可选,测试结束时调⽤;
4.先使⽤main⽅法测试
使⽤main⽅法测试,报以下异常
1.Intellij idea 出现错误 error:java: ⽆效的源发⾏版: 9
解决⽅法:idea默认给使⽤了jdk9的编译
①.点击File ->->Project 将9改成8
②.点击File ->->Modules 将9改成8
2.然后再次运⾏main报以下异常
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'org.apache.logging.log4j.simplelog.StatusLogger.level' to TRACE to show Log4j2 internal initialization logging.
解决⽅法:在classpath下添加l,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
<!--先定义所有的appender-->
<appenders>
<!--这个输出控制台的配置-->
<Console name="Console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<!--这个都知道是输出⽇志的格式-->
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
<!--⽂件会打印出所有信息,这个log每次运⾏程序会⾃动清空,由append属性决定,这个也挺有⽤的,适合临时测试⽤-->
<File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<!--这个会打印出所有的信息,每次⼤⼩超过size,则这size⼤⼩的⽇志会⾃动存⼊按年份-⽉份建⽴的⽂件夹下⾯并进⾏压缩,作为存档-->        <RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="50MB"/>
</RollingFile>
</appenders>
<!--然后定义logger,只有定义了logger并引⼊的appender,appender才会⽣效-->
<loggers>
<!--建⽴⼀个默认的root的logger-->
<root level="trace">
<appender-ref ref="RollingFile"/>
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
3.再次执⾏main⽅法,成功
5.将写好的代码,打成jar包并放到jmeter 的 lib/ext⽬录下
记得把所有额外的(⾃定义协议依赖的,⾮jmeter的)依赖包放到jmeter环境变量中
6.重启jmeter测试
创建java Sampler选择刚定义好的测试类,如下图:
创建线程组:右击测试计划 -> 添加 ->Threads(User) -> 线程组
创建java request:右击线程组 -> 添加 -> Sampler -> java请求
添加查看结果数:右击线程组 -> 添加 -> -> 查看结果数
7.测试,结果如下图
最后,就可以根据正则表达式,提取值给其他⽅法使⽤了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。