Jmeter--通过Java Request对SDK进行性能测试

前言
由于公司项目需要,将一个公共的文件存储模块封装成了SDK,供各个子系统客户端调用。但是近期出现了一些性能问题,为了找出程序的性能瓶颈,需要直接对SDK进行压测。SDK是用Java代码编写的一个jar包,所以就是需要对Java代码进行压测,于是我就想到了用Jmeter的Java请求,果然Jmeter还是够强大,完美的实现了对SDK的压测,顺利的帮助我们找到了性能瓶颈。

以下是使用IDEA创建的基于Maven项目管理的Java工程

一、创建Java工程实现对被测程序的调用

1.创建基于Maven的Java工程

在IDEA中,点击新建项目,选择Maven项目,点击Next,输入项目名称
在这里插入图片描述

2.将测试jar包导入Jmeter

创建好的项目中会自动生成一个pom.xml文件
在pom.xml文件中引入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
在这里插入图片描述

  1. setupTest方法
//每个线程会执行1次,用于初始化参数
    public void setupTest(JavaSamplerContext javaSamplerContext) {
        treadNum = javaSamplerContext.getIntParameter("treadNum");
        log.info("treadNum:"+treadNum+"  setupTest执行成功!!");
    }
  1. runTest方法
//调用被测程序的主方法,通过该方法入参javaSamplerContext可以获取到jmeter传入的参数
 public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
     SampleResult result = new SampleResult();
     String param1 = javaSamplerContext.getParameter("param1");
     String param2 = javaSamplerContext.getParameter("param2");

     //设置java Request开始,从此处开始计时,用于统计聚合报告
     result.sampleStart();
     //设置java Request的返回内容
     result.setResponseData("返回消息体,param1:" + param1 + ",param2:" + param2, "utf-8");
     //设置java Request的返回状态,true为请求成功,false为请求失败
     result.setSuccessful(true);
     //设置java Request结束,从此处开始计时,用于统计聚合报告
     result.sampleEnd();
     return result;
 }
  1. teardownTest方法
//测试结束时调用,每个线程只执行一次。
  public void teardownTest(JavaSamplerContext javaSamplerContext) {
      log.info("treadNum:"+treadNum+"  teardownTest执行成功!!");
  }

二、将生成的jar包导入Jmeter

为了让Jmeter中能够加载到我们编写的测试类,需要将生成jar包拷贝到jmeter安装目录下的/lib/ext文件夹中。
但是每次我们用maven打完jar包之后,都有手动拷贝,比较麻烦。我们可以在maven的pom.xml中加上如下代码,指定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都是每个线程仅执行一次。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值