请放心验证JSON正文包含列表中的所有字符串

时间:2018-06-27 13:45:12

标签: java json rest-assured hamcrest

因此,基本上,我已经构建了一个列表,其中包含JSON对象的主体字段名称的字符串。

类似这样的东西:

List<String> fieldNames = new ArrayList<String>();

然后,我使用Rest-assured来获取JSON格式的响应,如下所示:

{
"id": 11,
"name": "CoolGuy",
"age": "80",
}

因此我的列表包含“ id”,“ name”和“ age”。如何验证JSON字段与列表中的那些字符串匹配。没有根据他们的顺序。

我只知道如何验证它包含一个String,这是我使用的整个JUnit测试方法:

@Test
public void verifyJSONMatch() {
    given().auth().basic("user", "pass").when()
    .get(getRequestURL).then().body(containsString("id"));      
}

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您可以提取响应

ResponseOptions response = given().spec(request)
                    .get("/url_path");

然后解析一个json

DocumentContext parsedJson = JsonPath.parse(response.getBody().asString());
            assertThatJson(parsedJson).field("['id']").isEqualTo("11");

答案 1 :(得分:0)

将响应提取为Java对象,然后断言所提取的对象等于您在JSON中具有的对象,这可能是最简单的。

MyObject expectedObject = new MyObject(11, "CoolGuy", "80");
MyObject myObject = 
    given().auth().basic("user", "pass")
        .when().get(getRequestURL)
        .then().extract().response().as(MyObject.class);
assertEquals(expectedObject, myObject);

您可以根据需要创建构造函数。我认为您的对象可能比上面显示的复杂得多。但是,这是断言平等的一种简单得多的方法,并且很容易重用。