output response Body где-то со скриптом newman из коллекции почтальонов

Я пытаюсь запустить script.js с newman из локально сохраненной коллекции почтальонов. В почтальоне вызов работает и возвращает токен тела ответа, к которому мне нужен доступ.

Меня не волнует, как будет возвращено тело ответа, я просто не хочу открывать почтальона, если мне не нужно.

Я постоянно получаю сообщение об ошибке ReferenceError: responseBody is not defined

Любая помощь по этому поводу будет очень признательна.

$ node script.js

var newman = require('newman'); // require newman in your project

// call newman.run to pass `options` object and wait for callback
newman.run({
    collection: require('./pathto/my_coll.postman_collection.json'),
    reporters: 'cli'
}, function (err) {
    if (err) { throw err; }
    // console.log(responseBody);
    JSON.parse(responseBody);

});

ни console.log, ни JSON.parse, похоже, не работают, потому что responseBody не определен с самого начала

исчерпанные ссылки:

https://www.getpostman.com/docs/v6/postman/scripts/postman_sandbox

https://www.npmjs.com/package/newman

как получить весь html или json ответ URL-адреса с помощью Newman API


person RobBenz    schedule 29.03.2018    source источник


Ответы (3)


Коллекция почтальонов - это набор запросов.

Вы запускаете всю коллекцию (которая представляет собой серию запросов, выполняемых Ньюманом вместе)

Таким образом, ведение журнала / синтаксический анализ responseBody в функции обратного вызова некорректно (выражая это логически).

Согласно Newman Docs, . Обратный вызов функции run вызывается с двумя параметрами: err и summary.

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

Теперь то, что вы пытаетесь сделать, это в основном зарегистрировать ответ на запрос (ы).

Вам нужно написать console.log(responseBody) / JSON.parse(responseBody) внутри тестовых сценариев для каждого запроса в коллекции, а затем при запуске коллекции с помощью newman каждое responseBody для каждого запроса будет отключено / проанализировано в соответствии с вашими потребностями. .

Чтобы получить доступ к сводке, вы можете изменить свою функцию следующим образом:

var newman = require('newman');
newman.run({
    collection: require('./C1.postman_collection.json'),
    reporters: 'cli'
}, function (err, summary) {
    if (err) { throw err; }
    console.log(summary);
});
person Sivcan Singh    schedule 29.03.2018
comment
Спасибо за очень подробный и информативный ответ. после добавления console.log(responseBody); на мою вкладку Tests, а затем ПОВТОРНО ЭКСПОРТИРУЙТЕ мою коллекцию в локальное расположение. Мне удалось распечатать ответ на оболочку. Большое тебе спасибо. - person RobBenz; 29.03.2018

Вы можете попробовать console.log(summary.run.executions) и углубиться в него оттуда. Сценарий Ньюмана на самом деле не знает, что responseBody в этом контексте, поэтому он не знает, из чего следует выйти.

Дополнительную информацию см. В документации Newman. https://github.com/postmanlabs/newman/blob/develop/README.md#cli-reporter-options

person Danny Dainton    schedule 29.03.2018
comment
спасибо за вклад. ReferenceError: summary is not defined - person RobBenz; 29.03.2018
comment
возможно, я запускаю node скрипт из неправильного каталога? - person RobBenz; 29.03.2018
comment
Newman установлен глобально? Если это так, то все должно быть в порядке. Просмотрите документацию и попробуйте разные варианты, чтобы оценить разные результаты. - person Danny Dainton; 29.03.2018
comment
stackoverflow.com/questions/40120232/ был полезно для преобразования execution.response.stream в JSON / строку - person jmcker; 26.10.2020

Должно быть достигнуто путем анализа буферного потока:

var newman = require('newman');
newman.run({
    collection: require('./C1.postman_collection.json'),
    reporters: 'cli'
}, function(err, summary) {
    if (err) {
        throw err;
    }
    summary.run.executions.forEach(exec => {
        console.log('Request name:', exec.item.name);
        console.log('Response:', JSON.parse(exec.response.stream));

    });
});
person Abhinaba    schedule 22.12.2020