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来实现。

实际例子如下:

  1. Test Plan 看起来像这样:

  1. 使用 Regular Expression Extractor
  2. 提取用户 ID

  1. 使用For Each Controller遍历每个值

  1. 根据需要在请求中使用 For Each Controller 的值

  1. 其工作证明

  1. 最好使用 XPath Extractor which allows using XPath expressions 从 XML/XHTML/HTML 响应类型中获取数据
  2. 您可以使用 ForEach Controller
  3. 循环变量