Как я могу записать все ошибки в tv4.validateMultiple на вкладку Результаты теста с правильным состоянием ошибки - PullRequest
0 голосов
/ 22 марта 2019

Мне удалось получить сообщения об ошибках, сгенерированные из 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.

1 Ответ

0 голосов
/ 22 марта 2019

Я уверен, что это можно улучшить, но работает следующее:

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