BAD*_*EED 8 rest json rest-assured
我正在使用REST-Assured测试一些API。我的API显然会使用JSON响应,并根据文档做出响应(如果这是响应):
{
"id": "390",
"data": {
"leagueId": 35,
"homeTeam": "Norway",
"visitingTeam": "England",
},
"odds": [{
"price": "1.30",
"name": "1"
},
{
"price": "5.25",
"name": "X"
}]
}
Run Code Online (Sandbox Code Playgroud)
我可以这样测试:
@Test
public void givenUrl_whenSuccessOnGetsResponseAndJsonHasRequiredKV_thenCorrect() {
get("/events?id=390")
.then()
.statusCode(200)
.assertThat()
.body("data.leagueId", equalTo(35));
}
Run Code Online (Sandbox Code Playgroud)
当然这是可读的,但我将对JSON进行全面比较(即:这是JSON响应;这是固定的JSON-资源文件将是完美的-这些JSON等于吗?)。REST-Assured是否提供类似的功能,或者我需要手动进行设置。
使用 RestAssured 的 JsonPath 将 json 文件解析为 Map,然后与 Hamcrest Matchers 进行比较。这样订单等就无关紧要了。
import static org.hamcrest.Matchers.equalTo;
import io.restassured.path.json.JsonPath;
...
JsonPath expectedJson = new JsonPath(new File("/path/to/expected.json"));
given()
...
.then()
.body("", equalTo(expectedJson.getMap("")));
Run Code Online (Sandbox Code Playgroud)
空手道正是您正在寻找的 - 您可以一步执行JSON 有效负载的完全相等匹配。
对于具有动态值(生成的键、时间戳)的情况,Karate 为您提供了一种非常优雅的方式来忽略(或仅验证其格式)这些键。
创建空手道的主要动机之一是想出一个更好的替代 REST-assured。您可以参考此文档,它可以帮助您评估 Karate 并在您的组织中为其提供案例:Karate vs REST-assured。
简单的方法:
String s = "{\"ip\": \"your_ip\"}";
given().log().all().contentType(ContentType.JSON).get("http://ip.jsontest.com/").then().log().all().assertThat().body(containsString(s))
Run Code Online (Sandbox Code Playgroud)
不容易的方法:您可以创建自定义匹配器或使用 jsonpath,它具有 comapre jsons 的选项。
| 归档时间: |
|
| 查看次数: |
6667 次 |
| 最近记录: |