邮差阵列架构验证

时间:2019-07-08 11:25:32

标签: json postman json-schema-validator

邮递员中的数组json模式验证存在问题。

var schema = {
    "type": "array",
    "items": [{
         "id": {
            "type":"long"
             },
         "name": {
             "type":"string"
             },
         "email": {
             "type":"string"
            }
    }]
};


pm.test('Response schema type nodes verification', function() {
  pm.expect(tv4.validate(pm.response.json(), schema)).to.be.true;
});

响应主体为:

[
    {
        "id": 1,
        "name": "test1",
        "email": "a@a.com"
    },
    {
        "id": 2,
        "name": "test2",
        "email": "a@a.com"
    },
 .
 .
 .
]

我总是通过结果。我也尝试过删除[]

问题出在哪里?

3 个答案:

答案 0 :(得分:2)

所使用的架构不正确,您需要将数组中的项目类型定义为object。正确的JSON模式如下所示:

var schema = {
    "type": "array",
    "items": [{
        type: "object",
        properties:{
         "id": {
            "type":"integer"
             },
         "name": {
             "type":"string"
             },
         "email": {
             "type":"string"
            }
        }
    }]
};


pm.test('Response schema type nodes verification', function() {
  pm.expect(tv4.validate(pm.response.json(), schema)).to.be.true;
});

请注意,JSON架构中只有2个数字类型:integernumber。没有long类型。

答案 1 :(得分:1)

您还可以使用Ajv,它已经包含在Postman本机应用程序中,并且该项目得到了积极维护:

var Ajv = require("ajv"),
    ajv = new Ajv({logger: console}),
    schema = {
        "type": "array",
        "items": {
            "type": "object",
            "properties": {
                "id": { "type": "integer" },
                "name": { "type": "string" },
                "email": { "type": "string" }
            }  
        }
    };


pm.test("Schema is valid", function() {
        pm.expect(ajv.validate(schema, pm.response.json())).to.be.true;
});

答案 2 :(得分:1)

嗨,您应该先将架构解析为json,否则在某些情况下它将被视为空数据。

正确的代码如下:

let jsonData = JSON.parse(responseBody);

schema = JSON.parse(schema); 

现在,您必须将递归验证和未定义的属性检查传递给tv4.validation函数。

pm.test('Response schema type nodes verification', function() {
  pm.expect(tv4.validate(pm.response.json(), schema, true, true)).to.be.true;
});

tv4.validate(pm.response.json(),架构,正确,正确)

将递归检查json数据,并且如果共振数据中存在任何新属性,则它将无法通过验证。