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);/*** 线程主要执行方法* 编写主要测试代码*/@Overridepublic 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();//设置取样器datasrResult.setSamplerData("请求body");srResult.setDataType(SampleResult.TEXT); //设置响应codesrResult.setResponseCode("响应code");//设置响应内容srResult.setResponseMessage("响应内容");srResult.setResponseData("响应内容", null);//设置取样是否成功,true为成功,false为失败srResult.setSuccessful(true);return srResult;}/*** 线程执行前,执行此方法* 编写执行前,需要提前当初使化代码,如登陆,建立连接等*/@Overridepublic void setupTest(JavaSamplerContext context) {LOG.warn("线程执行前,执行1次setupTest");}/*** 线程结束时,执此行方法* 一般线程后,需要释放的代码,如退出,关闭资源等*/@Overridepublic void teardownTest(JavaSamplerContext context) {LOG.warn("线程结束时,执行1次teardownTest");}/*** 设置java请求界面默认参数*/@Overridepublic 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方法

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D,点云下采样

文章目录 一、随机采样1、算法原理2、步骤二、格点采样格点采样的特点三、均匀采样1、类似体素网格采样2、固定间隔采样3、最远点采样四、曲率采样曲率采样的特点:参考资料:对于大规模点云处理而言,直接对点云进行特征提取能较好地保留三维结构信息。但由于点云的无序性,直…

flutter开发实战-log日志存储zip上传,发送钉钉机器人消息

flutter开发实战-log日志存储zip上传,发送钉钉机器人消息 当我们需要Apk上传的时候,我们需要将日志打包并上传到七牛,上传之后通过钉钉通知我们日志下载地址。 这里我使用的是loggy来处理日志 一、引入loggy日志格式插件 在工程的pubspec.…

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

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

Flutter 中的 CupertinoAlertDialog 小部件:全面指南

Flutter 中的 CupertinoAlertDialog 小部件:全面指南 在Flutter中,CupertinoAlertDialog是用于在iOS风格的应用中显示警告或提示信息的模态对话框。它以其圆角卡片和模糊背景为特点,为用户提供了一个简洁而直观的交互界面。CupertinoAlertDi…

IT行业找工作十面十败,不妨试试鸿蒙开发岗~

近期某脉上看到这样一则帖子,讨论的非常激烈! 相信也有不少人有和他这情况类似,像他这种失业的状态,近两年大家或多或少都深有体验。由于互联网行业进过了十几年的快速发展,从2G→3G→4G→5G,在这个期间人们…

c++ 获取机器码

看到网上代码代码都没什么好的&#xff0c;自己备用一个 #include <iostream> #include <string> #include <sstream> #include <iomanip> #include <Windows.h> #include <iphlpapi.h> // 包含这个头文件以获取 PIP_ADAPTER_INFO #inclu…

elasticsearch-head 源码运行

1、下载安装nodejs 地址&#xff1a;Node.js — Run JavaScript Everywhere 2、git下载 elasticsearch-head 源码 地址&#xff1a;GitHub - mobz/elasticsearch-head: A web front end for an elastic search cluster 3、使用cmd 进入 elasticsearch-head 目录 4、依次执…

嵌入式学习-M4的基本定时器

基本介绍 框图分析 时钟选择 计数器结构 开启重装载值寄存器的影子寄存器的工作时序图 未开启重装载值寄存器的影子寄存器的工作时序图 更新事件以及中断 相关寄存器 相关库函数

Cesium+山海鲸:可视化技术的完美融合

在当今数字化浪潮中&#xff0c;可视化技术已经成为各个行业提升效率和优化决策的关键。特别是在地理信息系统&#xff08;GIS&#xff09;和数字孪生领域&#xff0c;这种技术的重要性更加凸显。而山海鲸可视化与Cesium的融合&#xff0c;无疑是这一领域的重大突破。 首先&am…

【Spring】BeanFactory源码翻译

package org.springframework.beans.factory;import org.springframework.beans.BeansException; import org.springframework.core.ResolvableType; import org.springframework.lang.Nullable;/*** The root interface for accessing a Spring bean container.* 用于访问Spri…

量化交易:Dual Thrust策略

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; Dual Thrust策略起源于20世纪80年代&#xff0c;由美国著名交易员和金融作家Larry Williams首次提出。这一策略的核心思想是通过捕捉市场中的短期波动来实现盈利。Larry Williams通过多年的研究和实践&#xff0c;发…

智能EDM邮件群发工具哪个好?

企业之间的竞争日益激烈&#xff0c;如何高效、精准地触达目标客户&#xff0c;成为每个市场战略家必须面对的挑战。在此背景下&#xff0c;云衔科技凭借其前沿的AI技术和深厚的行业洞察&#xff0c;匠心推出了全方位一站式智能EDM邮件营销服务平台&#xff0c;重新定义了邮件营…

[ECE] SRAM DRAM

SRAM&#xff08;Static Random-Access Memory&#xff0c;静态随机存取存储器&#xff09;和DRAM&#xff08;Dynamic Random-Access Memory&#xff0c;动态随机存取存储器&#xff09;是两种主要的随机存取存储器技术&#xff0c;它们在计算机和其他电子设备中扮演着重要的角…

2024OD机试卷-字符串序列判定 (java\python\c++)

题目:字符串序列判定 题目描述 输入两个字符串 S 和 L ,都只包含英文小写字母。S长度 ≤ 100,L长度 ≤ 500,000。判定S是否是L的有效子串。 判定规则:S 中的每个字符在 L 中都能找到(可以不连续),且 S 在L中字符的前后顺序与 S 中顺序要保持一致。(例如,S = ” ace…

StringBuilder

demo1 描述&#xff1a; 主要演示了StringBuilder类的使用。 首先创建一个空的StringBuilder对象s。 使用System.out.println()方法打印对象s&#xff0c;输出结果为""&#xff08;空字符串&#xff09;。 调用StringBuilder的append()方法多次&#xff0c;将字符串…

半小时搞懂STM32面经知识——RCC

1. 时钟的概念 时钟是由电路产生的具有周期性的脉冲信号&#xff0c;相当于单片机的心脏&#xff0c;要想使用单片机的外设必须开启时钟。 时钟对单片机有什么作用&#xff1f; 1. 驱动外设的本质是寄存器&#xff0c;而寄存器需要时钟触发才能改写值。 2. 时钟频率越高&#…

安全风险 - 如何解决 setAccessible(true) 带来的安全风险?

可能每款成熟的金融app上架前都会经过层层安全检测才能执行上架&#xff0c;所以我隔三差五就能看到安全检测报告中提到的问题&#xff0c;根据问题的不同级别&#xff0c;处理的优先级也有所不同&#xff0c;此次讲的主要是一个 “轻度问题” &#xff0c;个人认为属于那种可改…

FinnConverter格式转换工具

FinnConverter简介 1. 简洁的操作界面 2. 支持多种格式相互转换 支持word转pdf&#xff1b;ppt转pdf&#xff1b;raw格式转png/jpng…&#xff1b;其他格式相互转换 2.1 输入格式支持 bmp、cr2、cr3、crw、cur、dcr、dng、doc、docx、gif、ico、jpeg、jpg、kdc、mos、nef、…

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

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

LeetCode hot100-39-N

101. 对称二叉树给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。做不出来哇&#xff0c;递归一生之敌 普通的对一棵树的递归遍历根本没办法只接比较左子树的左和右子树的右这样来比较&#xff0c;所以这题比较巧妙的是把这棵树当做两棵树一样去遍历比较。 官方…