通过在JMeter中检查响应主体来停止发送请求


问题内容

我想继续调用REST API,直到响应正文包含100个元素。

这是示例:

要求: someurl/get/data

响应:第一次API调用:(包括2个元素)

{
  "items" : [
          {
            "name": "abc",
            "id"  : "ajdiw123"
          },
          {
            "name": "abc",
            "id"  : "ajdiw123345"
          }
  ]
}

第二次API调用:(4个元素)

{
  "items" : [
          {
            "name": "abc",
            "id"  : "ajdiw123"
          },
          {
            "name": "def",
            "id"  : "ajdiw145"
          },
          {
            "name": "afc",
            "id"  : "ajdiw113"
          },
          {
            "name": "bbc",
            "id"  : "ajdiw199"
          }
  ]
}

像这样,响应主体中包含的元素可以更改。在某个时候,它将在那里返回100个具有100个不同id的元素。我如何确定这一点并停止使用JMeter将请求发送到端点。


问题答案:

根据您的测试计划,可以通过多种方式实现。

向您的请求添加JSON提取器JSR223声明

JSR223断言代码将类似于:

String totalIDs = vars.get("id_matchNr");
Integer result = Integer.valueOf(totalIDs);
if (result == 100){
    AssertionResult.setFailure(true);
}

之后,只需向该请求添加一个结果状态操作处理程序,这样它将停止特定线程的执行: