我用的是几年前用过的重新加压的东西。在这样做的时候,我的项目中有一个包含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"
}
我从问题中理解的是从API获得响应,并与JSON文件进行比较。如何操作:
@Test
public void GetCity() {
Response response = when().
get(city).
then().
extract()
response();
}
首先,我们提取Response
对象,该对象包含状态代码或响应体等信息。在这种情况下,它将是JSON。在提取它之前,让我们创建一个具有JSON表示的POJO:
{
"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"
}
上面的JSON可以用下面的类表示:
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;
}
现在,我们可以将JSON响应体转换为这样的类:
@Test
public void GetCity() {
Response response = when().
get(city).
then().
extract()
response();
UserEntity userEntityResponse = response.jsonPath().getObject("$", UserEntity.class);
}
"$"表示JSON文件的根(第一个对象{}(。这就是响应被翻译成POJO的方式。我们可以在一个非常相似的事情
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);
你也可以覆盖hashCode()
和equals()
方法,但如果你只是在学习:(