POSTman - тест с пользовательской функцией выдает ошибку подтверждения - PullRequest
0 голосов
/ 06 ноября 2019

Я провожу тест с почтальоном, анализируя файлы JSON. Я понял, что большую часть времени я выполняю один и тот же тест для нескольких свойств, поэтому я решил создать пользовательскую функцию и добавить ее в тест в качестве параметра.

Как только я это сделаю, всякий раз, когдаутверждение не выполнено, оно выдаст ошибку подтверждения, а не провалит сам тест. Тест не будет отображаться в окне «Результаты тестов».

Он работает, когда утверждение успешно выполнено. Тест проходит и отображается в окне Результаты теста.

Он работает без пользовательской функции, но в этом случае каждый тест будет иметь свою собственную функцию с той же строкой кода, и это то, что я хотелИзбегайте.

function myFunction(propertyName,testData) {
    {   
            return pm.expect(testData).to.have.property(propertyName);
    }
}

var data = JSON.parse(responseBody);

var testData = data.entries;
/*TESTS USING CUSTOM FUNCTION*/
for (var i = 0; i < 5; i++) { 
    try{
    //This test PASSES and shows in the Test Results window.
        pm.test("test1", myFunction('summonerId',testData[i])); 
    }catch(error){
        console.log(error);
    }
    try{
    //This test PRODUCES AN ERROR and DOESN'T shows in the Test Results window.
        pm.test("test2", myFunction('somethingElse',testData[i])); 

    }catch(error){
        console.log(error);
    }
 }
/*TESTS USING ONE FUNCTION PER TEST*/
for (var i = 0; i < 5; i++) { 

    try{
    //This test PASSES and shows in the Test Results window.
        pm.test("test1", function(){
           pm.expect(testData).to.have.property('summonerId'); 
        }); 

    }catch(error){
        console.log(error);
    }
    try{
    //This test FAILS and shows in the Test Results window, without errors
        pm.test("test2", function(){
            pm.expect(testData).to.have.property('somethingElse'); 
        });
    }catch(error){
        console.log(error);
    }
 }

Так что при использовании пользовательской функции, если утверждение успешно, все в порядке, и тест отображается как PASSED, НО, если утверждение не выполнено, он выдает ошибку вместо того, чтобы провалить тест,и тест не отображается как «НЕИСПРАВНЫЙ».

ОШИБКА АСПЕКТА:

message: "expected { Object (summonerId, summonerName, ...) } to have property 'somethingElse'"
name: "AssertionError"
showDiff: false
stack: "AssertionError: expected { Object (summonerId, summonerName, ...) } to have property 'somethingElse'
    at myFunction (eval at exec (evalmachine.<anonymous>:13040:2548), <anonymous>:9:52)
    at Object.eval (eval at exec (evalmachine.<anonymous>:13040:2548), <anonymous>:24:30)
    at Uniscope.exec (evalmachine.<anonymous>:13040:2583)
    at module.exports (evalmachine.<anonymous>:69:538)
    at Object.<anonymous> (evalmachine.<anonymous>:72:1871)
    at evalmachine.<anonymous>:16:26
    at Array.forEach (<anonymous>)
    at Object.emit (evalmachine.<anonymous>:15:54)
    at evalmachine.<anonymous>:52:24
    at evalmachine.<anonymous>:5:21"

enter image description here Всего тест показывает 15 тестов. 10 PASSED 5 FAILED.

5 тест отсутствует (те, которые должны FAIL, при использовании пользовательской функции).

{
    "tier": "CHALLENGER",
    "leagueId": "65ebcd4f-368c-30f6-a635-976beb0e1a8c",
    "queue": "RANKED_SOLO_5x5",
    "name": "Varus's Outriders",
    "entries": [
        {
            "summonerId": "bPZhuLrFtF8ntu6a3JfnYNFX-NfG0LFX7aelPDd2Xegav-MM",
            "summonerName": "dang qiu qian",
            "leaguePoints": 739,
            "rank": "I",
            "wins": 162,
            "losses": 130,
            "veteran": true,
            "inactive": false,
            "freshBlood": false,
            "hotStreak": false
        },
        {
            "summonerId": "gk0lUIs1j9pMAWxa723hurPSDXAGbaXFJRdfek9WfQvWURA",
            "summonerName": "DV1 Matislaww",
            "leaguePoints": 795,
            "rank": "I",
            "wins": 757,
            "losses": 680,
            "veteran": false,
            "inactive": false,
            "freshBlood": false,
            "hotStreak": false
        }
]}

1 Ответ

0 голосов
/ 07 ноября 2019

Я понял это благодаря @prateeksarda в этом посте Почтальон AssertionError при тестировании с использованием определенной функции .

Действительно, способ вызова функции имеет значение. Если вместо явного вызова функции мы вызовем ее в обратном вызове, результат будет правильным.

for (var i = 0; i < 5; i++) { 

        pm.test("test1", function(){
            myFunction('summonerId',testData[i])
        }); //This test PASSES and shows in the Test Results window.

        pm.test("test2", function(){
            myFunction('somethingElse',testData[i])
        }); //This test FAILS and shows in the Test Results window. :)

 }

Это работает как талисман.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...