千家信息网

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

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,需求分析在做接口自动化和性能测试,经常会遇到一些请求参数是根据上一个请求结果,动态变化的参数个数,参数名可能相同,也可能为序列递增格式,参数个数可能为10、20个,这样就导致手工不好模拟该请求效果,需
千家信息网最后更新 2026年11月03日Jmeter如何实现参数名称和个数动态变化的接口请求
  • 需求分析
    在做接口自动化和性能测试,经常会遇到一些请求参数是根据上一个请求结果,动态变化的参数个数,参数名可能相同,也可能为序列递增格式,参数个数可能为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.1. 实现function的类的package声明必须包含".functions"

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


1.2. 首先在Jmeter.test.functions包下创建一个类,类名称为Save_Body_Data,需要继承AbstractFunction类,然后实现父类的四个方法

      private static final List desc = new LinkedList();  /*该变量用来获取对参数值输入进行描述*/      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("请输入第五个参数,该参数为序列的连接字符比如%、&,不填则默认为&");          /*该描述是针对函数的输入值进行描述*/      }
  • 这里主要是定义变量desc、KEY 然后将描述显示到函数的参数描述中,如下图

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

    public void setParameters(Collection 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 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=${user}&dataType=json
        3、第二个参数为获取的变量名称,该名称一定要和jmeter中json path中定义的参数名一致,这样才能获取到jmeter中变化的参数
        4、第三个参数为判断重复变化的参数名称的格式是一样还是序列递增,比如id[0],id[1],默认不填相同,如果是序列递增,只需要填否

        5、第四个参数则是用来保存整个函数封装的字符串,默认不填则会把所有字符串封装到第二个参数中,填写了则封装在该参数中,需要在body data中调用该变量,调用方式为${变量名}
        6、第五个参数则为各个参数的连接方式,默认不填则为&

Jmeter.test.functions.jar下载方法见文章末尾介绍
完整源码如下:


   如果文章对你有帮助,可以在右下角点击关注功能,欢迎转发、拍砖,本人会持续推出与测试有关的文章,与大家分享测试技术,每一篇原创文章都是用心编写,杜绝抄袭复制,微信公众号与本平台文章同步,方便大家查阅


QQ技术交流群:加群请输入验证信息51CTO
              


微信二维码关注公众号:

            


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

参数 函数 输入 变量 开发 文件 名称 编译 变化 序列 格式 项目 生成 个数 效果 文章 封装 测试 接口 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网络科技 上海挚品互联网科技有限公司 互联网科技官网 互联网科技公司的优势 互联网属科技 互联网科技深圳 互联网科技与金融科技 上海互联网科技有限公司 礼当家互联网科技 远信互联网科技 赫美联合互联网科技 互联网金融和金融科技 中国最先进互联网科技公司 深圳市运趣互联网科技有限公司 阿里互联网科技公司 恒生互联网科技指数跳水 速维有品互联网信息科技(苏州)有限公司 广州富喜互联网络科技 半导体行业属于互联网高科技类吗 全球科技与互联网公司市值变化 互联网最新的科技有限公司 联恩商钥互联网科技有限公司 中正互联网科技招聘 浙南科技城互联网大厦建设工程 沐思想互联网科技有限公司 伍佰万互联网科技怎么赚钱 北京市互联网新科技 富国互联网科技002692 美国五大互联网科技公司市值多少 科技互联网公司两年变化
0