放心:从 JSON 数组中提取值
Rest Assured: Extracting value from JSON Array
我正在尝试使用 jsonPath 放心地从 JSON 数组中提取值。
示例JSON响应:
{
"notices": [],
"errors": [
{
"code": "UNAUTHORIZED"
}
]
}
当前测试如下:
@Test(dataProvider = "somePayLoadProvider", dataProviderClass = MyPayLoadProvider.class)
public void myTestMethod(SomePayload myPayload) {
Response r = given().
spec(myRequestSpecification).
contentType(ContentType.JSON).
body(myPayload).
post("/my-api-path");
List<String> e = r.getBody().jsonPath().getList("errors.code");
assertEquals(e, hasItem(MyErrorType.UNAUTHORIZED.error()));
}
但是,我的错误代码一直在 []。我只想要价值。
java.lang.AssertionError: expected
[a collection containing "UNAUTHORIZED"] but found [[UNAUTHORIZED]]
Expected :a collection containing "UNAUTHORIZED"
Actual :[UNAUTHORIZED]
显然这只是我没有正确使用 assert()
方法。
已更改
assertEquals(e, hasItem(MyErrorType.UNAUTHORIZED.error()));
到
assertTrue(e.contains(MyErrorType.UNAUTHORIZED.error()));
json 的解析已正确完成 ArrayList<String>
或者您可以指定 'errors' 的数组索引以删除方括号。即:
List<String> e = r.getBody().jsonPath().getList("errors[0].code");
然后你可以return使用'equals'而不是'contains'
放心,您还可以像这样在 REST 调用中执行链式断言:
given()
.spec(myRequestSpecification)
.contentType(ContentType.JSON)
.body(myPayload)
.post("/my-api-path") //this returns Response
.then() //but this returns ValidatableResponse; important difference
.statusCode(200)
.body("notices", hasSize(0)) // any applicable hamcrest matcher can be used
.body("errors", hasSize(1))
.body("errors", contains(MyErrorType.UNAUTHORIZED.error()));
我正在尝试使用 jsonPath 放心地从 JSON 数组中提取值。
示例JSON响应:
{
"notices": [],
"errors": [
{
"code": "UNAUTHORIZED"
}
]
}
当前测试如下:
@Test(dataProvider = "somePayLoadProvider", dataProviderClass = MyPayLoadProvider.class)
public void myTestMethod(SomePayload myPayload) {
Response r = given().
spec(myRequestSpecification).
contentType(ContentType.JSON).
body(myPayload).
post("/my-api-path");
List<String> e = r.getBody().jsonPath().getList("errors.code");
assertEquals(e, hasItem(MyErrorType.UNAUTHORIZED.error()));
}
但是,我的错误代码一直在 []。我只想要价值。
java.lang.AssertionError: expected
[a collection containing "UNAUTHORIZED"] but found [[UNAUTHORIZED]]
Expected :a collection containing "UNAUTHORIZED"
Actual :[UNAUTHORIZED]
显然这只是我没有正确使用 assert()
方法。
已更改
assertEquals(e, hasItem(MyErrorType.UNAUTHORIZED.error()));
到
assertTrue(e.contains(MyErrorType.UNAUTHORIZED.error()));
json 的解析已正确完成 ArrayList<String>
或者您可以指定 'errors' 的数组索引以删除方括号。即:
List<String> e = r.getBody().jsonPath().getList("errors[0].code");
然后你可以return使用'equals'而不是'contains'
放心,您还可以像这样在 REST 调用中执行链式断言:
given()
.spec(myRequestSpecification)
.contentType(ContentType.JSON)
.body(myPayload)
.post("/my-api-path") //this returns Response
.then() //but this returns ValidatableResponse; important difference
.statusCode(200)
.body("notices", hasSize(0)) // any applicable hamcrest matcher can be used
.body("errors", hasSize(1))
.body("errors", contains(MyErrorType.UNAUTHORIZED.error()));