如何使用RestAssured将整个Json文件与其响应进行比较?

huangapple go评论68阅读模式
英文:

How do you compare an entire Json file to it's response using restassured?

问题

以下是翻译好的内容:

我正在使用之前几年使用过的 restassured。在这样做时,我的项目中有一个包含 Json 文件的文件夹。我要将这些文件与实际的 API 响应结果进行比较。在这方面,最佳做法是什么?显然,我需要在项目中指定文件位置,并将其与响应进行比较。是否有一种标准的做法来实现这一点?

所以最初我有这样的代码。只是从响应体中检查城市,但我想要整个响应。

@Test
public void GetCity() {
    given().
    when().
    get(city).
    then().
    assertThat().
    body("city", equalTo(city));
}

但我想要实现类似下面这样的代码:

@Test
public void GetCity() {
    given().
    when().
    get(city).
    then().
    assertThat().
    JsonFile("/Myjson", equalTo(response));
}

我目前正在使用 TestNG,但我记得以前使用过 Cucumber 场景,它允许我在数据表中测试多个响应。我的问题是如何实现上述内容?

{
  "id": 25,
  "first_name": "Caryl",
  "last_name": "Ruberry",
  "email": "cruberryo@smugmug.com",
  "ip_address": "222.10.201.47",
  "latitude": 11.8554828,
  "longitude": -86.2183907,
  "city": "Dolores"
}
英文:

I'm using restassured something I used a few years back. When doing so I had a folder with Json files in my project. I was comparing these to the actual outcome of the API response. What is the best way to go about this. I obviously need my file location in my project and need to compare it to my response. Is there a standard way to do this.

So originally I had this. Just to check the City from the body but I want the whole thing.

    @Test
public void GetCity() {

    given().
            when().
            get(city).
            then().
            assertThat().
            body(("city"), equalTo(city));
}

But I want to get to something like this below:

@Test
public void GetCity() {

    given().
            when().
            get(city).
            then().
            assertThat().
            JsonFile(("/Myjson"), equalTo(response));
}

I'm using TestNg currently but I remembered using Cucumber Scenarios which allowed me to test multiple responses in a data table. Question I have is how do I achieve the above?

    {
  "id": 25,
  "first_name": "Caryl",
  "last_name": "Ruberry",
  "email": "cruberryo@smugmug.com",
  "ip_address": "222.10.201.47",
  "latitude": 11.8554828,
  "longitude": -86.2183907,
  "city": "Dolores"
}

答案1

得分: 1

@Test
public void GetCity() {
    Response response = when().
        get(city).
    then().
        extract().
        response();
    UserEntity userEntityResponse = response.jsonPath().getObject("$", UserEntity.class);
    UserEntity userEntityFile = JsonPath.from(new File("file path"));
    assertEquals(userEntityFile.id, userEntityResponse.id);
}

First, we extract the Response object which contains information like status code or response body. In this case it will be JSON. Before we extract it, let's create a POJO with JSON representation:

public class UserEntity {
    public Long id; //id is exact name field in JSON
    @JsonProperty("first_name") //other approach
    public String firstName;
    public String last_name;
    public String email;
    public String ip_address;
    public Long latitude;
    public Long longitude;
    public String city;
}

Now, we can transform the JSON response body into this class like this:

@Test
public void GetCity() {
    Response response = when().
        get(city).
    then().
        extract().
        response();
    UserEntity userEntityResponse = response.jsonPath().getObject("$", UserEntity.class);
}

The "$" means root of JSON file (the first object {}). This is how Response is translated into POJO. We can do it in a very similar matter:

Response response = when().
    get(city).
then().
    extract().
    response();
UserEntity userEntityResponse = response.jsonPath().getObject("$", UserEntity.class);
UserEntity userEntityFile = JsonPath.from(new File("file path"));

Now you can easily compare them like:

assertEquals(userEntityFile.id, userEntityResponse.id);

You could also override hashCode() and equals() methods but that might be too much if you're just learning 如何使用RestAssured将整个Json文件与其响应进行比较?

英文:

What I understood from the question is to get response from an API and compare with JSON file. How do it:

 @Test
public void GetCity() {
        Response response = when().
            get(city).
        then().
            extract()
            response();

}

First, we extract the Response object which contains information like status code or response body. In this case it will be JSON. Before we extract it, let's create a POJO with JSON representation:

{
  "id": 25,
  "first_name": "Caryl",
  "last_name": "Ruberry",
  "email": "cruberryo@smugmug.com",
  "ip_address": "222.10.201.47",
  "latitude": 11.8554828,
  "longitude": -86.2183907,
  "city": "Dolores"
}

The above JSON can be represented by below class:

public class UserEntity {
    public Long id; //id is exact name field in JSON
    @JsonProperty("first_name"); //other approach
    public String firstName;
    public String last_name;
    public String email;
    public String ip_address;
    public Long latitude;
    public Long longitude;
    public String city;
} 

Now, we can transform the JSON response body into this class like this:

 @Test
public void GetCity() {
        Response response = when().
            get(city).
        then().
            extract()
            response();
        UserEntity userEntityResponse = response.jsonPath().getObject("$", UserEntity.class);
}

The "$" means root of JSON file (the first object {}). This is how Response is translated into POJO. We can do it in a very similar matter

        Response response = when().
            get(city).
        then().
            extract()
            response();
        UserEntity userEntityResponse = response.jsonPath().getObject("$", UserEntity.class);
        UserEntity userEntityFile = JsonPath.from(new File("file path"));

Now you can easily compare them like:

assertEquals(userEntityFile.id, userEntityResponse.id);

You could also override hashCode() and equals() methods but that might be too much if you're just learning 如何使用RestAssured将整个Json文件与其响应进行比较?

huangapple
  • 本文由 发表于 2020年8月30日 01:58:19
  • 转载请务必保留本文链接:https://go.coder-hub.com/63650158.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定