关于jmeter:自定义jmeter测试逻辑

5次阅读

共计 1886 个字符,预计需要花费 5 分钟才能阅读完成。

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

正文完
 0