JMeter 正则表达式提取器(后置处理器取值)

本文介绍如何使用JMeter中的正则表达式提取器来获取动态生成的数据值,并通过两个实例展示了具体的配置方法。

JMeter的测试中,经常遇到上一步骤中生成的数据需要在下一个程序中使用到,这个时候,我们就需要在上一程序的页面中取得生成的值。

我们经常使用正则表达式提取器来进行处理。


例1如下:

       引用名称: tokenid(自己定义)

       正则表达式:<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="(.*?)">

       模板:$1$

       匹配数字(0代表随机):

       缺省值:


例2如下: 在生成的值是在cell中的时候,特别是有很多明细的。

       引用名称: partDetailId(自己定义)

       正则表达式:<cell>(.*?)</cell>

       模板:$1$

       匹配数字(0代表随机):5   (代表是第6个,从0开始算起)

       缺省值:


参考官网

http://jmeter.apache.org/usermanual/component_reference.html#Regular_Expression_Extractor



<think>好的,我现在需要解决用户的问题:在JMeter中使用JSON Extractor时,如何通过参数化实现按匹配序号从列表值中提取值。用户还提到了匹配序号和参数化,以及提取列表值。我需要结合提供的引用内容,尤其是引用[1]和引用[2]中的信息来回答这个问题。 首先,用户已经知道如何安装和使用JSON Path Extractor插件,这可能包括基本的配置步骤。现在的问题是如何参数化匹配序号,也就是让匹配序号变成一个变量,从而动态地从JSON响应中提取不同位置的值。 我需要回忆JMeter的参数化方法。参数化通常使用变量,比如用户定义的变量、CSV数据文件或者通过前置处理器生成的变量。JSON Extractor中的匹配序号(Match No.)通常是一个数字,比如0表示随机,-1表示所有,而正数表示第几个匹配项。如果用户希望这个数字是动态的,比如从外部文件或变量中获取,就需要将匹配序号设置为变量名,而不是固定值。 接下来,引用[2]中提到,JSON Path Extractor是方法二,而用户可能希望参数化这个匹配序号。例如,用户可能有一个变量${matchNum},然后在JSON Extractor的Match No.字段中填入这个变量。这样每次迭代时,JMeter会使用变量中的值作为匹配序号。 然后,需要考虑如何生成这个变量。可能的步骤是:使用CSV Data Set Config来读取参数文件中的值,或者使用用户定义的变量,或者在之前的请求中通过正则表达式或JSON提取器获取到序号,再传递给下一个请求的JSON Extractor。 另外,提取列表值可能需要设置匹配序号为-1,这样会获取所有匹配项,存储为变量名_1, 变量名_2等。但如果用户想动态选择其中一个,就需要结合参数化的匹配序号。例如,变量${index}作为匹配序号,然后使用${var_${index}}来获取对应的值。不过JMeter可能不支持这种嵌套变量写法,可能需要使用__V函数来组合变量名,比如${__V(var_${index})}。 还需要考虑示例配置,比如在JSON Path Extractor中,设置变量名为result,JSON Path表达式为$.data.items[*].id,匹配序号设为${matchNum},然后引用变量${result}。同时,如何设置matchNum的来源,比如通过CSV文件或计数器。 最后,验证步骤,使用Debug Sampler或查看结果树来确认提取的值是否正确,是否符合参数化的预期。 总结步骤应该是: 1. 参数化匹配序号:在JSON Extractor的Match No.字段填入变量名。 2. 准备参数数据源,如CSV文件、用户变量或计数器。 3. 处理可能的变量嵌套,使用__V函数。 4. 示例配置和验证方法。 需要确保这些步骤符合引用中的信息,尤其是引用[1]提到的插件安装和基本使用,引用[2]提到的参数化方法。</think>在JMeter中通过JSON Extractor实现按匹配序号参数化提取列表值,需要结合变量化匹配序号和JSON路径表达式配置。以下是具体实现步骤: ### 一、基础配置 1. **添加JSON Extractor** 在HTTP请求下创建后置处理器 -> `jp@gc-JSON Path Extractor`(或`JSON Extractor`),配置以下参数: - **变量名称**:定义存储结果的变量名,如`result` - **JSON路径表达式**:填写JSON路径语法,如`$.data.items[*].id`[^1] - **匹配序号(Match No.)**:填入参数化的变量名,如`${matchNum}`(需提前定义该变量) ### 二、参数化匹配序号实现方式 #### 方法1:通过CSV文件动态输入 1. **添加CSV Data Set Config** 创建配置元件 -> `CSV Data Set Config`,设置: - **Filename**:参数文件路径(如`match_num.csv`) - **Variable Names**:`matchNum` - 文件内容示例: ``` 1 3 -1 ``` 2. **JSON Extractor引用变量** 在匹配序号字段直接填入`${matchNum}`,JMeter会自动按迭代读取CSV中的值。 #### 方法2:通过计数器生成序号 1. **添加计数器(Counter)** 创建前置处理器 -> `计数器`,配置: - **起始值**:`1` - **递增量**:`1` - **引用名称**:`dynamicIndex` 2. **JSON Extractor引用计数器** 匹配序号字段填入`${dynamicIndex}`,实现顺序提取列表项。 ### 三、提取列表值的进阶操作 若需提取整个列表后按索引访问: 1. **设置匹配序号为`-1`** 提取所有匹配项到变量数组(如`result_1`, `result_2`等)[^2] 2. **通过索引参数化访问** ```java // Beanshell取样器中访问第n个元素 String index = vars.get("paramIndex"); //从参数获取索引 String value = vars.get("result_" + index); ``` ### 四、实例演示 **场景**:从JSON数组`["a","b","c"]`中动态提取指定位置的值 1. **JSON Extractor配置**: - 变量名:`data` - JSON路径:`$[*]` - 匹配序号:`${targetIndex}` 2. **参数源配置**(以用户定义变量为例): - 添加`用户定义的变量`,定义`targetIndex=2` 3. **结果调用**: - 使用`${data}`将返回`"c"`(索引从0开始) ### 五、验证方法 1. 添加`Debug Sampler`查看变量值 2. 使用`查看结果树`检查提取结果 **注意事项**: - 匹配序号为`0`表示随机,`-1`表示全部[^2] - 若参数化变量值为非数字,会默认按`0`处理 - 嵌套变量需用`__V()`函数处理,例如`${__V(result_${index})}`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值