百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

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

mhr18 2024-12-06 16:52 123 浏览 0 评论

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个方法



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


(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目录

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

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

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

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


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

相关推荐

Spring Boot 分布式事务实现简单得超乎想象

环境:SpringBoot2.7.18+Atomikos4.x+MySQL5.71.简介关于什么是分布式事务,本文不做介绍。有需要了解的自行查找相关的资料。本篇文章将基于SpringBoot...

Qt编写可视化大屏电子看板系统15-曲线面积图

##一、前言曲线面积图其实就是在曲线图上增加了颜色填充,单纯的曲线可能就只有线条以及数据点,面积图则需要从坐标轴的左下角和右下角联合曲线形成完整的封闭区域路径,然后对这个路径进行颜色填充,为了更美观...

Doris大数据AI可视化管理工具SelectDB Studio重磅发布!

一、初识SelectDBStudioSelectDBStudio是专为ApacheDoris湖仓一体典型场景实战及其兼容数据库量身打造的GUI工具,简化数据开发与管理。二、Select...

RAD Studio 、Delphi或C++Builder设计代码编译上线缩短开发时间

#春日生活打卡季#本月,Embarcadero宣布RADStudio12.3Athens以及Delphi12.3和C++Builder12.3,提供下载。RADStudio12.3A...

Mybatis Plus框架学习指南-第三节内容

自动填充字段基本概念MyBatis-Plus提供了一个便捷的自动填充功能,用于在插入或更新数据时自动填充某些字段,如创建时间、更新时间等。原理自动填充功能通过实现com.baomidou.myba...

「数据库」Sysbench 数据库压力测试工具

sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。以...

如何选择适合公司的ERP(选erp系统的经验之谈)

很多中小公司想搞ERP,但不得要领。上ERP的目的都是歪的,如提高效率,减少人员,堵住财务漏洞等等。真正用ERP的目的是借机提升企业管理能力,找出管理上的问题并解决,使企业管理更规范以及标准化。上ER...

Manus放开注册,但Flowith才是Agent领域真正的yyds

大家好,我是运营黑客。前天,AIAgent领域的当红炸子鸡—Manus宣布全面放开注册,终于,不需要邀请码就能体验了。于是,赶紧找了个小号去确认一下。然后,额……就被墙在了外面。官方解释:中文版...

歌浓酒庄总酿酒师:我们有最好的葡萄园和最棒的酿酒师

中新网1月23日电1月18日,张裕董事长周洪江及总经理孙健一行在澳大利亚阿德莱德,完成了歌浓酒庄股权交割签约仪式,这也意味着张裕全球布局基本成型。歌浓:澳大利亚年度最佳酒庄据悉,此次张裕收购的...

软件测试进阶之自动化测试——python+appium实例

扼要:1、了解python+appium进行APP的自动化测试实例;2、能根据实例进行实训操作;本课程主要讲述用python+appium对APP进行UI自动化测试的例子。appium支持Androi...

为什么说Python是最伟大的语言?看图就知道了

来源:麦叔编程作者:麦叔测试一下你的分析能力,直接上图,自己判断一下为什么Python是最好的语言?1.有图有真相Java之父-JamesGoshlingC++之父-BjarneStrou...

如何在Eclipse中配置Python开发环境?

Eclipse是著名的跨平台集成开发环境(IDE),最初主要用来Java语言开发。但是我们通过安装不同的插件Eclipse可以支持不同的计算机语言。比如说,我们可以通过安装PyDev插件,使Eclip...

联合国岗位上新啦(联合国的岗位)

联合国人权事务高级专员办事处PostingTitleIntern-HumanRightsDutyStationBANGKOKDeadlineOct7,2025CategoryandL...

一周安全漫谈丨工信部:拟定超1亿条一般数据泄露属后果严重情节

工信部:拟定超1亿条一般数据泄露属后果严重情节11月23日,工信部官网公布《工业和信息化领域数据安全行政处罚裁量指引(试行)(征求意见稿)》。《裁量指引》征求意见稿明确了行政处罚由违法行为发生地管辖、...

oracle列转行以及C#执行语句时报错问题

oracle列转行的关键字:UNPIVOT,经常查到的怎么样转一列,多列怎么转呢,直接上代码(sshwomeyourcode):SELECTsee_no,diag_no,diag_code,...

取消回复欢迎 发表评论: