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

使用Rest Asure检查JSON数组值的问题

慕光霁
2023-03-14

我正在尝试向我的应用程序添加一些带有Rest-Asure的测试,但我不知道如何断言一些嵌套值。错误消息是:

预期:(包含“json”的集合)实际:[[json、spring、gulp、path等。]]

代码如下:

 when().
       get("/api/personsByID/{id}/{count}", 262, 2).
       then().
       statusCode(200).
       body("personDependencies.name", hasItems("json"));

这是rest控制器返回的JSON文件:

[
    {
        "id": 346,
        "verified": true,
        "displayName": "eda656a2c3cb59ae840e40a28ba4ab50bfb9de0185abcb901c6af6dc59d6668f",
        "emails": [
            {
                "email": "16a23f2e5477df0bbcad718c3abc235b2cb8a1b6648d14f58d42a7be13df2b6e"
            }
        ],
        "personDependencies": [
            {
                "name": "json"
            },
            {
                "name": "spring"
            },
            {
                "name": "gulp"
            },
            {
                "name": "path"
            },
            {
                "name": "junit"
            },
            {
                "name": "activemq"
            },
            {
                "name": "hibernate"
            },
            {
                "name": "jstl"
            },
            {
                "name": "phantomjs"
            },
            {
                "name": "activiti"
            },
            {
                "name": "commons"
            },
            {
                "name": "h2"
            },
            {
                "name": "joda"
            },
            {
                "name": "log4j"
            },
            {
                "name": "exec"
            },
            {
                "name": "admin"
            },
            {
                "name": "coveralls"
            },
            {
                "name": "cxf"
            },
            {
                "name": "cglib"
            },
            {
                "name": "camel"
            },
            {
                "name": "sugaronrest"
            },
            {
                "name": "tslint"
            },
            {
                "name": "httpclient"
            },
            {
                "name": "guava"
            },
            {
                "name": "inventory"
            },
            {
                "name": "jackson"
            },
            {
                "name": "gson"
            },
            {
                "name": "event"
            },
            {
                "name": "OTRS"
            },
            {
                "name": "maven"
            },
            {
                "name": "karma"
            },
            {
                "name": "slf4j"
            },
            {
                "name": "postgresql"
            },
            {
                "name": "typescript"
            },
            {
                "name": "jasmine"
            },
            {
                "name": "spa"
            },
            {
                "name": "javax.servlet"
            }
        ],
        "countries": [],
        "member_of": [],
        "projects": [],
        "employee_type": [],
        "languages": [
            {
                "language": "reStructuredText",
                "sum": 575
            },
            {
                "language": "JSON",
                "sum": 21
            },
            {
                "language": "JavaScript",
                "sum": 4467
            },
            {
                "language": "Java",
                "sum": 7958
            },
            {
                "language": "Python",
                "sum": 2
            },
            {
                "language": "XML",
                "sum": 477
            },
            {
                "language": "Plain Text",
                "sum": 41
            }
        ],
        "distance": 0.6028837702084446
    }
]

我不知道如何做出正确的断言,任何帮助都很好。谢谢!

共有2个答案

秦凯定
2023-03-14

第一个问题您不需要使用hasItems检查项目的存在,您应该使用hasItem

when().
       get("/api/personsByID/{id}/{count}", 262, 2).
       then().
       statusCode(200).
       body("personDependencies.name", hasItem("json"));

然后,如果您需要在测试失败时向断言添加更多消息,您可以这样做:

 when().
        get("/api/personsByID/{id}/{count}", 262, 2).
        then().
        statusCode(200).
        body("personDependencies.name",  describedAs("Array not containing the provided item",hasItem("json")));

在您的情况下,您可以通过以下方式验证:

when().
       get("/api/personsByID/{id}/{count}", 262, 2).
       then().
       statusCode(200).
       body("personDependencies[*].name", hasItem("json"));
宗政才俊
2023-03-14

如果我正确理解了您的问题,您需要检查特定ID返回的列表中是否存在特定值

下面的应该对你有用

given().when().get().then().body("find {it.id == 346}.personDependencies.name", hasItems("json", "jackson"));
 类似资料:
  • 我想做的每件事都成功了,现在是最后一部分,我需要检查某个id的学生是否有某种疫苗,结果应该是真的或假的。我知道我必须使用ListofFos。contains():'但我不知道如何使用它,也不知道在哪里使用它。

  • 需要使用taocpp-json查找json对象中是否存在数组。使用可选查找int和布尔值等很容易,但如果值是数组,我无法找到如何做到这一点。 我试过: 但这给了我编译器错误! 在msvc上:C:\PROGRA~2\MICROS~1\2017\PROFES~1\VC\Tools\msvc\1416~1.270\bin\Hostx64\x64\cl.exe/nologo/TP-IC:\devel\cp

  • 我能够使用 RESTA 保证从服务中检索 JSON。 我想使用JSONPath功能提取JSON,然后使用JSONAssert进行比较。 下面是我的示例: 如何让JSONPath返回一个JSONObject,可以被JSONAsser使用? 在代码示例中: 这将返回一个 。如何将其与 JSON 资产一起使用,以便与预期的 JSON 进行比较? 如果我执行,这将返回一个无法解析的字符串,因为缺少对带空格

  • 问题内容: 我正在努力从格式如下的JSON文件中检索一些值: 我尝试了不同的方法(json,gson,jayway- JsonPath),但是我无法从“属性”数组中获取值,只能从第一个数组中获取值。我不知道如何指定“属性”是一个JSONArray而不是一个JSONObject或如何为其设置正确的路径。这是我正在玩的最后一个代码,当它找到一个数组时停止: 我想做的就是获得卢卡斯或布兰登的价值。任何帮

  • 我正在努力从JSON文件中检索一些值,格式如下: 我尝试过不同的方法(json、gson、jayway JsonPath),但我无法从“属性”数组中获取值,只能从第一个数组中获取值。我不知道如何指定“attribute”是JSONArray而不是JSONObject,也不知道如何设置它的正确路径。这是我玩的最后一个代码,它在创建数组时停止: 我想做的是得到卢卡斯或布兰登的价值观。任何帮助都将不胜感

  • 问题内容: 我需要检查数组以查看用户输入是否已经存在,并显示一条有关是否存在的消息。第一部分工作正常,但是我尝试创建一种用于单词检查的方法,我不确定自己是否走对了,干杯。 问题答案: 对。您显然已经经历了一个糟糕的思考过程,所以让我们清理一下状况,重新思考一下。 第一步:您需要一些用户输入 第二步:将其与所有先前的用户输入进行比较,以查看是否存在。 如果存在,则返回一条消息,指示已输入值。 否则忽