Jmeter参数传递方式(token传递,接口关联等)

本文介绍了如何在JMeter中进行参数传递,包括线程内使用正则表达式提取器和JSON提取器,以及跨线程组间的参数传递通过BeanShell后置处理器实现。讲解了提取器的配置细节和示例,帮助理解接口测试中的数据依赖处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

Jmeter的参数传递从线程组的维度分为线程组内和多个线程组之间的传递,因为每个线程组之间是独立运行的,所以多个线程组之间传递需要用到beashell后置处理器将提取的参数设置为全局变量。

适用场景

当我们在做接口测试或功能测试的时候,需要获取登录接口的token才能继续访问其他接口,或者接口之间有数据依赖关系,比如接口B的输入需要依赖接口A的返回字段。

参数传递分类

线程内参数传递

线程组内的参数传递可以通过正则表达式提取器和json提取器。

正则表达式提取器

此元素将在其作用域中的 请求之后执行,应用正则表达式、提取请求的值、生成模板字符串并将结果存储到给定的变量名称中。
在这里插入图片描述

组件说明
● 引用名称:存储匹配结果的变量名称,可以是一个值也可以是一组值
● 正则表达式:匹配内容的正则表达式,正则表达式里面可以有多个正则
● 模板:正则表达式提取器类型,样式为: n n n,模板可自由组合,拼接组成新的字符串内容。

  1. 模板为 0 0 0,则为整个表达式匹配到的内容;
  2. 模板为: 1 1 1,则对应正则表达式中的第一个小括号内()匹配的内容;
  3. 模板为 2 2 2,则对应正则表达式中的第二个小括号()匹配的内容;
  4. 模板为 1 1 1 2 2 2,则把2个()所匹配的内容拼接起来, 1 1 1aa 2 2 2拼接两个变量的内容,并在中间加上aa
    ● 匹配数字:-1代表取全部数据,0代表随机取值,1代表取第1个数据,2代表取第2个数据,正数N代表取第N个
    ● 缺省值:找不到匹配时的值

在这里插入图片描述

json提取器

JSON 后处理器使用 JSON PATH 语法从 JSON 响应中提取数据。此后处理器与正则表达式提取器非常相似。它必须作为 HTTP 采样器或任何其他具有响应的采样器的子级。
在这里插入图片描述
在这里插入图片描述

组件说明
● 变量名:存储提取的变量名字
● Json Path Expressions:Json Path 表达式,返回匹配的结果
● Match Numbers: 匹配的数量,如果json路径返回多个结果:0代表随机获取;1代表获取第1个数据;N代表第N个结果,如果N大于匹配数,使用默认值;-1代表获取所有数据
● Compute concatenation var (suffix_ALL):是否统计所有,即将匹配到的所有值保存为变量_ALL。
● Default Values: 没有匹配值时的提示信息

Json Extractor 提取到的值会存储在变量里,使用方法和普通变量一样,通过${}引用Json Extractor 的变量即可。Json Extractor存储的变量名是基于提取器中变量名称扩展的,建议通过添加DebugSampler获取Json Extractor实际存储值的变量名。
示例
1、设置变量名、Json Path 表达式
2、同线程组内添加新的http请求,设置参数变量
login_name的取值设置为json提取器提取的变量
在这里插入图片描述

3、执行测试计划,查看结果树
在这里插入图片描述

多线程组之间参数传递

BeanShell后置处理器

线程组之间的参数传递需要额外用到BeanShell后置处理器。
后置处理器在采样器后应用,它们应用于同一作用域中的所有采样器,为了确保后处理器仅应用于特定采样器,需要将其添加为采样器的子级。
后置处理器整体思路和我们写代码差不多,即:
1.提取需要获取的字段
2.把它赋值给一个变量a,为了在其他线程组也能获取到这个变量
3.如果后续接口需要用到该变量,直接引用这个变量a

Beanshell传参方式
1、内置变量vars和props
⚠️:
vars 只能在当前线程内使用,props 可以跨线程组使用;
vars 只能保存 String 或者 Object,props 是 Hashtable 对象。

//同线程组
vars :操作 jmeter 变量,它是测试用例与 BeanShell 交互的桥梁,常用方法:

vars.get(String key):从jmeter 中获得变量值
vars.put(String key,String value):数据存到 jmeter 变量

//跨线程组
props :操作 jmeter 属性,该变量引用了 JMeter 的配置信息,可以获取Jmeter
的属性,它的使用方法与 vars 类似,但是只能 put 进去 String 类型的值,而不能是一个对象。

props.get("START.HMS");START.HMS 为属性名,在jmeter.properties 中定义
props.put("key","value");

//beanshell语句示例
String str =vars.get("token");
props.put("newToken",str);

vars和props都有put和get方法 ,但是由于我们要操作的是跨线程组的,所以只能使用props进行put值。
2、函数

//跨线程组设置变量,注意此处的key不要写成“key”
${__setProperty(key,value)}

//跨线程组引用变量
${__P(key)}//只需要变量名就可以

${__P(变量名)} 基本等同于${__property(变量名)}

示例:
${__property(init,start,10)} 变量名为init, 默认值为10,同时会将10默认传给start这个变量,start可进行再使用 ${start}

P和property的区别就是是否将第一个变量的值存储到另外一个变量中

示例
1、添加后置处理器
2、编写beanshell脚本,传递参数
在这里插入图片描述

3、添加用户管理线程组,添加更新用户http请求
4、引用全局变量
在这里插入图片描述

设置接口入参"token"的取值为后置处理器处理的变量userName

5、执行测试计划,查看结果树
在这里插入图片描述

### JMeter 参数传递的方法 在性能测试工具 JMeter 中,参数传递是一种常见的需求,用于模拟真实场景下的动态数据交互。以下是几种常用的参数传递方法及其具体实现: #### 1. **使用 `vars` 和 `props`** - 在同一线程组中,可以通过内置变量 `vars` 来操作 JMeter 变量[^2]。它提供了两个主要方法: - `vars.get(String key)`:从 JMeter 中获取指定键的变量值。 - `vars.put(String key, String value)`:将数据存储到 JMeter 变量中。 - 跨线程组时,则需使用 `props`,其功能类似于全局变量表[^3]。需要注意的是,`props` 支持的数据类型仅限于字符串(String),无法存储对象。 - 示例代码片段展示如何利用 Beanshell 前置处理器完成跨线程组的参数传递: ```java String str = vars.get("token"); props.put("newToken", str); ``` #### 2. **通过 CSV 文件读取变量** - 利用 JMeter 的配置元件——CSV 数据集配置(CSV Data Set Config),可以从外部文件加载测试所需的数据[^4]。此方法适用于批量导入大量测试数据的情况。 - 设置步骤包括指定文件路径、字符编码以及定义各字段对应的变量名。 - 使用 `${变量名}` 即可在 HTTP 请求或其他组件中引用这些变量。 #### 3. **借助正则表达式提取器** - 当前一个请求返回的结果需要作为后续请求的一部分输入时,可以采用正则表达式提取器来捕获特定模式的内容并将其转换成可用的参数[^5]。 - 关键配置项解释如下: - 引用名称:自定义变量标识符; - 正则表达式:描述目标数据结构的形式化规则; - 模板:指明希望保留哪部分匹配结果,默认为 `$1$` 表示第一个分组; - 匹配编号:决定选取哪一个具体的匹配实例,“-1”代表全选; - 默认值:当没有任何符合条件的结果时所采取的动作。 #### 4. **运用 JSON 提取插件处理复杂格式** 对于现代 Web 应用程序而言,JSON 成为了主流的数据交换媒介之一。因此,在某些情况下可能还需要额外安装第三方扩展库以便更好地解析这种类型的响应体内容。例如 JsonPath PostProcessor 就能够方便快捷地定位嵌套层次较深的目标节点,并自动赋给新的环境变量供下游消费。 --- ### 总结 综上所述,JMeter 提供了多种灵活有效的机制帮助用户解决不同层面的参数共享难题。无论是简单的静态映射还是复杂的动态关联都可以找到合适的解决方案加以应对。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值