jmeter中java请求,解决不支持协议和元件,实现自定义元件

目录

java请求

作用场景

JavaTest类源码分析

编写java请求样例

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

编写java请求类,继承AbstractJavaSamplerClient,

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

重启jmeter,添加java请求,查看到我们新编写的java请求类

查看运行结果,


java请求

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

作用场景

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

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

JavaTest类源码分析

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

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

  1. 3. JavaSamplerClient接口类,主要4个方法,主要方法如下:

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

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

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

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

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

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

编写java请求样例

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

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

主要导入jar包如下,可以从jmeter安装目录中lib下引入,这个可能保证版本一致

编写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);
    	  	
	}
}

编写好,此次类,可以此类当成一个模块类,每一次java脚本,只根据需要修改部分脚本及调用api,请进行使用了。

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

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

重启jmeter,添加java请求,查看到我们新编写的java请求类

查看运行结果,

设置1个线程,运行2次场景,运行。

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

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些常见的 JMeter 面试问题: 1. 什么是 JMeter?它的主要用途是什么? JMeter 是一个开源的 Java 应用程序,用于性能测试和负载测试。它可以模拟多种协议,包括 HTTP、HTTPS、FTP、JDBC 和 SOAP 等,以及支持分布式测试和自定义脚本。 2. JMeter 的主要组件有哪些? 主要组件包括线程组、取样器、逻辑控制器、配置元件、前置处理器和后置处理器等。 3. 如何设置 JMeter 的线程数? 线程数是通过线程组来设置的。您可以在线程组指定所需的线程数、延迟时间和循环次数等参数。 4. 如何创建自定义脚本? 您可以使用 JMeter 的内置脚本语言(BeanShell、JavaScript 或 Groovy)编写自定义脚本,也可以使用插件或外部库来扩展其功能。 5. JMeter 如何处理并发请求JMeter 可以使用多个线程同时发送请求,从而模拟并发请求。您可以使用分布式测试来进一步增加并发性能。 6. 如何对 JMeter 进行性能调优? 您可以通过调整线程数、增加虚拟用户、使用分布式测试、禁用不必要的日志和调试信息等措施来提高 JMeter 的性能。 7. JMeter 支持哪些测试类型? JMeter 支持多种测试类型,包括负载测试、压力测试、功能测试、接口测试、性能测试和安全测试等。 8. 如何监控 JMeter 的运行状态? 您可以使用 JMeter 自带的监控器或插件来监控 JMeter 的运行状态,如 Heap Usage、CPU Usage、Active Threads、Response Time 和 Throughput 等指标。 希望这些问题和答案可以帮助您在 JMeter 面试取得好成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值