SerenityRest 过滤响应体
SerenityRest Filter Response Body
我正在尝试 return 值 "Welcome!",其中对象包含等于 "Subject" 的 "name" 键。响应体数据如下:
"payload": {
"mimeType": "multipart/alternative",
"headers": [
{
"name": "Mime-Version",
"value": "1.0"
},
{
"name": "Subject",
"value": "Welcome!"
},
{
"name": "To",
"value": "Jane Doe <xyz@xyz.com>"
},
{
"name": "Message-ID",
"value": "<123456.abc.com>"
}
以下代码段将 return 第一次遇到 "value":“1.0”,但我需要获取名称 = "Subject" 的值。我如何过滤结果并检查匹配的字符串?
Response response = SerenityRest.rest()
.contentType("application/json")
.get("URL")
response.then().statusCode(200);
String subject = response.jsonPath().getString("payload.headers.value");
值 "Welcome" 不是静态的,但 "name": "Subject" 永远不会改变。
我不确定是否理解你的问题,如果你正在寻找一个 jsonpath 过滤器来获取与字段 "name": "Subject"
关联的值,这应该通常有效:
"payload.headers[?(@.name=='Subject')].value"
但我看了一下 json-path rest-assured 这是 Serenity rest 用来执行 json-path 操作的库,那个库不使用标准的 json-path synthax,而是一个基于 synthax 的库在 groovy lambda 上执行高级搜索。所以这应该有效:
"headers.find{ it.name == 'Subject' }.value"
我用一个完整的例子来测试:
JsonPath.from("{\"payload\": {\n" +
" \"mimeType\": \"multipart/alternative\",\n" +
" \"headers\": [\n" +
" {\n" +
" \"name\": \"Mime-Version\",\n" +
" \"value\": \"1.0\"\n" +
" },\n" +
" {\n" +
" \"name\": \"Subject\",\n" +
" \"value\": \"Welcome!\"\n" +
" },\n" +
" {\n" +
" \"name\": \"To\",\n" +
" \"value\": \"Jane Doe <xyz@xyz.com>\"\n" +
" },\n" +
" {\n" +
" \"name\": \"Message-ID\",\n" +
" \"value\": \"<123456.abc.com>\"\n" +
" }\n" +
" ]\n" +
"}}")
.getString("headers.find{ it.name == 'Subject' }.value");
// returns "Welcome!"
这篇博客帮助我了解语法变化:
REST Assured 1.8 中有哪些新功能?
我正在尝试 return 值 "Welcome!",其中对象包含等于 "Subject" 的 "name" 键。响应体数据如下:
"payload": {
"mimeType": "multipart/alternative",
"headers": [
{
"name": "Mime-Version",
"value": "1.0"
},
{
"name": "Subject",
"value": "Welcome!"
},
{
"name": "To",
"value": "Jane Doe <xyz@xyz.com>"
},
{
"name": "Message-ID",
"value": "<123456.abc.com>"
}
以下代码段将 return 第一次遇到 "value":“1.0”,但我需要获取名称 = "Subject" 的值。我如何过滤结果并检查匹配的字符串?
Response response = SerenityRest.rest()
.contentType("application/json")
.get("URL")
response.then().statusCode(200);
String subject = response.jsonPath().getString("payload.headers.value");
值 "Welcome" 不是静态的,但 "name": "Subject" 永远不会改变。
我不确定是否理解你的问题,如果你正在寻找一个 jsonpath 过滤器来获取与字段 "name": "Subject"
关联的值,这应该通常有效:
"payload.headers[?(@.name=='Subject')].value"
但我看了一下 json-path rest-assured 这是 Serenity rest 用来执行 json-path 操作的库,那个库不使用标准的 json-path synthax,而是一个基于 synthax 的库在 groovy lambda 上执行高级搜索。所以这应该有效:
"headers.find{ it.name == 'Subject' }.value"
我用一个完整的例子来测试:
JsonPath.from("{\"payload\": {\n" +
" \"mimeType\": \"multipart/alternative\",\n" +
" \"headers\": [\n" +
" {\n" +
" \"name\": \"Mime-Version\",\n" +
" \"value\": \"1.0\"\n" +
" },\n" +
" {\n" +
" \"name\": \"Subject\",\n" +
" \"value\": \"Welcome!\"\n" +
" },\n" +
" {\n" +
" \"name\": \"To\",\n" +
" \"value\": \"Jane Doe <xyz@xyz.com>\"\n" +
" },\n" +
" {\n" +
" \"name\": \"Message-ID\",\n" +
" \"value\": \"<123456.abc.com>\"\n" +
" }\n" +
" ]\n" +
"}}")
.getString("headers.find{ it.name == 'Subject' }.value");
// returns "Welcome!"
这篇博客帮助我了解语法变化: REST Assured 1.8 中有哪些新功能?