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