空手道API测试-我们如何从Content-Type(文本/ html类型的响应)中提取值?

时间:2018-12-13 09:45:32

标签: karate web-api-testing

我有一个在正文中包含graphQL查询的请求。

当我发布它时,它返回Content-Type→text / html;的响应。 charset = utf-8和其他一些常规标头。 txt / html响应通常包括两件事:

  1. ColDefs作为第一行
  2. 第二行中的元数据

现在,我需要验证ColDefs始终出现在第一行中。第二行包含元数据。

如何确保响应的第一行始终包含colDefs,第二行包含元数据信息?

响应:

{     “ 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。

空手道回应:

{     “ colDefs”:[{         “ entityAttributeId”:“ abc”,         “ headerName”:“ xyz”,         “ field”:“ 2”,         “ entityPath”:“”,         “ entityId”:“ mna”     },{         “ entityAttributeId”:“ abc”,         “ headerName”:“ abc”,         “ field”:“ 3”,         “ entityPath”:“ abc”,         “ entityId”:“ abc” }

要复制的步骤:

URL:一些URL

标题:Content-Type ='application / json'
(在空手道功能中明确发送),

请求正文{

    "query": "query($someid: [String]) {some(someid:$someid) {someid someNm someVariable {someVariable someVariableid otherVariable{ otherVariable1 { variable CUSIP issuer { someVariable2 }}}}}}",
    "variables": {
        "someid": ["1090"]
    },
    "includeMetadata": false
}       

响应标题:连接→保持活动状态 内容长度→86488 内容类型→text / html; charset = utf-8

响应正文:

{
    "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” }

1 个答案:

答案 0 :(得分:1)

很明显,您的响应不是有效的JSON格式,并且是某些专有格式的-希望空手道为您神奇地进行转换,这是您期望的:)

我建议您编写一些Java代码来进行自定义验证。这里发生的是Karate尽力而为-能够将一半的响应解析为JSON并放弃其余部分。您实际上应该对此表示赞赏:)

由于空手道还保留原始响应的副本(以字节为单位)(从0.9.0版开始),因此您可以这样做:

* string temp = responseBytes

现在,请使用一些Java代码或自定义字符串解析-对temp(将是Java String)进行任何要求的操作。我不得不说,这看起来像是一个设计不良的API。