我已经能够从tv4.validateMultiple生成的错误消息显示在测试结果中,但是我不知道如何将它们设置为显示失败状态。
var jsonData = JSON.parse(responseBody);
var schema = {...contains multiple error}
var results = tv4.validateMultiple(jsonData, schema);
if(results.valid){
pm.test('Response has valid schema') = true;
} else {
for (var i = 0; i < results.errors.length; i++) {
pm.test("Contract: JSON Response has invalid schema in path [" + results.errors[i].dataPath + " | " + results.errors[i]);
}
}
">测试结果"选项卡中记录了多条消息,但状态为"通过"。 使用"旧式"邮递员测试[],您可以设置它 = false。 但这不能在 for 循环中使用,因为测试将在第一次失败时结束。 pm.test 将继续,但状态为"通过"。
我尝试将pm.test('Schema is valid', function(( {pm.expect...}放在for循环中,但收到消息"不要在循环中制作函数"消息。 所以我试着把功能部分拉到外面,这也不起作用。
我也尝试过 Ajv 并设置 allErrors:true。
我所要做的就是验证整个响应,并在"测试"选项卡和 xtrareports中报告所有失败。
我相信这可以改进,但以下有效。
var jsonData = JSON.parse(responseBody);
var schema = {
"type": "object",
"properties": {
"data": {
"type": "object",
"additionalProperties": false,
"properties": {
"field1": { "type": "string", "pattern": uuid_format },
"field2": { "type": "string", "pattern": date_format },
"field3": { "type": "string" },
"field4": { "type": "string", "enum": ["ACTIVE", "INACTIVE"]},
}
},
"pages": { "type": ["string", "null"]
}
}
};
var result = tv4.validateMultiple(jsonData, schema);
if (result.valid){
pm.test("Contract: JSON Response has valid schema"), setTestStatus;
} else {
for (var i = 0; i < result.errors.length; i++) {
pm.test('JSON Response is INVALID ' + result.errors[i].dataPath +" " + result.errors[i].message, setTestStatus);
}
}
function setTestStatus() {
pm.expect(result.valid).to.be.true;
}
我无法使用 ajv 获得正确的通过/失败状态,我想使用它而不是 tv4。 我确信这与我的正则表达式或类似的一些细节有关,即使我使用在线验证器测试了正则表达式模式/响应值和架构。 但无论如何,它就在这里。
var uuid_format = '/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/i'
var Ajv = require('ajv'),
ajv = new Ajv({logger: console, allErrors: true}),
var jsonData = JSON.parse(responseBody);
var schema = {...see above...}
var valid = ajv.validate(schema, jsonData);
if(valid){
pm.test('Contract: JSON Response is valid', setTestStatus);
} else {
for (var i = 0; i < ajv.errors.length; i++) {
pm.test('JSON Response is INVALID ' + ajv.errors[i].dataPath +" " + ajv.errors[i].message, setTestStatus);
}
}
function setTestStatus() {
pm.expect(result.valid).to.be.true;
}