POSTMAN模式验证甚至传递错误的响应

时间:2018-02-12 22:08:59

标签: json validation schema postman tv4

我有以下架构用于下面的快乐路径响应

var responseSchema = 
{
   "type": "object",
   "properties": {
      "value": {
        "type": "object",
        "properties":{
           "items": {
              "type": "array",
              "items": {
                 "type": "object",
                 "properties": {
                    "patientGuid": {"type": "string" },
                    "givenName": {"type": "string" },
                    "familyName": {"type": "string" } ,
                    "combinedName" : {"type": "string" }
                 },
                 "required": ["patientGuid","givenName","familyName"]
              }                 
           }
        }
      }
   }
};

快乐路径回应:

{
    "value": {
       "items": [
           {
              "patientGuid": "e9530cd5-72e4-4ebf-add8-8df51739d15f",
              "givenName": "Vajira",
              "familyName": "Kalum",
              "combinedName": "Vajira Kalum"
           }
        ],
        "href": "http://something.co",
        "previous": null,
        "next": null,
        "limit": 10,
        "offset": 0,
        "total": 1
    },
    "businessRuleResults": [],
    "valid": true
}

我检查条件是否验证响应模式是否正确:

if(responseBody !== null & responseBody.length >0)
{
    var responseObject = JSON.parse(responseBody);

    if(tv4.validate(responseObject, responseSchema))
    {  
      //  do something
    } 
    else
    {
      // log some msg
    }
}

架构验证条件(嵌套if)即使在我收到错误响应时也会通过。

{
    "value": {
        "items": [],
        "href": "http://something.co",
        "previous": null,
        "next": null,
        "limit": 10,
        "offset": 0,
        "total": 0
    },
    "businessRuleResults": [],
    "valid": true
}

我在这里做错了吗?为什么响应模式验证没有失败,因为响应没有必填字段? 提前感谢您的帮助

-ChinS

1 个答案:

答案 0 :(得分:1)

当我运行你的代码并从响应数据中删除一个属性时,它似乎工作正常:

Postman

我会建议一些事情 - tv4模块不是很棒,它没有被积极地工作(我认为这几年)并且邮差上提出了一些投诉/问题关于它有多糟糕并且要求在原生应用程序中替换它的项目。

您是否考虑过创建测试以检查架构?这是非常基础的,可以很容易地重构并包含在某些逻辑中,但它会检查您的响应的不同值类型。

pm.test("Response data format is correct", () => {
    var jsonData = pm.response.json()

    // Check the type are correct
    pm.expect(jsonData).to.be.an('object')
    pm.expect(jsonData.value).to.be.an('object')
    pm.expect(jsonData.value.items).to.be.an('array')
    pm.expect(jsonData.value.items[0]).to.be.an('object')

    // Check the value types are correct
    pm.expect(jsonData.value.items[0].combinedName).to.be.a('string')
    pm.expect(jsonData.value.items[0].givenName).to.be.a('string')
    pm.expect(jsonData.value.items[0].familyName).to.be.a('string')
    pm.expect(jsonData.value.items[0].patientGuid).to.a('string')
});

您正在使用的语法现在是旧样式,您不再需要JSON.parse(responseBody)响应正文,因为pm.response.json()基本上做同样的事情。