当前位置: 首页 > 知识库问答 >
问题:

JMIT中使用Beanshell验证JSON响应

潘宸
2023-03-14

我试图断言Json响应在我的jmetm使用Beanshell断言。下面是我的代码。

import org.json.JSONObject;
import org.json.JSONArray;
import java.lang.String;
import org.apache.log.Logger;

try{
  String jsonString = prev.getResponseDataAsString();
  JsonObject jsonobj = JsonObject.readFrom(jsonString);
  JsonArray jsonarr = jsonobj.get("items").asArray();
  String pickup = jsonarr.get(2).asObject().get("CM_NAME").asString();
  log.info(pickup); 
 }
catch(Exception e)
{
 log.info("beanshell Exception "+e.getMessage());
}

下面是我必须验证的Json路径

$.items[2].CM_NAME

运行脚本后,我得到以下脚本。

断言失败消息:org。阿帕奇。乔芬。util。JMeterException:调用bsh方法时出错:评估源文件:内联评估:``导入组织。json。JSONObject;导入组织。json。杰索纳雷;导入java。lang.String;…'':类型化变量声明:在命名空间中找不到类:JsonObject

我使用的是jmeter版本2.11。有人能帮我让我的脚本正常工作吗?我的代码正确吗?

共有2个答案

栾和风
2023-03-14

如果您真的想这样做,您需要确保在JMeter类路径中的某个地方有相关的JSON库(通常将jar放到JMeter的“lib”文件夹中并重新启动JMeter以获取它就足够了)

展望未来,我建议使用不同的方法,如:

>

  • JMeter插件提供JSON路径断言,您可以直接在那里使用JSON路径查询。您可以通过JMeter插件管理器安装JSON路径断言

    切换到JSR223断言和Groovy语言。Groovy具有内置的JSON支持,因此您不需要任何额外的库。例如,如果您有以下JSON响应:

    {
      "items": [
        {
          "CM_NAME": "foo"
        },
        {
          "CM_NAME": "bar"
        },
        {
          "CM_NAME": "baz"
        }
      ]
    }
    

    您需要提取baz值,您可以使用以下Groovy代码执行此操作:

    def response = SampleResult.getResponseDataAsString()
    def json = new groovy.json.JsonSlurper().parseText(response)
    
    log.info(json.items[2].CM_NAME)
    

  • 皇甫飞飙
    2023-03-14

    我建议您改用JsonPath,这正是您想要做的。

    另外,升级到JMeter 3.1,它已经将这个库嵌入到它的类路径中,或者下载JAR文件并将其放在/lib/ext中。

    完整代码示例:

    import com.jayway.jsonpath.JsonPath;
    
    String author0 = JsonPath.read(document, "$.store.book[0].author");
    Failure = !"John Smith".equals(author0);
    if (Failure) {
      FailureMessage = "Expected John Smith as author";
    }
    
     类似资料:
    • 我试图在Spring MVC Web服务返回的JSON结果中验证LocalDate对象,但我不知道如何验证。 目前,我总是遇到如下断言错误: java.lang.AssertionError: JSON路径" $[0]。“开始日期”应为:是 我的测试的重要部分发布在下面。任何想法如何修复测试以通过? webservice返回一个视图对象列表,如下所示: [编辑] 另一次尝试是 导致 java.la

    • 我收到了针对我的API的错误请求的以下响应。我将RestAssured用于我的rest响应断言。 我需要验证响应的所有属性的值。我正在努力验证此路径:。我无法为它想出GPath。 以下是我所作的断言: 由于路径不正确,断言总是失败。

    • 我一直在验证下面的回答。 当我使用空手道发出获取请求时,我会得到以下响应,我想验证它。 我试过: 它说它不是字符串。你能帮我确认一下这个请求吗?

    • 我有一个关于Rest保证的问题。-https://code.google.com/p/rest-assured/wiki/Usage 我知道我可以使用REST保证进行HTTP调用(. get. put等)。)并使用时()等验证响应。我想验证我已经保存在数据库中的JSON响应,而不是实时调用Web服务并验证它的响应。 我可以使用REST-保证加载JSON响应作为字符串并验证它吗?

    • 我正在使用Swagger生成Restful API: 这个API接受json字符串并从中生成java对象。这在一个例外情况下运行良好:API接受任何正确格式的json字符串,但忽略json的内容,这意味着我得到一个使用默认值创建的对象。 所以我的问题是:在生成实际的java对象之前,如何验证传入的jsonstring(针对json模式)?

    • 我试图验证非json格式的错误响应体。我尝试了使用模式以及使用包含匹配的关键字。这对我不起作用。 在post调用中观察到多个匹配时从API返回的实际响应: 我的空手道特点: 尝试*匹配实际的[0] == '#(^partSchema)'也从https://gist.github.com/ptrthomas/2a1e30bcb4d782279019b3d5c10b3ed1。不工作