【问题标题】:How can I log all failures in tv4.validateMultiple to Test Results tab with correct fail status如何将 tv4.validateMultiple 中的所有失败记录到具有正确失败状态的测试结果选项卡
【发布时间】:2019-03-21 21:35:45
【问题描述】:

我已经能够让 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 中报告所有失败。

【问题讨论】:

    标签: postman tv4


    【解决方案1】:

    我确信这可以改进,但以下工作。

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 2020-02-25
      相关资源
      最近更新 更多