Jmeter--通过JavaRequest对SDK进⾏性能测试
前⾔
由于公司项⽬需要,将⼀个公共的⽂件存储模块封装成了SDK,供各个⼦系统客户端调⽤。但是近期出现了⼀些性能问题,为了出程序的性能瓶颈,需要直接对SDK进⾏压测。SDK是⽤Java代码编写的⼀个jar包,所以就是需要对Java代码进⾏压测,于是我就想到了⽤Jmeter的Java请求,果然Jmeter还是够强⼤,完美的实现了对SDK的压测,顺利的帮助我们到了性能瓶颈。
以下是使⽤IDEA创建的基于Maven项⽬管理的Java⼯程
⼀、创建Java⼯程实现对被测程序的调⽤
1.创建基于Maven的Java⼯程
在IDEA中,点击新建项⽬,选择Maven项⽬,点击Next,输⼊项⽬名称
2.将测试jar包导⼊Jmeter
创建好的项⽬中会⾃动⽣成⼀个l⽂件
在l⽂件中引⼊Jmeter的jar包
<dependencies>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>2.12</version>
<exclusions>
<exclusion>
<groupId>d-haven-managed-pool</groupId>
<artifactId>d-haven-managed-pool</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
3.编写测试类
在java⽬录下新建⼀个class⽂件,此处implements JavaSamplerClient接⼝或者是extends AbstractJavaSamplerClient⽗类 都可以。
Jmeter⾃带的jar包给我们提供了4个⽅法,可根据实际需要完善对应的⽅法,以实现对被测程序的压测。
1. getDefaultParameters⽅法
例如以下代码⽚段中,设置了param1和param2两个参数,其中param1设置了默认值1
//设置java request的⼊参,可设置默认值
public Arguments getDefaultParameters(){
Arguments params =new Arguments();
params.addArgument("param1","1");
params.addArgument("param2","");
params.addArgument("treadNum","${__threadNum}");
return params;
}
在Jmeter中,Java Request界⾯可以看到有param1和param2两个参数,且param1的value给了默认值1
2. setupTest⽅法
//每个线程会执⾏1次,⽤于初始化参数
public void setupTest(JavaSamplerContext javaSamplerContext){
treadNum = IntParameter("treadNum");
log.info("treadNum:"+treadNum+"  setupTest执⾏成功!!");
}
3. runTest⽅法
//调⽤被测程序的主⽅法,通过该⽅法⼊参javaSamplerContext可以获取到jmeter传⼊的参数
public SampleResult runTest(JavaSamplerContext javaSamplerContext){
SampleResult result =new SampleResult();
String param1 = Parameter("param1");
String param2 = Parameter("param2");
//设置java Request开始,从此处开始计时,⽤于统计聚合报告
result.sampleStart();
//设置java Request的返回内容
result.setResponseData("返回消息体,param1:"+ param1 +",param2:"+ param2,"utf-8");
//设置java Request的返回状态,true为请求成功,false为请求失败
result.setSuccessful(true);sdk
//设置java Request结束,从此处开始计时,⽤于统计聚合报告
result.sampleEnd();
return result;
}
4. teardownTest⽅法
//测试结束时调⽤,每个线程只执⾏⼀次。
public void teardownTest(JavaSamplerContext javaSamplerContext){
log.info("treadNum:"+treadNum+"  teardownTest执⾏成功!!");
}
⼆、将⽣成的jar包导⼊Jmeter
为了让Jmeter中能够加载到我们编写的测试类,需要将⽣成jar包拷贝到jmeter安装⽬录下的/lib/ext⽂件夹中。
但是每次我们⽤maven打完jar包之后,都有⼿动拷贝,⽐较⿇烦。我们可以在maven的l中加上如下代码,指定jar拷贝⽬录,直接在打包的同时,就将jar包⾃动拷贝到了jmeter安装⽬录下的/lib/ext⽂件夹中。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>copy-files</id>
<phase>package</phase>
<configuration>
<tasks>
<!--将⽣成的项⽬jar拷贝到jmeter的lib/ext⽬录下-->
<copy file="${project.build.directory}/JmeterTestForSDK-0.0.1-SNAPSHOT.jar"
tofile="D:\apache-jmeter-2.13\lib\ext\JmeterTestForSDK-0.0.1-SNAPSHOT.jar"
overwrite="true"/>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
三、创建Jmeter压测脚本
完成以上步骤后,我们打开jmeter.bat,创建java Request后,就可以看到ClassName下拉框中,出现了我们⾃⼰创建的测试类了。
将线程组设置为3个并发,循环5次,咱们来测试⼀下。
结果树组件中,我们可以看到,执⾏了15次请求,Response data中打印出了我们在runTest中指定的返回内容。
通过查看bin⽬录下的jemter.log可以看到,3个线程循环执⾏5次。setupTest和teardownTest都是每个线程仅执⾏⼀次。

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