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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/625737.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Notepad8.1.9汉化中文版

下载地址:Notepad8.1.9.zip 一款优秀免费的源代码编辑器,支持语法高亮的开源纯文本编辑器,并且可以替代系统自带的记事本的功能。

线程纵横:C++并发编程的深度解析与实践

hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之《线程纵横:C并发编程的深度解析与实践》,在这篇文章中,你将会学习到C新特性,并发编程,以及其如何带来的高性能的魅力&#xff0…

【经验总结】超算互联网服务器 transformers 加载本地模型

1. 背景 使用 超算互联网 的云服务,不能连接外网,只能把模型下载到本地,再上传上去到云服务。 2. 模型下载 在 模型中 https://huggingface.co/models 找到所需的模型后 点击下载 config.json pytorch_model.bin vocab.txt 3. 上传模型文…

HTML特殊字符

特殊字符 有特殊含义的字符成为字符实体 对于有特殊含义的字符,需要通过转移字符来表示 <span> <br><a href"http://www.atguigu.com">我 爱 前端</a> <br>&amp;amp; 效果

HTML常用标签-布局相关标签

布局标签 div标签 俗称"块",主要用于划分页面结构,做页面布局 自己独占一行的元素&#xff0c;设置宽高生效 span标签 俗称"层",主要用于划分元素范围,配合CSS做页面元素样式的修饰 不会自己独占一行的元素&#xff0c;设置宽高不生效 代码 <div style&…

两小时看完花书(深度学习入门篇)

1.深度学习花书前言 机器学习早期的时候十分依赖于已有的知识库和人为的逻辑规则&#xff0c;需要人们花大量的时间去制定合理的逻辑判定&#xff0c;可以说是有多少人工&#xff0c;就有多少智能。后来逐渐发展出一些简单的机器学习方法例如logistic regression、naive bayes等…

【多模态】30、Monkey | 支持大尺寸图像输入的多任务多模态大模型

文章目录 一、背景二、方法2.1 Enhancing Input Resolution2.2 Multi-level Description Generation2.3 Multi-task Training 三、效果3.1 Image Caption3.2 General VQA3.3 Scene Text-centric VQA3.4 Document-oriented VQA3.5 消融实验3.6 可视化 论文&#xff1a;Monkey : …

maven找不到依赖,in offline mode

问题描述&#xff1a; [ERROR] Plugin org.jetbrains.kotlin:kotlin-maven-plugin:1.2.71 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.jetbrains.kotlin:kotlin-maven-plugin:jar:1.2.71: Cannot access aliyunmaven (ht…

硅胶可以镭射吗?

在科技发展的今天&#xff0c;我们经常会遇到各种各样的材料&#xff0c;其中就有一种叫做硅胶的材料。那么&#xff0c;硅胶可以镭射吗&#xff1f;答案是肯定的&#xff0c;硅胶不仅可以镭射&#xff0c;而且在某些应用中&#xff0c;它的镭射特性还非常突出。 首先&#xff…

IT技术产品:开发者极为重要的思维习惯

1、特色内容预告 1、我用敏捷开发思维&#xff0c;提高工作效率。 2、我用代码批判思维&#xff0c;逐渐让自己的作品变得无可挑剔。 3、我是一个顶级程序员&#xff0c;是哪些重要的专业习惯&#xff0c;让我如此优秀&#xff1f; 2、可以免费获取到的IT资源 1、《软件工程&a…

【35分钟掌握金融风控策略26】定价策略

目录 定价策略 定价策略的开发、部署、监控和调优 定价策略开发 定价策略部署 定价策略监控 定价策略调优 定价策略 定价是对授信审批通过的客户给予合适利率的过程。如何定价、定价多少是由定价策略来决定的。定价策略的制订要遵循“收益覆盖风险”原则&#xff0c;对于…

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略

暗黑4可以搬砖吗&#xff1f;暗黑4怎么搬砖 搬砖攻略 暗黑破坏神4属于是暴雪旗下一款经典游戏IP&#xff0c;在全世界有着广泛的玩家群体&#xff0c;更是在今年暴雪国服宣布回归之后&#xff0c;吸引了一大批新玩家加入。今天小编就为大家带来暗黑4的详细搬砖教程。 现在我们…

【工作篇】软件工程师的知识基础(持续更新)

目录 1. linux 知识篇 1. linux 知识篇 1. Linux API 是什么 Linux API 是指 Linux 操作系统 提供的应用程序接口&#xff0c;用于与操作系统进行交互。它包含了一系列的函数、系统调用、库函数和数据结构&#xff0c;用于实现各种系统级的操作&#xff0c;如文件操作、进程…

“打工搬砖记”中首页的功能实现(一)

文章目录 打工搬砖记秒薪的计算文字弹出动画根据时间数字变化小结 打工搬砖记 先来一个小程序首页预览图&#xff0c;首页较为复杂的也就是“秒薪”以及弹出文字的动画。 已上线小程序“打工人搬砖记”&#xff0c;进行预览观看。 秒薪的计算 秒薪计算公式&#xff1a;秒薪 …

umi搭建react项目

UMI 是一个基于 React 的可扩展企业级前端应用框架&#xff0c;提供路由、状态管理、构建和部署等功能&#xff0c;可以帮助开发者快速构建复杂的单页面应用&#xff08;SPA&#xff09;和多页面应用&#xff08;MPA&#xff09;。它与 React 的关系是&#xff0c;UMI 构建在 R…

linux系统修改网卡名称

说明&#xff1a; 因操作过程需要停用网卡&#xff0c;导致ssh远程连接不上&#xff0c;需要控制台登录操作。 测试环境&#xff1a; CentOS7.9、8.2虚拟机 Suse15 SP4虚拟机 操作步骤&#xff1a; 方法一&#xff1a; 1、 查看网卡当前名称及状态 ip a2、 将网卡状态从启用…

PHP黑魔法之md5绕过

php本身是一种弱语言,这个特性决定了它的两个特点: 输入的参数都是当作字符串处理变量类型不需要声明,大部分时候都是通过函数进行类型转化php中的判断有两种: 松散比较:只需要值相同即可,类型不必相同,不通类型比较会先转化为同类型,比如全数字字符串和数字比较,会比…

在线音乐系统

文章目录 在线音乐系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目&#xff08;9.9&#xffe5;带走&#xff09; 在线音乐系统 一、项目演示 音乐网站 二、项目介绍 基于springbootvue的前后端分离在线音乐系统 登录角色 : 用户、管理员 用…

曲线救国:window 安装 docker

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

bugfix:遇见“隐形字符”:ⅰ与i的编码迷局

前言 在软件开发的世界里&#xff0c;遇到各种奇奇怪怪的bug是在所难免的。今天&#xff0c;我就遭遇了一个看似简单实则棘手的问题——用户反馈账号无法登录&#xff0c;系统一直提示“账号不存在”。一番抽丝剥茧后&#xff0c;我发现问题竟然出在一个不起眼的字符上&#x…