由于先前多响应模型中的相同 json 路径导致的 JSR223 后处理器错误日志

JSR223 PostProcessor error logs due to same json path in previous multiple response model

尽管脚本 运行 成功并且 Jmeter 步骤没有问题,但我在 JSR223 PostProcessor 的日志中看到了以下错误。

Caused by: java.lang.NullPointerException: Cannot get property 'result' on null object

我的 JSR223 后处理器 - groovy 3.0.7 脚本如下所示:

import groovy.json.JsonSlurper;

String json = prev.getResponseDataAsString();
def root = new JsonSlurper().parseText(json);
    
def C_accountNumber = root.myAccount.result[0].accountNumber;

vars.put("C_accountNumber", C_accountNumber);

上面脚本上面的响应

{
    "myAccount": {
        "result": [
            {
                "accountNumber": "Something",
                "accountAddress": "Something",
             }
          ]
       }
}

但是,我注意到的是,在前面的多个步骤响应中的上述脚本之前,我还看到了下面的路径。 (完全相同的路径 myAccount.result[0]

所以我猜这是导致问题的原因,因为作为之前的回复之一,我看不到 accountNumber 尽管有 myAccount.result[0].

例如

{
    "myAccount": {
        "result": [
            {
                "country": "Something",
                "address": "Something",
             }
          ]
       }
}

因为 groovy 脚本中的这一部分 String json = prev.getResponseDataAsString(); 经历了所有以前的响应,但不仅仅是之前。我的理解正确吗?

有没有办法消除日志中的这些错误?

您的 post 处理器应定义为 HTTP 请求的子级

JMeter Post-Processor 在范围内执行,对于特定的 HTTP 请求将其添加为请求的子项

Post-Processor executes some action after a Sampler Request has been made. If a Post-Processor is attached to a Sampler element, then it will execute just after that sampler element runs.

注意 JMeter Scoping Rules

如果您输入 PostProcessor at the same level as several Samplers - 它将应用于 所有

因此,如果您只想在某个采样器之后执行后处理器 - 您需要使后处理器成为特定采样器的子级: