JMeter如何实现参数名称和个数动态变化的接口请求

article/2025/9/18 17:01:24
  • 需求分析
    在做接口自动化和性能测试,经常会遇到一些请求参数是根据上一个请求结果,动态变化的参数个数,参数名可能相同,也可能为序列递增格式,参数个数可能为10、20个,这样就导致手工不好模拟该请求效果,需要进行封装自定义函数才能实现该效果

Jmeter是一款开源的性能测试工具,目前是行业内使用率最高的性能测试工具之一,Jmeter是使用JAVA语言开发的,本文介绍如何使用JAVA语言开发自己需要的扩展函数

  • 目前业界流行的两种开发模式,本文介绍第二种
    1、使用Jmeter二次开源环境,直接在org.apache.jmeter.functions包下面开发自己需要的函数,然后导出该jar包,替换Jmeter目录的ApacheJMeter_functions.jar文件
    2、直接在Maven 项目下开发自定义函数,然后打包,该方法、简单、高效

  • 开发思路
    1、使用Eclipse创建Maven 项目,配置Pom文件,引入扩展function所需的依赖包;
    2、创建类,然后继承AbstractFunction,实现四个主方法;
    3、对编写好的项目进行编译、打包
    4、把打包好的函数放到jmeter扩展目录,调用自定义函数,检查是否正确;
JDK环境Jmeter依赖包版本Maven仓库版本
1.84.03.5.3

一、新建Maven项目
1. File》New》Project,选择Maven》Maven Project,一直点击Next,此处Package包名一定要以.functions格式结束,否则开发出来的函数,Jmeter读取不到
在这里插入图片描述在这里插入图片描述
2. 配置Pom文件,Pom文件配置的Jmeter4.0版本,只要保存了Pom文件,系统就会自动下载和关联相应的jar包,Pom配置文件如下:
在这里插入图片描述
3. 保存Pom文件之后,系统会自动下载关联的依赖文件,如下图:
在这里插入图片描述在这里插入图片描述
4. 此时,由于对pom文件进行了修改,项目顶层会出现一把×,并且编译可能就会报错,需要执行Maven》Update Project更新外部依赖的Jar包

更新前:

在这里插入图片描述在这里插入图片描述

更新后,编译、打包正常:

在这里插入图片描述
二、编写自定义函数代码

要实现扩展Jmeter function,主要有两点


1. 实现function的类的package声明必须包含".functions"

JMeter设计让一些核心的类可以在非UI的方式下运行的时候能被加载进来,这些类会被优先加载。加载这些类的时候是通过命名规则来实现的。所有实现function的类必需包含".functions",所以我们自定义实现的类里必须包含".functions",比如如下申明的包名为:“jmeter.test.functions”

在这里插入图片描述
2. 首先在Jmeter.test.functions包下创建一个类,类名称为Save_Body_Data,需要继承AbstractFunction类,然后实现父类的四个方法

	  private static final List<String> desc = new LinkedList<String>();  /*该变量用来获取对参数值输入进行描述*/private static final String KEY = "__Media_Save_Body_Data";  /*这个是在函数助手上显示的函数名称*/static {desc.add("请输入第一个参数,类似variable=value,其中变量值可以写成变量格式,格式为${value},如果有多个参数,只需要用&连接"+ "类似variable=value&variable1=value1,第一个参数也可以置空,然后在Body data中填写也行");  desc.add("请输入第二个参数,该参数为变化的序列id,需要和jmeter中获取的变量名保持一致");  desc.add("请输入第三个参数,该参数为申明重复参递增参数名是否一样,填否则序列递增,如id[0]、id[1],不填则默认相同"); desc.add("请输入第四个参数,该参数值是用来在jmeter的Body_Data用来调用的,可以根据需要自定义,不填则默认为第二个参数名"); desc.add("请输入第五个参数,该参数为序列的连接字符比如%、&,不填则默认为&");/*该描述是针对函数的输入值进行描述*/}


3. 这里主要是定义变量desc、KEY 然后将描述显示到函数的参数描述中,如下图
在这里插入图片描述

setParameters函数作用就是获取函数输入框界面输入的值,将输入的值传递给execute

	public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {/*该函数用来获取输入的值*//*这里,后面的1,2分别指接受的最小参数个数为1,以及接受的最大参数个数为5*/checkParameterCount(parameters,1,5);values = parameters.toArray();/*将值存入类变量中,把接受到的参数装成array,然后用value[i]取出来 */}

getReferenceKey函数是提供一个在Jmeter函数助手显示的函数名称

	public String getReferenceKey() {/*本方法是提供一个在Jmeter函数助手显示的函数名称*/return KEY;}

getArgumentDesc函数用来获取对输入参数的描述

	public List<String> getArgumentDesc() {/*该函数用来获取对输入参数的描述*/return desc;}

execute函数用来实现获取输入的参数,然后通过对参数做需要的处理,该函数是开发中最重要的模块,并且进行最后执行,本次案例中主要实现的功能就是获取上一个接口返回的变量个数,然后对获取的变量名和参数值进行封装,最后通过字符连接成我们需要的效果

在这里插入图片描述

三、编译、打包
1. 编写代码完成,就可以进行编译、打包操作了,右键点击项目》Run As》Maven build
在这里插入图片描述
2. 在Goals中输入package,然后点击Apply》Run执行编译,打包操作
在这里插入图片描述
3. 编译打包完成,在target目录会生成一个jar包,如下图所示
在这里插入图片描述在这里插入图片描述
四、验证开发的函数是否正常
1. 首先把Jmeter.test.functions函数放到jmeter的\lib\ext目录
在这里插入图片描述
2. 然后启动jmeter,进入选项》函数助手对话框,选择_Media_Save_Body_Data,输入参数值,点击生成按钮(点了生成,系统就会生成一个函数,然后就相当于做了复制功能,可以拷贝到需要调用的地方)本次 只输入第二个参数值(该值必须为上一个接口定义的变量名称,稍后介绍如何使用该函数)
在这里插入图片描述
3. 首先需要在上一个接口添加JSON Extractor元件,用来获取变化的参数值
在这里插入图片描述
4. 然后使用BeanShell Sampler调用生成的函数,该sample执行成功之后,就会生成我们要的字段效果
在这里插入图片描述
5. 手工请求参数如下
在这里插入图片描述
6. 通过代码实现的参数只需要用参数名称=值然后每个参数使用&连接即可
在这里插入图片描述
7. 执行结果,如下:
在这里插入图片描述在这里插入图片描述

函数功能介绍

1、本次开发的函数实现的效果为通过传入5个参数,其中只有第二个为必填项,其它参数可以为空
2、第一个参数可以为空,当为空的时候,则需要把parameters中的参数和值在body data中手动写入,本次就是在body data中手工写入了不会变化的参数名,你也可以直接把这些参数传入到第一个参数,格式为funid=imp_provider&destfunid=pur_apply_provider&parentId=${apply_id}
&pagetype=import&eventcode=import&user_id=KaTeX parse error: Expected 'EOF', got '&' at position 7: {user}&̲dataType=json 3…{变量名}
6、第五个参数则为各个参数的连接方式,默认不填则为&

Jmeter.test.functions.jar下载方法见文章末尾介绍

完整源码如下:

在这里插入图片描述


如果文章对你有帮助,欢迎关注本人公众号,公众号与本平台文章同步,方便大家查阅,本人会持续推出与测试有关的文章,与大家分享测试技术,每一篇原创文章都是用心编写,杜绝抄袭复制


QQ技术交流群:加群请输入验证信息 CSDN
              在这里插入图片描述


微信二维码关注公众号:

在这里插入图片描述


关注之后,回复资源下载,即可获取本人共享的各种资源下载地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dkyHNY2D-1569554485737)(https://s1.51cto.com/images/blog/201908/06/2e62f8806e1dc1c391c4332ac7fd70b1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)]


http://chatgpt.dhexx.cn/article/SyUGRjYk.shtml

相关文章

【性能测试系列】JMeter核心技术:分布式压测和参数化

微信搜索关注公众号:测试小工,第一时间获取最新软件测试技术文章 JMeter分布式压测 1. 为什么要做分布式部署? 在上一篇文章中,我们提到了JMeter的线程启动和运行,是会占用系统资源的,一旦需要大并发,而JMeter单机部署配置不够,将会导致JMeter无法在规定时间内启动对…

接口测试参数化详解(Jmeter)

简介 接口测试是目前最主流的自动化测试手段&#xff0c;它组合不同的参数向服务器发送请求&#xff0c;接受和解析响应结果&#xff0c;通过测试数据的交换逻辑来验证服务端程序工作的正确性。我们在测试过程中需要考虑不同的输入组合&#xff0c;来覆盖不同的测试范围&#…

【JMeter】JMeter的工作原理

一、JMeter简介 JMeter是Apache组织开发的基于Java的开源的压力测试工具、接口测试工具 可以模拟高并发和多次循环的测试场景&#xff0c;能够对HTTP和FTP服务器进行压力和性能测试&#xff0c; 也可以对任何数据库进行同样的测试&#xff0c;具有可移植性 二、压测的原理 …

jmeter设置参数化

设置参数化方法有3种 第一种&#xff1a; 1.打开 jmeter&#xff0c;导入badboy录制的脚本 导入后记得选择“step”右键选择change controller -》逻辑控制器-》循环控制器或者简单控制器 注意&#xff1a;badboy 仅s适用于B/S架构的产品录制 因为内置浏览器的内核的兼容性问题…

JMeter接口测试_参数化

对应qq群号:616961231 简介: 环境: Mac OS home 目录类似windows 的自建目录 如: D:/test/id.txt 上篇内容介绍了jmeter的基本使用, 略微提了如何做参数化, 本篇对参数化做进一步深入讲解. Jmeter大概有以下几种参数化方法: 参数化方式使用场景1User Parameters适用于参…

Jmeter如何实现参数化用户,并且管理Cookie

谈到性能测试&#xff0c;经常需要对用户进行参数化&#xff0c;jemter工具参数化经常使用的一个元件就是CSV数据文件设置 一、 操作步骤 1. 首先建议大家创建一个规范的目录保存文件 目录作用data保存参数result保存结果script保存脚本 2. 如下图所示 设置目录的好处&#x…

jmeter + mysql数据驱动自动化测试

测试对象&#xff1a;前端web等后端接口mysql数据库 https://www.cnblogs.com/testfan2019/p/12124093.html 需求&#xff1a; 通过后端接口&#xff0c;对数据进行查询&#xff0c;对比查询返回内容和数据库内容是否一致。 Jmeter配置&#xff1a; 安装mysql驱动包 1. 下…

Jmeter参数化设置,多用户登录

一、模拟多用户登录场景 如登录模式如下图所示&#xff0c;登录界面中需要输入&#xff1a;用户名、密码、验证码 用户名以及密码均是固定值&#xff0c;不需要做处理。验证码需要处理一下&#xff0c;可以后台配置成固定值&#xff0c;具体可以找开发咨询。 在此场景中&#x…

【完结版】jmeter+ant+python自动化框架,且支持jenkins持续集成

前言&#xff1a;本文是实现jmeterantpython脚本的自动化测试框架&#xff0c;并且把整套部署在jenkins&#xff0c;通过jenkins的构建来出发脚本的运行&#xff0c;而且还会在jenkins上展示html报告。本文记录搭建框架的整个步骤&#xff0c;以及遇到的问题和记录解决办法。 一…

Jmeter之参数化

这里我用到的是微信的获取access_token接口。 https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appidAPPID&secretAPPSECRET 共有三个参数。接下来是设计接口测试用例 新建一个excel文件&#xff0c;输入标题&#xff0c…

常用的Jmeter参数化技巧总结,总有一个你不知道

说起接口测试&#xff0c;相信大家在工作中用的最多的还是Jmeter。 JMeter是一个100&#xff05;的纯Java桌面应用&#xff0c;由Apache组织的开放源代码项目&#xff0c;它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA 等多种协议。 在做…

Jmeter关联实现及参数化使用解析

这篇文章主要介绍了Jmeter关联实现及参数化使用解析,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、Jmeter介绍 一款融合接口、性能都能完成的测试工具纯JAVA开发的工具开源工具支持多种协议应该是测试业界…

Jmeter系列之参数化

VOL 132 08 2020-06 今天距2021年206天 这是ITester软件测试小栈第132次推文 点击上方蓝字“ITester软件测试小栈“关注我&#xff0c;每周一、三、五早上 07:30准时推送。 微信公众号后台回复“资源”、“测试工具包”领取测试资源,回复“21天打卡”一起学习成长&#xff0c;打…

Jmeter参数化---使用CSV 数据文件设置

上一篇写了jmeter做接口测试的流程&#xff08;链接&#xff1a;使用 jmeter 做接口测试&#xff09; 这一篇写的是如何参数化的做Jmeter接口测试 这次依然是获取access_token的接口&#xff0c;相关文档详询&#xff1a;(https://developers.weixin.qq.com/doc/offiaccount/…

Jmeter参数化--后置处理器之正则表达式提取器

在接口测试中&#xff0c;很多都需要依赖前一个请求的响应数据放到后一个请求的请求数据中来&#xff0c;在Jmeter中提供了正则表达式提取器来提取响应数据中的片段 本次使用的实例是微信公众号的客服发消息&#xff0c;在这个接口中&#xff0c;需要用到access_token接口返回…

jmeter java csv_Jmeter之csv参数化

Jmeter之csv参数化 创建数据源csv文件 在线程组中添加CSV Data Set Config 1、添加CSV Data Set Config 图 1 添加CSV Data Set Config 2、配置CSV Data Set Config 图 2 配置CSV Data Set Config Filename: 指保存信息的文件目录&#xff0c;可以相对或者绝对路径。否则会在jm…

Jmeter之数据参数化方法汇总

一、什么是参数化 Jmeter参数化是指将脚本中的某些需要输入数据使用参数来代替&#xff0c;在脚本运行时指定参数的取值范围和规则。脚本在运行时就可以根据需要选取不同的参数值作为输入。 常用的Jmeter的参数化请求&#xff0c;包括以下几种方式&#xff1a; 用户参数用户…

Jmeter参数化的方式

拿微信公众平台获取token-创建标签接口举例&#xff1a;微信公众平台 一、正则表达式提取参数 1、获取token后&#xff0c;使用后置处理器-正则表达式提取器&#xff0c;提取返回的token值 2、创建标签接口引用token参数 二、用户参数 1、选中线程组添加前置处理器&#xff…

JMeter参数化4种实现方式

1 参数化释义 什么是参数化&#xff1f;从字面上去理解的话&#xff0c;就是事先准备好数据&#xff08;广义上来说&#xff0c;可以是具体的数据值&#xff0c;也可以是数据生成规则&#xff09;&#xff0c;而非在脚本中写死&#xff0c;脚本执行时从准备好的数据中取值。 参…

移动端适配

移动端适配是指在不同尺寸的手机设备上&#xff0c;页面能相对达到合理的展示&#xff08;响应式&#xff09;或者保持统一效果的等比缩放&#xff08;看起来差不多&#xff09;。本文介绍了移动端适配中需要掌握的基本概念和移动端页面开发中常用的适配方案。 一、基本概念 …