如何循环一个jmeter请求?

时间:2019-12-06 10:32:22

标签: jmeter

我有一个请求https://***********/projects?page=1

给出响应

 {
    "QueryInfo": {
      "QryNa": "Q_PTE1",
      "resourc": "https://******************QueryResultsAsXML.v2/q/?auth=",
      "CurrentPage": "page=1",
      "FirstPage": "page=1",
      "LastPage": "page=6",
      "Rows": "1000",
      "TotalRows": "6000"
    } 
}

我必须验证LastPage,如果它大于1,则必须对1到6的所有Pages编号执行相同的上述请求。我已经用正则表达式捕获了该页码。您能告诉我们在这种情况下如何循环吗?

2 个答案:

答案 0 :(得分:0)

添加一个条件为${__jexl3("${LastPage}" > 1)}的{​​{3}},其中LastPage是您的正则表达式提取器的引用名。

添加一个If Controller并将循环计数更改为${__intSum(${LastPage},-1)}

在具有以下配置的循环控制器下添加一个loop controller

  • 开始:2
  • 增量:1
  • 最大数量:${LastPage}
  • 参考名称:pageCounter
  • 确保同时选中Track counter independently for each userReset counter on each Thread Group iteration

将您的HTTP请求复制并粘贴到循环控制器下,并将page参数更改为page=${pageCounter}

答案 1 :(得分:0)

  1. Regular Expression Extractor添加为请求的子代,该请求返回上述响应并将其配置为:

    • 已创建变量的名称:任何有意义的变量,例如lastPage
    • 正则表达式:"LastPage"\s?:\s?"page=(\d+)",
    • 模板:$1$
  2. 在请求后添加If Controller,并使用以下条件:

    ${__groovy((vars.get('lastPage') as int) > 1,)}
    
  3. Loop Controller作为If控制器的子级,并使用以下表达式作为“循环计数”:

    ${__groovy((vars.get('lastPage') as int) -1,)}
    
  4. HTTP Request采样器添加为循环控制器的子代,并将请求主体修改为:

    {
      "QueryInfo": {
        "QryNa": "Q_PTE1",
        "resourc": "https://******************QueryResultsAsXML.v2/q/?auth=",
        "CurrentPage": "page=${__intSum(${__jm__Loop Controller__idx},2,)}",
        "FirstPage": "page=1",
        "LastPage": "page=6",
        "Rows": "1000",
        "TotalRows": "6000"
      }
    }   
    

    enter image description here