如何在rest-assured中使用自定义对象进行验证时忽略属性



我需要根据org.json.simple包中的预期JsonObject验证整个JSON响应,同时忽略响应

中的一些附加属性
JSONObject jsonObject = new JSONObject();
jsonObject.put("key1", "value1");
jsonObject.put("key2", "value2");
given().post("some/url").then().assertThat().body("result", equalTo(jsonObject, ignore="ignoreKey")) //something like this

从api返回的响应如下所示:

{
"result": {
"key1": "value1",
"key2": "value2",
"ignoreKey": "ignoreValue"
}
}
  1. 我不关心键/值的顺序
  2. 我同时关心键和值
  3. 我知道我可以使用jsonPath获得单个值,但实际的JSON相当大且复杂,所以我想避免做出这样的多个断言:
response.then().assertThat().body("result.key1", equalTo(jsonObject.get("key1")));
response.then().assertThat().body("result.key2", equalTo(jsonObject.get("key2")));

注意:我使用hamcrest匹配器- equalTo()

这里有一些想法(来自曾经使用rest assured的人):

1-您的客户端希望使用您的服务的SDK。所有行业领导者(如aws、Salesforce等)都有一个可用的sdk,因为它节省了客户的工作。

2—拥有一个SDK可以节省你的工作,因为你知道每个团队都在使用一个通用的库,而不是每个团队调试不同的实现。

3-你可以用gradle中的几行代码从你的开放API规范中生成功能齐全的客户端/模型(只需放在基础url中):https://medium.com/codex/generating-clients-models-for-restful-services-from-openapi-specification-edf211e5d761

4,你必须积分。测试你的API(检查API gateway ->Lambda权限),所以为什么不使用生成的客户端(通常使用类似黄瓜测试的东西)呢?

所以最后,我将用生成的客户机替换rest assured,它将返回强类型模型。然后,您可以使用常规的junit(例如整个对象上的等号,或单个字段上的断言)来验证您的响应,这有意义吗?

最新更新