Здесь происходит несколько вещей.
Локальные проблемы с областями видимости
В вашей переменной glbl
отсутствует var
, const
или let
ключевое слово.
Отсутствие этого ключевого слова не приводит к тому, что переменная всплывает и сама становится глобальной.Среда Сценарий предварительного запроса и Сценарий предварительного запроса имеют разные области действия.
Как вы уже убедились, когда вы перемещаете сценарий исключительно на уровень запроса, все находится в одной области действия, поэтому это работаетотлично.
Создание глобальных функций
Почтальон имеет возможность создавать свои собственные глобальные переменные.Это может быть сделано программно через pm.globals.set
и pm.globals.get
.https://www.getpostman.com/docs/v6/postman/environments_and_globals/variables#accessing-variables-through-scripts
Существуют некоторые ограничения для этих переменных: вы можете хранить в них только строки, поэтому созданный вами объект и функция не сохранятся, если мы не сделаем что-то для изменения их типа.
В этом случае, прежде чем мы установим какие-либо переменные, мы должны убедиться, что мы:
toString
любые функции JSON.stringify
любые объекты
Теперь скрипт предварительного запроса для нашей коллекции будет выглядеть так:
const doRequest = (callback) => {
const echoPostRequest = {
url: 'https://postman-echo.com/post',
method: 'POST',
header: 'headername1:value1',
body: {
mode: 'raw',
raw: JSON.stringify({ key: 'this is json' })
}
};
console.log('ready to send request');
pm.sendRequest(echoPostRequest, function (err, res) {
console.log('request sent', err ? err : res.json());
callback();
});
};
const glbl = {
doRequest: doRequest.toString()
};
pm.globals.set('glbl', JSON.stringify(glbl));
Чтобы использовать это на уровне запроса, нам также необходимо обновить наш сценарий предварительного запроса:
const glbl = JSON.parse(pm.globals.get('glbl'));
const doRequest = eval(glbl.doRequest);
doRequest(() => console.log('works!'));