千家信息网

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

发表于:2024-10-23 作者:千家信息网编辑
千家信息网最后更新 2024年10月23日,需求分析在做接口自动化和性能测试,经常会遇到一些请求参数是根据上一个请求结果,动态变化的参数个数,参数名可能相同,也可能为序列递增格式,参数个数可能为10、20个,这样就导致手工不好模拟该请求效果,需
千家信息网最后更新 2024年10月23日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安全错误 数据库的锁怎样保障安全 c查询数据库并返回表 杭州系统软件开发要多少钱 网络技术导论期末考试题 京东方智造软件开发工程师面试题 重庆工控软件开发多少钱 数据库文件包含什么 计算机网络技术需要学英语 electron 数据库系统 河源软件开发学校 做一个上位机软件开发 软件开发 技术总结报告 数据库应用技术概念 水管服务器 怎样取消浪潮服务器的开机密码 美丽好看又简单的网络安全手抄报 用命令行创建数据库的主数据逻辑 互联网科技创新必须利国利民 量化软件开发前景 管家婆数据库安装完还是登录不上 无线网络安全设置怎么修改 惩治网络安全工作 wincc服务器管理不可用 网络安全手抄报上写什么 从网络安全的角度考虑网络产品 数据库对比教程 专用软件开发工具阶段 根据罗斯文数据库的资料 剑网三进不去服务器一直正在登录 上海北斗时钟同步服务器 太阳棋牌软件开发
0