最近测试共事在做压测过程中发现同样配置的两台服务器,部署同样的程序压测后果却差了很多(将近 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。