最近测试共事在做压测过程中发现同样配置的两台服务器,部署同样的程序压测后果却差了很多(将近100tps),测试共事用的是loadrunner进行的压测,为了不占用测试资源,本地可能模拟出压测后果,须要在jmeter中自定义测试用例。上面介绍一下如何进行自定义。
引入jmeter的jar包
新建一个maven我的项目,联合你装置的jmeter版本,引入对应的版本jar包,次要是ApacheJMeter_core和ApacheJMeter_java,我这里用的是5.4.1
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.4.1</version>
</dependency>
创立本人的用例
创立你本人的测试类,须要继承AbstractJavaSamplerClient,并实现他的几个接口,对应的办法执行机会,我在上面代码中正文了
public class MyTester extends AbstractJavaSamplerClient {
//执行测试代码,次要的逻辑
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
return null;
}
//执行之前的初始化逻辑
@Override
public void setupTest(JavaSamplerContext var1){
}
//完结办法
@Override
public void teardownTest(JavaSamplerContext var1){
}
//java request界面的参数
@Override
public Arguments getDefaultParameters(){
return null;
}
}
这样看可能不是很分明,举个例子:
@Override
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("host", "");
return params;
}
下面代码我实现了getDefaultParameters办法,并设置了一个host参数,那么在jmeter上显示的后果如下:
其余几个办法的含意,我感觉正文曾经足够分明了。
打包
实现本人的代码之后,就要进行打包了。如果你的我的项目不是springboot,则间接打包。如果你的我的项目是springboot我的项目,则须要去掉相干springboot的引入,把它改为一般包,比方我这里就把相干的包正文掉:
而后在maven插件里,把springboot的打包形式也正文掉:
而后打包就能够了。
应用
根本工作都曾经实现了,接下来开始看看怎么用。
找到jmeter的装置目录\lib\ext,把上一步生成的包丢进去,比方我目录是D:\安装包\apache-jmeter-5.4.1\lib\ext,则丢完之后:
如果你的我的项目中有依赖其余第三方jar的,则把依赖的第三方jar包也丢进去。
启动jmeter并创立对应的java request:
能够看到,咱们本人写的测试类曾经能够选到了。当然如果你须要显示tps报告的,则须要在申请之前和响应之后的逻辑上增加统计逻辑
SampleResult sr = new SampleResult();
sr.sampleStart(); //开始统计
String result = TcpUtil.send(host, content);
sr.sampleEnd(); //完结统计
View Result Tree里的后果,也能够通过你对理论报文的解析来管制胜利还是失败
if (isSucess(result)) {
sr.setSuccessful(true);
}
else {
sr.setSuccessful(false);
}
总结
整体上来说还是比较简单的,只有晓得jmeter提供的几个操作都是什么含意的。次要的坑还是在打包,你不能打个springboot包放进去,这样jmeter不认,最好是缩小第三方包的依赖,但这样也减少了咱们写代码的难度,如果写的不好,也会影响整体tps。
发表回复