繁体   English   中英

如何将tv4.validateMultiple中的所有故障记录到具有正确失败状态的“测试结果”选项卡

[英]How can I log all failures in tv4.validateMultiple to Test Results tab with correct fail status

我已经能够从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将继续,但状态通过。

我尝试在for循环中放置pm.test('Schema is valid',function(){pm.expect ...}但是得到消息“不要在循环中生成函数”消息。所以我尝试拉动外面的功能部分,也没用。

我也试过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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM