首页 > 解决方案 > 如何在 bean shell 中验证 json 响应并执行一些操作以防响应在 jmeter 中不符合预期?

问题描述

我想在 jmeter 中提取 json 响应,如果响应不符合预期,我需要将其打印到 csv 文件中。

我尝试使用 contains 方法检查响应是否包含预期的关键字,但它似乎不起作用。我还有其他方法可以做到这一点吗?

示例代码在这里:

log.info(ctx.getPreviousResult().getResponseDataAsString());

r = ctx.getPreviousResult().getResponseCode();

d = ctx.getPreviousResult().getResponseDataAsString();

if(!d.contains("valid")){

p.println(r +","+ vars.get("email") +",");

}

这是我的 json 回复

{
     "isBlueLinkServicePinValid": "valid"
}

我正在检查关键字“有效”

if(!d.contains("valid"))

但它似乎不起作用?

TIA

标签: jmeterbeanshell

解决方案


  1. 由于 JMeter 3.1 不建议使用 Beanshell 进行脚本编写,您应该改用 JSR223 测试元素和 Groovy 语言。主要原因是Groovy 的性能比 Beanshell 好得多

  2. Groovy has built-in JSON support therefore you can extract isBlueLinkServicePinValid attribute value in an easy way:

    String response = prev.getResponseDataAsString();
    log.info("Response: " + response)
    String valid = new groovy.json.JsonSlurper().parseText(response).isBlueLinkServicePinValid
    log.info("Valid: " + valid);
    if (valid.equals("valid")) {
        log.info("Do something");
    }
    else {
        log.info("Do something else");  
    }
    

    Demo:

    enter image description here


推荐阅读