Как написать глобальные функции в Postman
Мне нужна помощь при написании общей функции для использования через коллекцию запросов, которая поможет при создании фреймворка.
Я попытался использовать следующий формат
Следующая функция объявлена на вкладке "Тест" в первой функции
postman.setGlobalVariable("function", function function1(parameters)
{
//sample code
});
В предварительном запросе я использовал следующее
var delay = eval(globals.function);
delay.function1(value1);
Я получаю следующую ошибку
при оценке предварительного запроса script была ошибка: невозможно прочитать свойство 'function1' undefined.
Может ли кто-нибудь помочь мне определить глобальные/общие функции и использовать их во всех запросах?
Заранее спасибо
Ответы
Ответ 1
Я использую этот маленький хак:
pm.globals.set('loadUtils', function loadUtils() {
let utils = {};
utils.reuseableFunction = function reuseableFunction() {
let jsonData = JSON.parse(responseBody);
}
return utils;
} + '; loadUtils();');
tests['Utils initialized'] = true;
В другом запросе я могу повторно использовать глобальную переменную loadUtils
:
const utils = eval(globals.loadUtils);
utils.reuseableFunction();
Вы также можете проверить план разработчиков команды почтальона. Сценарии уровня коллекции находятся в ближайшей перспективе и должны быть доступны в ближайшее время, пока вы не сможете использовать показанный метод.
Ответ 2
У вас может быть более удобочитаемое решение и больше возможностей для разметки вашего кода (например, вызова function1()
из function2()
непосредственно внутри скрипта предварительного запроса или объявления пакетов) со следующим синтаксисом:
Инициализировать среду (или глобальные переменные):
postman.setEnvironmentVariable("utils", () => {
var myFunction1 = () => {
//do something
}
var myFunction2 = () => {
let func1Result = myFunction1();
//do something else
}
return {
myPackage: {
myFunction1,
myFunction2
}
};
});
А затем используйте ваши функции в следующем тесте:
let utils = eval(environment.utils)();
utils.myPackage.myFunction1(); //calls myFunction1()
utils.myPackage.myFunction2(); //calls myFunction2() which uses myFunction1()
Бонус:
Если вы вызываете API и вам нужно дождаться завершения вызова перед выполнением теста, вы можете сделать что-то вроде этого:
postman.setEnvironmentVariable("utils", () => {
var myFunction = (callback) => {
return pm.sendRequest({
// call your API with postman here
}, function (err, res) {
if (callback) {
//if a callback method has been given, it called
callback();
}
});
}
return {
myPackage: {
myFunction,
}
};
});
а затем использовать его:
utils.myPackage.myFunction(function() {
console.log("this is the callback !")
//perform test here
});
Ответ 3
если вы хотите вызвать pm.sendRequest
в глобальной функции, попробуйте это:
-
определить глобальную функцию в предварительном запросе к коллекции, например:
postman.setGlobalVariable("globalFunction", (parameters) => { console.log(parameters); pm.sendRequest('https://google.com/', function(err, resp) { pm.expect(err).to.not.be.ok; }); });
-
используйте функцию как это:
eval(globals.globalFunction)('hello world!!');
Обратите внимание, что я объявил функцию, используя стиль стрелки ()=>{}
. иначе это не сработало бы
Ответ 4
Вы можете объявить глобальную функцию, назначив эту функцию в коллекцию, среду или глобальную переменную следующим образом:
- Создайте переменную коллекции, т.е. global_func
- В значение переменной напишите этот код,
(number)=> { return number * number }
повторно использовать эту функцию в другом месте вашей коллекции
let numberSquared = eval(pm.variables.get('global_func'))(5)
теперь переменные numberSqaure имеют значение 25
================================
если вам нужно объявить библиотеку функций:
Вы можете создать переменную коллекции и назначить ей этот фрагмент кода:
({
print:function() {
console.log('hello Postman')
},
squared:function(number) {
return number * number
}
})
Примечание: функции заключены в скобки
повторно использовать эту библиотеку:
let lib = eval(pm.variables.get('global_func'))
lib1.print()
console.log(lib1.squared(4))
Удачи :)