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

news2025/1/1 7:54:33

一、引言

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 = "";

    //用来定义函数的主体,即函数的结果由该方法来返回
    @Override
    public 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;
    }

    //用来接收和处理用户调用函数时所传入的参数值
    @Override
    public void setParameters(Collection<CompoundVariable> arg0) throws InvalidVariableException {
        checkParameterCount(arg0,2);
        Object[] data = arg0.toArray();
        username = ((CompoundVariable)data[0]).execute();
        sex = ((CompoundVariable)data[1]).execute();
    }

    //用来定义函数的名称
    @Override
    public String getReferenceKey() {
        return key;
    }

    //用来定义函数的参数列表
    @Override
    public 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.coloradmin.cn/o/1547100.html

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

相关文章

网上国网App启动鸿蒙原生应用开发,鸿蒙开发前景怎么样?

从华为宣布全面启动鸿蒙生态原生应用一来&#xff0c;各种各样的新闻就没有停过&#xff0c;如&#xff1a;阿里、京东、小红书……等大厂的加入&#xff0c;而这次他们又与一个国企大厂进行合作&#xff1a; 作为特大型国有重点骨干企业&#xff0c;国家电网承担着保障安全、经…

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

第五章 深度学习 二、推荐系统 2. 协同过滤及实现 2.1 基于物品的协同过滤推荐技术(评分) 2.2 基于物品的协同过滤算法(Item_CF) 2.3 基于用户的协同过滤算法&#xff08;user-based collaboratIve filtering&#xff09; 2.4 基本原理 2.5 ICF 计算物品之间的相似度&#…

Set和Map数据结构

Set和Map数据结构理解 Set&#xff1a; 1、es6新的数据结构&#xff0c;类似数组&#xff0c;但成员唯一 2、实例属性&#xff1a;Set.prototype.size返回Set实例的成员总数 3、操作方法&#xff1a;add、delete、has、clear 4、遍历操作&#xff1a;forEach、keys、values、en…

求两个单链表的差集

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 但行前路&#xff0c;不负韶华&#…

搭建Hadoop HA

目录 前言 搭建前准备 搭建 前言 Hadoop是一个由Apache基金会所开发的分布式系统基础架构&#xff0c;它允许用户在不了解分布式底层细节的情况下开发分布式程序&#xff0c;充分利用集群的威力进行高速运算和存储。Hadoop主要解决大数据存储和大数据分析两大核心问题&…

机器学习(二)

线性模型: 离散转为连续的变换: 检查是否有“序”的变化&#xff0c;若有“序”&#xff0c;则连续化&#xff1b;否则&#xff0c;转化为k维向量 最小二乘解: 多元线性回归: 广义线性模型: 线性判别分析: 由于将样例投影到一条直线(低维空间)&#xff0c;因此也被视为一种&q…

excel统计分析——协方差分析基本原理

参考资料&#xff1a;生物统计学 方差分析中&#xff0c;要求除试验因素外的其他条件保持在相同水平上才能对实验结果的差异显著性进行比较&#xff0c;然而有些非试验因素很难或不可能人为控制&#xff0c;此时如果使用方差分析法推断处理其差异显著性&#xff0c;往往会导致错…

深度学习-数据归一化与Batch Normalization

文章目录 数据归一化与Batch Normalization一、经典机器学习的归一化算法1.经典机器学习归一化方法回顾1.1 0-1标准化方法1.2 Z-Score标准化 2.经典机器学习归一化算法在深度学习中的实践3.Z-Score数据归一化的局限3.1 Zero-Centered特性消失3.2 Zero-Centered Data的作用局限 …

【AI】使用Azure OpenAI创建自己的AI应用!

【AI】使用Azure OpenAI创建自己的AI应用! 目录 【AI】使用Azure OpenAI创建自己的AI应用!创建工作区模型介绍部署模型API参数计算Token使用Python SDK调用补全模型调用对话模型流式调用异步调用提示技巧生成对话分类推荐超级课程: Docker快速入门到精通Kubernetes入门到大师…

Golang-MAP源码学习、扩容机制等

前言 map是golang中常用的一个基本数据结构&#xff0c;继上篇的channel源码学习之后&#xff0c;本文学习map的源码相关。 基础知识点 此部分参考自 https://www.zhihu.com/tardis/zm/art/423008350?source_id1003 map的用法 通过make初始化分配容量&#xff0c;通过m[k…

鸿蒙操作系统-初识

HarmonyOS-初识 简述安装配置hello world1.创建项目2.目录解释3.构建页面4.真机运行 应用程序包共享包HARHSP 快速修复包 官方文档请参考&#xff1a;HarmonyOS 简述 1.定义&#xff1a;HarmonyOS是分布式操作系统&#xff0c;它旨在为不同类型的智能设备提供统一的操作系统&a…

OpenHarmony内核编程实战

在正式开始之前&#xff0c;对于刚接触OpenHarmony的伙伴们&#xff0c;面对大篇幅的源码可能无从下手&#xff0c;不知道怎么去编码写程序&#xff0c;下面用一个简单的例子带伙伴们入门。 ▍任务 编写程序&#xff0c;让开发板在串口调试工具中输出”Hello&#xff0c;Open…

程序猿成长之路之数据挖掘篇——数据挖掘介绍

随着java的发展&#xff0c;数据挖掘也变得逐渐热门&#xff0c;我们随手打开一个购物网站&#xff0c;首先映入眼帘的便是五花八门的推荐的物品&#xff0c;又如我们逛抖音、快手&#xff0c;就在我们上下刷屏的过程中&#xff0c;系统就会不停的推荐新的视频内容过来。不论是…

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

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

【python】flask模板渲染引擎Jinja2,通过后端数据渲染前端页面

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【医学实体识别】从糖尿病论文和临床指南中,做关键信息分类

从糖尿病论文和临床指南中&#xff0c;做关键信息分类 实体识别输入输出疾病实体治疗实体常规实体 算法设计BiLSTM-CRF 论文BiLSTM-CRF 应用BiLSTM-CRF VS 大模型 构建知识图谱 实体识别 比赛&#xff1a;https://tianchi.aliyun.com/competition/entrance/231687/information…

以太网PHY,MAC及其通信接口介绍

本文主要介绍以太网的 MAC 和 PHY&#xff0c;以及之间的 MII&#xff08;Media Independent Interface &#xff0c;媒体独立接口&#xff09;和 MII 的各种衍生版本——GMII、SGMII、RMII、RGMII等。 一&#xff1a;简介 从硬件的角度看&#xff0c;以太网接口电路主要由MA…

下载最新VMware,专业版本

VMware - Delivering a Digital Foundation For BusinessesRun any app on any cloud on any device with a digital foundation built on VMware solutions for modern apps, multi-cloud, digital workspace, security & networking.https://www.vmware.com/ 官网地址

Mysql新建数据库报错1044

mysql创建数据库报错 1044 - Access denied for user ‘root‘%‘ to database ‘XXX‘ 解决参考&#xff1a;MySQL新建表&#xff1a;1044 - Access denied for user ‘root‘%‘ to database ‘XXX‘终极解决方案_cannot create table [sheet]: 1044 - access denied -CSDN博…

Git学习(一)基于本地操作:Git初识、Git安装(Linux-ubuntu)、Git 基本操作、分支管理

目录 Git 初识 Git 安装&#xff08;Linux-ubuntu&#xff09; Git 基本操作 创建 Git 本地仓库 配置 Git 认识工作区、暂存区、版本库 添加文件 查看 .git 文件 修改文件 版本回退 撤销修改 情况一&#xff1a;对于工作区的代码&#xff0c;还没有 add 情况二&am…