我正在尝试在Serenity框架中使用Rest Assured来验证端点响应。我将一个xml主体发送到端点并期望返回JSON响应:
{"Entry ID" : "654123"}
我想发送XML并在JSON响应中验证密钥的值"条目ID"不为空或为空。问题是,密钥中有一个空格,我相信它会导致错误。以下是我到目前为止的情况:
SerenityRest.given().contentType(ContentType.XML)
.body(xmlBody)
.when().accept(ContentType.JSON).post(endpoint)
.then().body("Entry ID", not(isEmptyOrNullString()))
.and().statusCode(200);
这会产生错误:
java.lang.IllegalArgumentException: Invalid JSON expression:
Script1.groovy: 1: unable to resolve class Entry
@ line 1, column 33.
Entry ID
^
1 error
我试过包装"条目ID"以不同的方式无效:
.body("'Entry ID'", not(isEmptyOrNullString()))
.body("''Entry ID''", not(isEmptyOrNullString()))
.body("\"Entry ID\"", not(isEmptyOrNullString()))
.body("['Entry ID']", not(isEmptyOrNullString()))
.body("$.['Entry ID']", not(isEmptyOrNullString()))
是否可以在Rest Assured中获取包含空格的键的值?
答案 0 :(得分:1)
您只需要使用单引号转义密钥:
then().body("'Entry ID'", not(isEmptyOrNullString()))
以下是一个示例(在3.0.6版中测试):
// Given
String json = "{\"Entry ID\" : \"654123\"}";
// When
JsonPath jsonPath = JsonPath.from(json);
// Then
assertThat(jsonPath.getString("'Entry ID'"), not(isEmptyOrNullString()));