如何在ForEach控制器中使用匹配计数为-1的两个正则表达式变量值

时间:2018-03-15 19:11:46

标签: jmeter

如何在ForEach控制器中使用匹配计数为-1的两个正则表达式变量值。

JMeter版本:3.1

方案: 问题列表页面>每个问题都有唯一的ID>需要单击列表页面上的每个问题,HTTP请求需要两个参数 - QuestionID和Title

对于这种情况,我可以通过使用正则表达式匹配计数设置为-1的ForEach控制器来实现一个参数(标题)。

当我有另一个QuestionID的RegExp匹配计数设置为-1时,如何在同一个ForEach控制器中使用,因为它只需要一个输入变量并将其放在一个输出变量中。以下是当前的测试计划结构。

JMeter TestPlan结构:

HTTP请求如下所示: POST https://test.com:xx/test

POST BODY:

mode=pr&questionId=454&Title=abcde

这里我必须输入/获取questionId和Title变量值,每个标题都有唯一的questionId。

线程组

- REQ1 --Req2

--- RegEx(标题):匹配编号-1(调试采样器显示匹配计数:4) `--- RegEx(QuestionID):使用MAtch编号-1(调试采样器显示匹配计数:2)

循环控制器

--- ForEach Controller(用于标题输入变量)

----使用ForEach控制器输出变量的HTTP req

运行测试>它能够成功迭代标题变量值但是如何在ForEach控制器中使用QuestionID变量,以便HTTP请求可以同时具有两个RegExp变量。

请指导。

Jmeter版本:4.0 enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

反QuesitonID-REQ: enter image description here

2 个答案:

答案 0 :(得分:2)

您可以在ForEach循环内部使用,例如,如果它使用JMeter 4.0中引入的内部索引调用foreachController

  

ForEach Controller现在将其当前迭代作为变量公开   名为 jm <"元素的名称"> __ idx

问题是从0开始,而QuestionID索引从1开始,

所以你需要先增加价值 1.添加测试操作

  1. 在其下添加变量名为N的用户参数和递增1的值:

    ${__intSum(${__jm__foreachController__idx},1,)}
    
  2. 然后使用N索引在循环内获取相关QuestionID变量:

    ${__V(QuestionID_${N})}
    

答案 1 :(得分:1)

  1. Counter测试元素添加为ForEach控制器的子元素,并按如下方式对其进行配置:

    • 起始值:1
    • 增量:1
    • 最大值:${QuestionID_matchNr}
    • 参考名称:counter

      JMeter Counter

  2. 使用__evalVar() function引用生成的值,如:

    ${__evalVar(QuestionID_${counter})}
    

    必要时

    JMeter EvalVar

  3. 更多信息:How to Use a Counter in a JMeter Test