我在 Postman 中进行了 json 架构测试。
schema = {
"items": {
"required": [
"id",
"payment_id",
"bank_info_id",
"account_number",
"account_owner",
"entity_sub_systems",
"is_main",
"public_id"
]
}
}
pm.test("JSON schema check", function () {
pm.response.to.have.jsonSchema(schema);
});
它有效。但也存在一些问题。 该测试主要检查键的名称。例如,如果响应 json 包含“isMain”而不是“is_main”。测试失败,因为响应没有必需的键“is_main”。或者,如果架构的键数量多于响应中的键数量。
问题是,如果响应 json 有额外的键,测试不会失败。例如,如果 json 模式是这样的,并且响应 json 的键比模式中的键多
schema = {
"items": {
"required": [
"id",
"payment_id",
"bank_info_id",
"is_main",
"public_id"
]
}
}
Response body
{
"id":"65161",
"payment_id":"65161",
"bank_info_id":"65161",
"is_main":true,
"public_id":"65161",
"something":"65161"
}
测试不会失败。
那么,问题是如何严格按照所需的 json 架构键检查响应 json?
以下 Postman 文档 - 小型验证器可以工作,但在 Postman 10 版本之后不支持工作。 以下测试也通过了额外的按键响应。
var jsonData = JSON.parse(responseBody);
pm.test('Checking Response Against Schema Validation', function() {
var result=tv4.validateMultiple(jsonData, schema);
console.log(result);
pm.expect(result.valid).to.be.true;
});
最佳答案
架构中有一个名为additionalProperties的字段。如果我们指定它false,那么它将不允许附加属性。希望这个Doc有帮助。
const schema = {
"items": {
"required": [
"id",
"payment_id",
"bank_info_id",
"account_number",
"account_owner",
"entity_sub_systems",
"is_main",
"public_id"
],
"additionalProperties": false,
"properties": {
"id": {},
"payment_id": {},
"bank_info_id": {},
"account_number": {},
"account_owner": {},
"entity_sub_systems": {},
"is_main": {},
"public_id": {}
}
}
};
关于testing - 如何在Postman中检查json模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76097815/