您的位置 首页 java

一起学习JMeter(六)-JMeter最大利刃-java请求

java 请求

JMeter最大利刃-java请求,通过简单代码,实现java能做的所有事。

1. 作用场景

目前应用架构都喜欢使用MQ、kafka等 中间件 ,进行异步处理和应用之间解耦;所以性能测试中也有大量测试项目,要求直接发送请求到MQ、kafka等中间件上产生压力测试。此时使用java请求元件,它就是最大利器。java 请求就是直接通过编写java 代码对java api 调用,再加载对JMeter工具,实现方便的性能测试。

JMeter提供org. apache .jmeter.protocol.java.test.JavaTest类,实现java请求的简单例子。我们可以模仿它来扩展java请求元件,用来做接口测试。

2. JavaTest类源码分析

(1)查看JMeter源代码中JavaTest类,分析发现JavaTest继续了AbstractJavaSamplerClient类,这个抽象类主要方法3个,JavaTest中主要是覆盖这3个方法

一起学习JMeter(六)-JMeter最大利刃-java请求

一起学习JMeter(六)-JMeter最大利刃-java请求

(2)查看 AbstractJavaSamplerClient类,主要有3个方法,实现 JavaSamplerClient接口

一起学习JMeter(六)-JMeter最大利刃-java请求

(3)JavaSamplerClient接口类,主要4个方法,主要方法如下:

通过源代码分析,主要就是4个方法

setupTest方法 ,在 线程 执行前执行一次此方法

runTest方法,在线程中反复执行此方法

teardownTest方法,在线程中结束时,执行一次此方法

getDefaultParameters方法,设置java界面中默认值

所以我们要编写一个java请求,只要继承 AbstractJavaSamplerClient ,实现一个 runTest方法,因为其它方法可根据自己需求进行覆盖。

3. 编写java请求样例

我们编写java请求 脚本 ,最好使用java的IDE工具,如eclipse;开发脚本步骤如下:

(1)新建java工程,导入jmeter主要依赖。

主要导入jar包如下,可以从jmeter安装目录中lib下引入,尽量保证版本一致,(本次测试使用jmeter版本5.2.1)

(2)编写java请求类,继承AbstractJavaSamplerClient,主要脚本如下

 package com.pt.jmeter;

import java.io.Serializable;
import org.apache.jmeter.config. arguments ;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class JavaTest01 extends AbstractJavaSamplerClient  implements Serializable {

private static final long serialVersionUID = 1958462245182570120L;

private static final Logger LOG = LoggerFactory.getLogger(JavaTest01.class);

/**
 * 线程主要执行方法
 * 编写主要测试代码
 */@Override
public SampleResult runTest(JavaSamplerContext arg0) {
LOG.warn("线程执行,主要执行runTest");

String param1 = arg0.getParameter("param1");
String param2 = arg0.getParameter("param2");
String param3 = arg0.getParameter("param3");

LOG.warn("param1:" +param1+" ,param2:" +param2+" ,param3:" +param3);

SampleResult srResult =new SampleResult();

srResult.setDataEncoding("UTF-8");

//开启取样计时
srResult.sampleStart();

LOG.warn("执行主要测试 api " );

//结束计时
srResult.sampleEnd();

//设置取样器data
srResult.setSamplerData("请求body");

srResult.setDataType(SampleResult.TEXT); 
//设置响应code
srResult.setResponseCode("响应code");
//设置响应内容
srResult.setResponseMessage("响应内容");

srResult.setResponseData("响应内容", null);

//设置取样是否成功,true为成功,false为失败
srResult.setSuccessful(true);

return srResult;
}

   /**
    * 线程执行前,执行此方法
    * 编写执行前,需要提前当初使化代码,如登陆,建立连接等
    */    @Override
    public void setupTest(JavaSamplerContext context) {
    LOG.warn("线程执行前,执行1次setupTest");
    }

    /**
     * 线程结束时,执此行方法
     * 一般线程后,需要释放的代码,如退出,关闭资源等
     */    @Override
    public void teardownTest(JavaSamplerContext context) {
    LOG.warn("线程结束时,执行1次teardownTest");
    }

    /**
     * 设置java请求界面默认参数
     */    @Override
    public Arguments getDefaultParameters() {
    LOG.warn("执行设置,java请求界面默认值参数");
    
        Arguments params = new Arguments();
        params.addArgument("param1", "test1");
        params.addArgument("param2", "test2");
        params.addArgument("param3", "test3");
        return params;   
    }
    
    public static void main(String[] args) {

    JavaTest01 jTest01=new JavaTest01();
    
    Arguments arguments =new Arguments();
    
    arguments.addArgument("param1", "test1");
    arguments.addArgument("param2", "test2");
    arguments.addArgument("param3", "test3");
    
    JavaSamplerContext arg0 =new JavaSamplerContext(arguments);
    
    jTest01.setupTest(null);
    
    jTest01.runTest(arg0);
    
    jTest01.teardownTest(null);
      
}
}
   

编写好此类,此类可当成一个模块类,每一次只需修改类中部分脚本及调用api,就可以编写一个java请求脚本。

(2)导入工程为jar包,放置jmeter安装目录下lib/ext目录

一起学习JMeter(六)-JMeter最大利刃-java请求

注意:需要代码中有使用其它第三方jar包,如果打包方式是普通jar包(如上图)需要拷贝第三方jar包到JMeter安装目录lib目录

(3)重启jmeter,添加java请求,查看到新编写的java请求类

一起学习JMeter(六)-JMeter最大利刃-java请求

(4)查看运行结果,设置1个线程,运行2次场景,运行。

查看日志显示,查看脚本方法运行情况(如下图);单线程分析,线程启动后,首先运行setupTest方法,再运行2次runTest方法;线程结束后,再运行teardownTest方法。

在性能测试中,使用JMeter工具中java请求,模拟MQ,kafka,redis,SFTP,第三方api等场景;或者你觉得jmeter 默认取样器存在不好用的地方,也可以通过这种方法进行改写,增加自己现实的方法,再通过JMeter来运行测试脚本。

文章来源:智云一二三科技

文章标题:一起学习JMeter(六)-JMeter最大利刃-java请求

文章地址:https://www.zhihuclub.com/180172.shtml

关于作者: 智云科技

热门文章

网站地图