请放心 - 将 json 响应与本地 json 文件进行比较

Rest Assured - compare json response with local json file

我有一个本地 json 文件 test.json

[
  {
    "id": 1,
    "title": "test1"
  },
  {
    "id": 2,
    "title": "test2"
  }
]

Class 读取 json 文件

public static String getFileContent(String fileName){
        String fileContent = "";
        String filePath = "filePath";
        try {
            fileContent = new String(Files.readAllBytes(Paths.get(filePath)));
            return fileContent;
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            return fileContent;
        }
    }

我放心地提出请求并得到相同的json响应

String fileContent= FileUtils.getFileContent("test.json");

    when().
       get("/testurl").
    then().
       body("", equalTo(fileContent));

这是我从本地文件中得到的

[\r\n  {\r\n    \"id\": 1,\r\n    \"title\": \"test1\"\r\n  },\r\n  {\r\n    \"id\": 2,\r\n    \"title\": \"test2\"\r\n  }\r\n]

这是实际回复:

[{id=1, title=test1}, {id=2, title=test2}]

有没有更好的方法来比较这两者?我尝试做类似 fileContent.replaceAll("\r\n| |\"", ""); 的事情,但它只是删除了所有 space [{id:1,title:test1},{id:2,title:test2}] 有什么帮助吗?或者任何只比较内容而忽略换行符、space 和双引号的方法?

您可以使用以下任何一种方法

JsonPath :

String fileContent = FileUtils.getFileContent("test.json");

    JsonPath expectedJson = new JsonPath(fileContent);
    given().when().get("/testurl").then().body("", equalTo(expectedJson.getList("")));

杰克逊:

String fileContent = FileUtils.getFileContent("test.json");
String def = given().when().get("/testurl").then().extract().asString();

    ObjectMapper mapper = new ObjectMapper();
    JsonNode expected = mapper.readTree(fileContent);
    JsonNode actual = mapper.readTree(def);
    Assert.assertEquals(actual,expected);

GSON :

String fileContent = FileUtils.getFileContent("test.json");
String def = given().when().get("/testurl").then().extract().asString();

    JsonParser parser = new JsonParser();
    JsonElement expected = parser.parse(fileContent);
    JsonElement actual = parser.parse(def);
    Assert.assertEquals(actual,expected);