Jmeter自定义Java请求
一、需求背景
在日常压测过程中,有些请求逻辑比较复杂的时候,Jmeter 中自带的sample取样器不够灵活,或者性能就会比较低了,这个时候就可以自己写java代码实现自己的请求。
二、准备工作
1、创建Maven工程
2、引入Jmeter相关Jar包
其中ApacheJMeter_core和ApacheJMeter_java2个jar是自定义Jmeter请求的核心开发包,两个jar包的版本需要和你本地jmeter版本保持一致,防止因为版本不一致出现问题,unirest-java该jar包主要用于发送get、post请求
相关jar可以去 https://mvnrepository.com/ 查询引用
3、配置maven打包插件
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.3.0</version><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>
三、开始
1、创建Java测试类
新建一个类,类名为任意取,遵循Java命名规范即可,该类继承AbstractJavaSamplerClient类,AbstractJavaSamplerClient存在于ApacheJMeter_java.jar这个JAR包中,引用即可调用。
常用的4个方法如下:
setupTest(): 初始化方法,用于初始化性能测试时的每个线程;
getDefaultParameters(): 主要用于设置传入的参数;
runTest(): 为性能测试时的线程运行体;该方法在测试类继承AbstractJavaSamplerClient类时,必须实现的方法
teardownTest(): 测试结束方法,用于结束性能测试中的每个线程。
package com.apache.jmeter.functions;import kong.unirest.HttpResponse;
import kong.unirest.JsonNode;
import kong.unirest.Unirest;
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 java.io.Serializable;
import java.util.HashMap;/*** Created by YangWeiMin on 2021/12/6*/
public class PageQuery extends AbstractJavaSamplerClient implements Serializable {// 该部分主要设置一些静态变量,可以是接口请求参数或者其他变量private static final String env = "xxxxx";private static final String creatorUserCode = "xxxxxx";private static final Integer offset = xxxxx;private static final String releaseTimeFrom = "xxxxxxx";private static final String releaseTimeTo = "xxxxxx";private static final Integer size = xxxxxx;private static final String dynamicInfoCode = null;private static final String url = env + "/api/xxxxx/query";private static final String token = null;// 该部分代码主要设置Unirest连接池配置static {Unirest.config().concurrency(1000, 100);}// 该部分代码主要是用于设置参数显示,此处设置的参数可以在jmeter中展示@Overridepublic Arguments getDefaultParameters() {Arguments arguments = new Arguments();arguments.addArgument("env", env);arguments.addArgument("creatorUserCode", creatorUserCode);arguments.addArgument("offset", String.valueOf(offset));arguments.addArgument("releaseTimeFrom", releaseTimeFrom);arguments.addArgument("releaseTimeTo", releaseTimeTo);arguments.addArgument("size", String.valueOf(size));arguments.addArgument("dynamicInfoCode", dynamicInfoCode);arguments.addArgument("token", token);return arguments;}/*** 执行测试,测试的逻辑写在此处** @param context 请求参数* @return 请求结果*/@Overridepublic SampleResult runTest(JavaSamplerContext context) {SampleResult sampleResult = new SampleResult();sampleResult.sampleStart(); // 开启计时HashMap<String, Object> data = new HashMap<>();HashMap<String, String> headers = new HashMap<>();try {data.put("creatorUserCode", context.getParameter("creatorUserCode")); // context.getParameter功能是获取jmeter中填写的参数data.put("dynamicInfoCode", context.getParameter("dynamicInfoCode"));data.put("offset", context.getParameter("offset"));data.put("releaseTimeFrom", context.getParameter("releaseTimeFrom"));data.put("releaseTimeTo", context.getParameter("releaseTimeTo"));data.put("size", size);headers.put("Content-Type", "application/json");headers.put("Authorization", context.getParameter("token"));HttpResponse<JsonNode> response = Unirest.post(url).headers(headers).body(data).asJson();if (response.getStatus() != 200) {sampleResult.setSuccessful(false);}sampleResult.setResponseData(response.getBody().toPrettyString(), "utf-8");sampleResult.setResponseCodeOK();System.out.println("Response data==> " + response.getBody().toPrettyString());sampleResult.setSuccessful(true);} catch (Exception e) {System.out.println("请求失败:" + e.getMessage());sampleResult.setSuccessful(false);} finally {sampleResult.sampleEnd(); // 结束计时}return sampleResult;}
}
四、Jmeter运行
1、编译打包
相关代码编写完成后,使用Idea工具自带的Maven工具进行打包
打包成功后在相关jar在target目录下,将打好的jar包放到jmeter安装目录lib/ext目录下
2、Jmeter如何使用
此时,按照正常Jmeter使用流程,点击运行按钮,即可正常进行压测
五、小结
Jmeter是用java语言开发的,所以我们可以用java开发出代码,可以直接使用,希望大家可以学习到知识。
Jmeter自定义Java请求相关推荐
- jmeter java性能_jmeter之自定义java请求性能测试
写在前面 最近个人情绪不稳定.心情很不美丽,特别懒,没有博客和技术文章更新,这个文章也是迟到了一周多的时间,啰嗦完了,开始正题吧. 我们在实际做性能测试的时候,一般会采用jmeter.Lr进行测试,但 ...
- JMeter之Java请求
一.JMeter中Java请求是什么? Java请求属于JMeter里的取样器,简单使用跟Beanshell差不多,都能够实现运行一定的Java代码逻辑,但Java请求功能更强大. 为什么要用Java ...
- jmeter测试java接口测试_简单易学的测试攻略:JMeter测试Java请求示例
JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现,大家可以到官网下载源代码和查看相关文档. 关于使用JMeter进行JDBC数据库测试.HTTP请求接 ...
- jmeter重写java请求_jmeter之编写java请求-扩展Java Sampler
分类: JMeter实践(19) 版权声明:本文为博主原创文章,未经博主允许不得转载. 新浪围脖>79642549 有以下优势 脚本易维护 易调试 开发脚本周期短 不过网上扩展java请求文章 ...
- jmeter发送java请求-Mysql插入操作
代码编写粗糙,仅提供思路 一.运行效果 二.原理解释 操作环境:jmeter5.4 实现jmeter扩展需要的依赖包 jmeter\apache-jmeter-5.4\lib目录下:jorphan.j ...
- jmeter的java请求(socket接口)
socket简介:网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个十分流 ...
- jmeter的java请求参数设置_Jmeter中json数据参数化、断言设置
第一步:光标定位到测试计划上,右键菜单"添加" -> Threads(users) -> 线程组,如下图 第二步: 光标定位到线程组,右键菜单选择 "添加&q ...
- apachejmeter_java源码_自定义编写jmeter的Java测试代码
我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定义脚本的协议,比如"C Vuser","JavaV ...
- jmeter之java代码性能测试_松勤软件性能测试-自定义编写的Java测试代码在Jmeter中如何使用...
原标题:松勤软件性能测试-自定义编写的Java测试代码在Jmeter中如何使用 我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定 ...
最新文章
- eDrawings Pro 2020中文版
- Android6.0 keyguard锁屏加载流程分析
- gateway sentinel 熔断 不起作用_Sentinel 的一些概念与核心类介绍
- zookeeper命令行操作
- mysql5.6 二进制免编译安装
- python判断语句 if elif else(一分钟读懂)
- 车位编号lisp_cad自动编号插件
- php日程提醒,PHPOA日程安排系统,建立井然有序的工作计划
- C++求解一元三次方程的实根
- 唯美的英文短文!!!
- MyBatis14 缓存
- [UE4][Blueprint]虚幻4实现照相机拍照功能
- 解决Apple Watch 更新时出现红色感叹号「!」的问题
- goahead(嵌入式) webservice (3.3.0)运行goforms
- CSAPP datalab实验
- 矩阵的特征:主成分分析(PCA)
- 电话聊天狂人(java)
- Description Resource Path Location Type Call requires API level 5 (解决方法)
- 阿里云RDSDRDS初探
- NTFS、FAT32、exFAT这三种格式的区别