空手道 API 测试 - 我们如何从 Content-Type: text/html 类型的响应中提取值?
Karate API Testing - How do we extract values from Content-Type: text/html kind of response?
我有一个请求,其中包含 body 中的 graphQL 查询。
当我 post 它时,它 returns 对 Content-Type →text/html; charset=utf-8
和其他一些常用 headers 的响应。 txt/html
响应通常包括两件事:
- ColDefs 作为第一行
- 第二行的元数据
现在我需要验证 ColDefs 是否始终出现在第一行。第二行包含元数据。
如何确保响应第一行始终包含 colDefs 并且 second-row 包含元数据信息?
响应:
{
"colDefs": [{
"entityAttributeId": "abc",
"headerName": "xyz",
"field": "2",
"entityPath": "",
"entityId": "mna"
}, {
"entityAttributeId": "abc",
"headerName": "abc",
"field": "3",
"entityPath": "abc",
"entityId": "abc"
}
]
} {
"1": "1000",
"2": "abc",
"3": "abc",
"4": 12,
"5": "6457.T",
"6": "123",
"7": "abc"
} {
"1": "123",
"2": "abc",
"3": "abc",
"4": 123,
"5": "123",
"6": "",
"7": "abc"
}
当我尝试打印空手道 响应 时,它没有打印 second-row(元数据)内容,它只是打印 colDefs。
空手道反应:
{
"colDefs": [{
"entityAttributeId": "abc",
"headerName": "xyz",
"field": "2",
"entityPath": "",
"entityId": "mna"
}, {
"entityAttributeId": "abc",
"headerName": "abc",
"field": "3",
"entityPath": "abc",
"entityId": "abc"
}
复制步骤:
URL: 一些 URL
Headers: Content-Type = 'application/json'
(在空手道功能中明确发送),
请求Body
{
"query": "query($someid: [String]) {some(someid:$someid) {someid someNm someVariable {someVariable someVariableid otherVariable{ otherVariable1 { variable CUSIP issuer { someVariable2 }}}}}}",
"variables": {
"someid": ["1090"]
},
"includeMetadata": false
}
Response Header: Connection →keep-alive
Content-Length →86488
Content-Type →text/html; charset=utf-8
响应Body:
{
"colDefs": [{
"entityAttributeId": "abc",
"headerName": "xyz",
"field": "2",
"entityPath": "",
"entityId": "mna"
}, {
"entityAttributeId": "abc",
"headerName": "abc",
"field": "3",
"entityPath": "abc",
"entityId": "abc"
}
]
} {
"1": "1000",
"2": "abc",
"3": "abc",
"4": 12,
"5": "6457.T",
"6": "123",
"7": "abc"
} {
"1": "123",
"2": "abc",
"3": "abc",
"4": 123,
"5": "123",
"6": "",
"7": "abc"
}
空手道反应:
{
"colDefs": [{
"entityAttributeId": "abc",
"headerName": "xyz",
"field": "2",
"entityPath": "",
"entityId": "mna"
}, {
"entityAttributeId": "abc",
"headerName": "abc",
"field": "3",
"entityPath": "abc",
"entityId": "abc"
}
很明显,您的回复无效 JSON 并且采用了某些专有格式 - 期望空手道能够神奇地转换它,您的期望太高了 :)
我建议您编写一些 Java 代码来进行自定义验证。这里发生的是 Karate 尽力而为 - 能够将一半的响应解析为 JSON 并放弃其余部分。你真的应该欣赏这个:)
由于 Karate 还以字节形式保留原始响应的副本(从 0.9.0 版开始),您可以这样做:
* string temp = responseBytes
现在请使用一些 Java 代码或自定义字符串解析 - 并在 temp
上执行您的任何要求,这将是 Java String
。我不得不说这看起来设计得很糟糕 API.
我有一个请求,其中包含 body 中的 graphQL 查询。
当我 post 它时,它 returns 对 Content-Type →text/html; charset=utf-8
和其他一些常用 headers 的响应。 txt/html
响应通常包括两件事:
- ColDefs 作为第一行
- 第二行的元数据
现在我需要验证 ColDefs 是否始终出现在第一行。第二行包含元数据。
如何确保响应第一行始终包含 colDefs 并且 second-row 包含元数据信息?
响应:
{
"colDefs": [{
"entityAttributeId": "abc",
"headerName": "xyz",
"field": "2",
"entityPath": "",
"entityId": "mna"
}, {
"entityAttributeId": "abc",
"headerName": "abc",
"field": "3",
"entityPath": "abc",
"entityId": "abc"
}
]
} {
"1": "1000",
"2": "abc",
"3": "abc",
"4": 12,
"5": "6457.T",
"6": "123",
"7": "abc"
} {
"1": "123",
"2": "abc",
"3": "abc",
"4": 123,
"5": "123",
"6": "",
"7": "abc"
}
当我尝试打印空手道 响应 时,它没有打印 second-row(元数据)内容,它只是打印 colDefs。
空手道反应:
{
"colDefs": [{
"entityAttributeId": "abc",
"headerName": "xyz",
"field": "2",
"entityPath": "",
"entityId": "mna"
}, {
"entityAttributeId": "abc",
"headerName": "abc",
"field": "3",
"entityPath": "abc",
"entityId": "abc"
}
复制步骤:
URL: 一些 URL
Headers: Content-Type = 'application/json'
(在空手道功能中明确发送),
请求Body
{
"query": "query($someid: [String]) {some(someid:$someid) {someid someNm someVariable {someVariable someVariableid otherVariable{ otherVariable1 { variable CUSIP issuer { someVariable2 }}}}}}",
"variables": {
"someid": ["1090"]
},
"includeMetadata": false
}
Response Header: Connection →keep-alive
Content-Length →86488
Content-Type →text/html; charset=utf-8
响应Body:
{
"colDefs": [{
"entityAttributeId": "abc",
"headerName": "xyz",
"field": "2",
"entityPath": "",
"entityId": "mna"
}, {
"entityAttributeId": "abc",
"headerName": "abc",
"field": "3",
"entityPath": "abc",
"entityId": "abc"
}
]
} {
"1": "1000",
"2": "abc",
"3": "abc",
"4": 12,
"5": "6457.T",
"6": "123",
"7": "abc"
} {
"1": "123",
"2": "abc",
"3": "abc",
"4": 123,
"5": "123",
"6": "",
"7": "abc"
}
空手道反应:
{
"colDefs": [{
"entityAttributeId": "abc",
"headerName": "xyz",
"field": "2",
"entityPath": "",
"entityId": "mna"
}, {
"entityAttributeId": "abc",
"headerName": "abc",
"field": "3",
"entityPath": "abc",
"entityId": "abc"
}
很明显,您的回复无效 JSON 并且采用了某些专有格式 - 期望空手道能够神奇地转换它,您的期望太高了 :)
我建议您编写一些 Java 代码来进行自定义验证。这里发生的是 Karate 尽力而为 - 能够将一半的响应解析为 JSON 并放弃其余部分。你真的应该欣赏这个:)
由于 Karate 还以字节形式保留原始响应的副本(从 0.9.0 版开始),您可以这样做:
* string temp = responseBytes
现在请使用一些 Java 代码或自定义字符串解析 - 并在 temp
上执行您的任何要求,这将是 Java String
。我不得不说这看起来设计得很糟糕 API.