JMeter 中带有正则表达式提取器的循环示例结果
Loop sample with Regular Expression Extractor result in JMeter
我有 4 个样本:
第一个的响应类似于 XML:
<userId>9709262083</userId>
<name>Tom</name>
<relatedTo>9709262080</relatedTo>
<userId>9709262084</userId>
<name>John</name>
<relatedTo>9709262080</relatedTo>
<userId>9709262085</userId>
<name>Michael</name>
<relatedTo>9709262080</relatedTo>
我创建了特殊的正则表达式提取器来提取所有用户 ID(-1 作为匹配号)并且提取工作正常。
我有 3 个完全相同的样本,只有一个参数不同(${USER_ID_1}
、${USER_ID_2}
和 ${USER_ID_3}
),但我想让我的解决方案更通用和工作,即使我不知道会有多少用户响应。
对于在正则表达式提取器中找到的每个元素,我如何在某种循环中用 1 个样本替换这 3 个样本(不知道确切的用户数量)。
(我使用的是 JMeter 3.2,我可以将其升级到 5.1)
更新:
换一种方式怎么样,而不是拆分它们我想将它们用作采样器中的单个变量。
//e.g. 3 users
"<User><userId>9709262083</userId></User> <User><userId>9709262084</userId></User> <User><userId>97092620835</userId></User>"
//e.g. 2 users
"<User><userId>9709262083</userId></User> <User><userId>9709262084</userId></User>"
理想的解决方案是创建一个临时变量,在每个步骤的每个步骤中,我只需将我的值添加到该变量模式中。
${myVariable} += "<User><userId>${userId}</userId></User>"
然后我就可以使用 ${myVariable}
编辑
您的新要求${myVariable} += "<User><userId>${userId}</userId></User>"
可以通过以下行使用 JSR223 采样器来实现
vars.put("myVariable", vars.get("myVariable") + "<User><userId>"+ vars.get("userId") + "</userId></User>");
您应该使用 ForEach controller. 示例:
following variables should have been defined:
inputVar_1 = wendy
inputVar_2 = charles
inputVar_3 = peter
inputVar_4 = john
When the return variable is given as "returnVar", the collection of samplers and controllers under the ForEach controller will be executed 4 consecutive times
使用ForEach_Controller来实现。
实际例子如下:
Test Plan
看起来像这样:
- 使用
Regular Expression Extractor
提取用户 ID
- 使用
For Each Controller
遍历每个值
- 根据需要在请求中使用 For Each Controller 的值
- 其工作证明
- 最好使用 XPath Extractor which allows using XPath expressions 从 XML/XHTML/HTML 响应类型中获取数据
- 您可以使用 ForEach Controller
循环变量
我有 4 个样本:
第一个的响应类似于 XML:
<userId>9709262083</userId>
<name>Tom</name>
<relatedTo>9709262080</relatedTo>
<userId>9709262084</userId>
<name>John</name>
<relatedTo>9709262080</relatedTo>
<userId>9709262085</userId>
<name>Michael</name>
<relatedTo>9709262080</relatedTo>
我创建了特殊的正则表达式提取器来提取所有用户 ID(-1 作为匹配号)并且提取工作正常。
我有 3 个完全相同的样本,只有一个参数不同(${USER_ID_1}
、${USER_ID_2}
和 ${USER_ID_3}
),但我想让我的解决方案更通用和工作,即使我不知道会有多少用户响应。
对于在正则表达式提取器中找到的每个元素,我如何在某种循环中用 1 个样本替换这 3 个样本(不知道确切的用户数量)。
(我使用的是 JMeter 3.2,我可以将其升级到 5.1)
更新:
换一种方式怎么样,而不是拆分它们我想将它们用作采样器中的单个变量。
//e.g. 3 users
"<User><userId>9709262083</userId></User> <User><userId>9709262084</userId></User> <User><userId>97092620835</userId></User>"
//e.g. 2 users
"<User><userId>9709262083</userId></User> <User><userId>9709262084</userId></User>"
理想的解决方案是创建一个临时变量,在每个步骤的每个步骤中,我只需将我的值添加到该变量模式中。
${myVariable} += "<User><userId>${userId}</userId></User>"
然后我就可以使用 ${myVariable}
编辑
您的新要求${myVariable} += "<User><userId>${userId}</userId></User>"
可以通过以下行使用 JSR223 采样器来实现
vars.put("myVariable", vars.get("myVariable") + "<User><userId>"+ vars.get("userId") + "</userId></User>");
您应该使用 ForEach controller. 示例:
following variables should have been defined:
inputVar_1 = wendy
inputVar_2 = charles
inputVar_3 = peter
inputVar_4 = john
When the return variable is given as "returnVar", the collection of samplers and controllers under the ForEach controller will be executed 4 consecutive times
使用ForEach_Controller来实现。
实际例子如下:
Test Plan
看起来像这样:
- 使用
Regular Expression Extractor
提取用户 ID
- 使用
For Each Controller
遍历每个值
- 根据需要在请求中使用 For Each Controller 的值
- 其工作证明
- 最好使用 XPath Extractor which allows using XPath expressions 从 XML/XHTML/HTML 响应类型中获取数据
- 您可以使用 ForEach Controller 循环变量