jmeter二次开发发送java请求_保姆级教程!!!

一、引言

JMeter是Apache基金会开发的一款开源性能测试工具,广泛应用于软件性能测试领域。它能够模拟多线程并发用户对应用程序进行压力测试,以评估应用程序的性能和稳定性。然而,在实际使用过程中,用户可能会遇到需要发送Java请求的场景,例如测试Java Web应用程序或其他支持Java RESTful API的服务。本文将介绍如何在JMeter中发送Java请求,并给出一些实用的技巧和注意事项。

二、java请求简介

查阅以往资料,现探究出两种jmater发送Java请求的方式,第一种通过将自己打包的jar通过jmeter函数助手的方式引用到java请求中,第二种是通过java请求直接引入jar包的方式,通过添加Beanshell取样器打印日志的方式,查看返回的结果。现将两种方式分别介绍。

三、实操

3.1jmeter函数二次开发

3.1.1思路
  1. JMeter提供了接口给用户进行二次开发,其中接口可通过引入ApacheJMeter_components.jar、ApacheJMeter_core.jar两个包获取。(或许你看到别人介绍所要用的jar包会更多,其实正常开发就这两个,所以至少保证有这两个包即可)
  2. 开发的代码需要符合JMeter的规范:第一,新建的包名称必须是以 functions 结尾;第二,方法类需要继承AbstractFunction类,而AbstractFunction类中有四个要实现的函数,其中我们要实现的功能需要结合这四个函数实现。
3.2.2环境准备
3.2.2.1添加依赖包
  • 依赖的业务相关jar放到lib目录下
  • jmeter相关jar放到ext目录下
    • 两个jar包在JMeter安装目录下的\lib\ext 文件夹,在工程里新建一个lib目录,把jar包放进去,然后添加到项目工程里
      • ApacheJMeter_components.jar
      • ApacheJMeter_core.jar
3.2.2.2重写AbstractFunction类中的方法

创建的包以functions结尾,同时创建的类继承AbstractFunction类,并重写类中的方法;

3.2.2.3AbstractFunction类四个方法的简单介绍

函数概要说明:

3.2.3案例分享

新建java代码后,将java代码打包传入jmeterext目录下

package com.functions;import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.functions.AbstractFunction;
import org.apache.jmeter.functions.InvalidVariableException;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;import java.util.Collection;
import java.util.LinkedList;
import java.util.List;public class HelloFunction extends AbstractFunction {//在jmeter中,约定俗成要求函数的名称必须是以"__"开头。private final static String key = "__hello";private static List<String> params = new LinkedList<String>();static {params.add("请输入用户名");params.add("请输入性别: 男or女");}public String username = "";public String sex = "";//用来定义函数的主体,即函数的结果由该方法来返回@Overridepublic String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {String result = "";if(sex.equals("男")){result = username+",先生你好。";} else if (sex.equals("女")) {result = username+",女士你好。";}else {result = "无名氏你好,请问你是男是女?";}return result;}//用来接收和处理用户调用函数时所传入的参数值@Overridepublic void setParameters(Collection<CompoundVariable> arg0) throws InvalidVariableException {checkParameterCount(arg0,2);Object[] data = arg0.toArray();username = ((CompoundVariable)data[0]).execute();sex = ((CompoundVariable)data[1]).execute();}//用来定义函数的名称@Overridepublic String getReferenceKey() {return key;}//用来定义函数的参数列表@Overridepublic List<String> getArgumentDesc() {return params;}
}

重启jmeter,在函数助手中即可看到此java请求,示例如下

结果返回

3.2java请求二次开发

3.2.1实现目的
  • java方法打成jar包
  • jmeter二次开发调用该jar包方法
  • 响应结果保存为jmeter参数,供别的请求使用
3.2.2案例分享
3.2.2.1 java方法示例, 将以下方法打包
package com.gmrz.test;public class TestAdd {public int add(int a,int b){return a+b;}public static void main(String[] args) {TestAdd testAdd = new TestAdd();System.out.println(testAdd.add(1,7));}
}
3.2.2.2 新建一个maven,用于二次开发

导入jmeter二次开发核心jar包和加法jar包

3.2.2.3写个简单类,调用加法方法
package com.gmrz.jmeter;import com.gmrz.TestAdd;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jmeter.threads.JMeterVariables;public class JmeterSend1 extends AbstractJavaSamplerClient{public void setupTest(JavaSamplerContext context){System.out.println("start");}public void teardownTest(JavaSamplerContext context) {System.out.println("end");}public SampleResult runTest(JavaSamplerContext context) {TestAdd t = new TestAdd();SampleResult s = new SampleResult();s.sampleStart(); // 开始统计响应时间,取样器开始运行s.setSampleLabel("client"); //聚合报告里的lable名称JMeterVariables vars = JMeterContextService.getContext().getVariables();String first = context.getParameter("a"); //获取jmeter传递的参数String second = context.getParameter("b");Integer a = Integer.parseInt(first);Integer b = Integer.parseInt(second);try {vars.put("result", String.valueOf(t.add(a,b))); //jmeter参数变量名称s.setSamplerData("参数a:"+first+"\t参数b:"+second); //设置请求的数据,在查看结果树中可以看到s.setResponseCode("200");s.setResponseMessage("Success"); //没这个请求会变红s.setSuccessful(true);s.sampleEnd();return s;}catch (Exception e){e.printStackTrace();}s.setResponseCode("500");s.setResponseMessage("fail");return s;}public Arguments getDefaultParameters() {//提取jmeter传递的参数Arguments args = new Arguments();args.addArgument("a", "");args.addArgument("b", "");System.out.println("get Arguments");return args;}
}
3.2.2.4打好的jar包放入jmeter:/lib/ext 下

打开jmeter,此方法即为新加的java请求

返回此java请求的结果

四、总结

在本文中,我们详细介绍了如何在JMeter中发送Java请求,包括使用JMeter内置的Java请求处理器和编写自定义的Java代码来实现复杂的请求。

通过本文的教程,读者应该能够掌握JMeter发送Java请求的基本步骤和技巧。为了更好地理解和应用这些知识,建议读者在实际项目中尝试使用JMeter进行Java请求的发送,并根据实际情况进行调整和优化。

总而言之,JMeter是一款强大的性能测试工具,能够帮助开发人员和测试人员模拟真实用户的行为,对应用程序进行全面的性能测试。掌握JMeter发送Java请求的方法和技巧,将有助于提高软件质量和用户体验。希望本文能够为您提供有益的指导,祝您在性能测试领域取得更好的成果!

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

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

相关文章

RHCE实验-建立NFS服务器,使的客户端顺序共享数据

第一步&#xff1a;服务端及客户端的准备工作 # 恢复快照[rootserver ~]# setenforce 0​[rootserver ~]# systemctl stop firewalld​[rootserver ~]# yum install nfs-utils -y # 服务端及客户端都安装 第二步&#xff1a;服务端建立共享文件目录&#xff0c;并设置权限…

Vue3 新项目默认工程文件理解

Vue3 新项目默认工程文件理解 文章目录 Vue3 新项目默认工程文件理解0、工程文件结构图1、main.ts2、index.html源文件编译后 3、App.vue4、.d.ts 文件作用 0、工程文件结构图 1、main.ts // 引入 createApp 函数 import { createApp } from vue // 引入 style.css 文件&#…

【QT+QGIS跨平台编译】之九十五:【QGIS_App跨平台编译】—【错误处理:找不到标识符QwtPolarPoint】

文章目录 一、找不到标识符QwtPolarPoint二、原因分析三、错误处理一、找不到标识符QwtPolarPoint 报错信息如下: 二、原因分析 未找到QWT_POLAR_VERSION 从而执行的函数: mypMarker->setPosition( QwtPolarPoint( currentInfo.azimuth, currentInfo.elevation )

DevSecOps平台架构系列-微软云Azure DevSecOps平台架构

目录 一、概述 二、Azure DevOps和黄金管道 2.1 概述 2.2 Azure DevOps架构说明 2.2.1 架构及管道流程图 2.2.2 架构内容 2.2.2.1 Azure Boards 2.2.2.2 Azure Repos 2.2.2.3 Azure Test Plans 2.2.2.4 Azure Pipelines 2.2.2.5 Azure Application Insights 2.2.2.6…

浏览器https受信任证书生成——openssl颁发受信任证书

站点常常由于没有受信任的第三方CA机构颁发证书,使用https访问时,浏览器常常会弹出不安全的提示,为解决该问题,可以使用openssl颁发个人证书来解决该问题。 1openssl安装及使用方式参考:32.9 x509_OpenSSL 中文手册https://www.openssl.net.cn/docs/230.html2.本文章所有生…

java打家劫舍2(力扣Leetcode213)

打家劫舍2 力扣原题链接 问题描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈&#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装有相互连通的防盗系统&a…

相机显示储存卡未格式化怎么回事?怎么办

在摄影的学习和实践中&#xff0c;相机是我们记录美好瞬间的得力助手。然而&#xff0c;当相机突然提示储存卡未格式化时&#xff0c;这往往会让我们感到困惑和焦虑。本文将探讨相机显示储存卡未格式化的可能原因&#xff0c;并提供相应的解决方案。 图片来源于网络&#xff0c…

web自动化测试系列-selenium的运行原理和常用方法介绍(二)

目录 1.selenium的运行原理 2.常用方法介绍 接上文 &#xff1a;web自动化测试系列-selenium的安装和运行(一)-CSDN博客 在上文中我们编写了一段简单的代码 &#xff0c;可以驱动浏览器访问百度并搜索关键字 。这里我们再把这段代码再拿来加以说明 。 # 1. 导包 from selen…

搭建Spark单机版环境

在搭建Spark单机版环境的实战中&#xff0c;首先确保已经安装并配置好了JDK。然后&#xff0c;从群共享下载Spark安装包&#xff0c;并将其上传至目标主机的/opt目录。接着&#xff0c;解压Spark安装包至/usr/local目录&#xff0c;并配置Spark的环境变量&#xff0c;以确保系统…

数据分析 | pandas

主要数据结构&#xff1a; Series&#xff1a; Series 是一种类似于 Numpy 中一维数组的对象&#xff0c;它由一组任意类型的数据以及一组与之相关的数据标签&#xff08;即索引&#xff09;组成。 import pandas as pdprint(pd.Series([2, 4, 6, 8])) print(pd.Series([2, …

Python 全栈体系【四阶】(二十)

第五章 深度学习 二、推荐系统 1. 推荐算法介绍 1.1 个性化推荐算法 人口属性 地理属性 资产属性 兴趣属性 1.2 推荐算法分支 协同过滤推荐算法基于内容的推荐算法混合推荐算法流行度推荐算法 1.3 推荐算法 为推荐系统选择正确的推荐算法是非常重要的决定。目前为止…

基于springboot+vue调用百度ai实现车牌号识别功能

百度车牌号识别官方文档 结果视频演示 后端代码 private String getCarNumber(String imagePath, int count) {// 请求urlString url "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate";try {byte[] imgData FileUtil.readFileByBytes(imagePath);Stri…

机器学习笔记(4)—逻辑回归(Logistic Regression)

文章目录 逻辑回归&#xff08;Logistic Regression&#xff09;分类问题假说表示判定边界代价函数简化的成本函数和梯度下降多类别分类&#xff1a;一对多 逻辑回归&#xff08;Logistic Regression&#xff09; 分类问题 分类问题中&#xff0c;我们要预测的变量 y y y是一…

【数字图像处理】改变图像灰度级别

改变图像灰度级别 首先&#xff0c;对原始图像 O O O进行灰度级量化: q int ⁡ ( O 2 i ) 2 i , q\operatorname{int}\left(\frac{O}{2^{i}}\right) \times 2^{i}, qint(2iO​)2i, 灰度级别256&#xff0c;128&#xff0c;64&#xff0c;32&#xff0c;16&#xff0c;8&…

Qt 图形视图 /图形视图框架坐标系统的设计理念和使用方法

文章目录 概述Qt 坐标系统图形视图的渲染过程Item图形项坐标系Scene场景坐标系View视图坐标系map坐标映射场景坐标转项坐标视图坐标转图形项坐标图形项之间的坐标转换 其他 概述 The Graphics View Coordinate System 图形视图坐标系统是Qt图形视图框架的重要组成部分&#xf…

1.0 html(1)

html 一、基本介绍 1、定义&#xff1a;html是一种超文本标记语言&#xff0c;也是一种标识性语言&#xff08;不是编程语言&#xff09; 标记&#xff1a;记号&#xff08;绰号&#xff09; 超文本&#xff1a;就是页面内容可以包含图片、链接&#xff0c;音乐&#xff0c…

IBM:《2023IBM年报》

2024年3月12日&#xff0c;IBM分享了《2023IBM年报》。 报告节选&#xff1a; 在本财年&#xff0c;IBM 的收入为 619 亿美元&#xff0c;按固定汇率计算增长 3%&#xff0c;自由现金流为 112 亿美元&#xff0c;同比增长 19 亿美元。我们经历了对新 watsonx 平台日益增长的需…

ElasticSearch、java的四大内置函数式接口、Stream流、parallelStream背后的技术、Optional类

第四周笔记 一、ElasticSearch 1.安装 apt-get install lrzsz adduser -m es 创建用户组&#xff1a; useradd *-m* xiaoming(用户名) *PS&#xff1a;追加参数-m* passwd xiaoming(用户名) passwd xiaoming 输入新的 UNIX 密码&#xff1a; 重新输入新的 UNIX 密码&…

Spring Boot | Spring Boot的“核心配置“与“注解“

目录: Spring Boot的核心配置与注解 &#xff1a;1. 全局配置文件 ( application.properties / application.yaml&#xff1a;创建项目时候自动生成&#xff0c;其会被“自动导入”到“程序”中 )application.properties配置文件application.yaml 配置文件 (推荐使用)当value值…

GitLab更新失败(CentOS)

使用yum更新GitLab&#xff0c;出现如下错误提示&#xff1a; Error: Failed to download metadata for repo gitlab_gitlab-ce: repomd.xml GPG signature verification error: Bad GPG signature 编写如下脚本&#xff1a; for pubring in /var/cache/dnf/gitlab_gitlab-?…