Подтвердить что ты не робот

Как написать глобальные функции в Postman

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

Я попытался использовать следующий формат

Следующая функция объявлена ​​на вкладке "Тест" в первой функции

postman.setGlobalVariable("function", function function1(parameters)
{
  //sample code
});

В предварительном запросе я использовал следующее

var delay = eval(globals.function);
delay.function1(value1);

Я получаю следующую ошибку

при оценке предварительного запроса script была ошибка: невозможно прочитать свойство 'function1' undefined.

Может ли кто-нибудь помочь мне определить глобальные/общие функции и использовать их во всех запросах?

Заранее спасибо

4b9b3361

Ответ 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 в глобальной функции, попробуйте это:

  1. определить глобальную функцию в предварительном запросе к коллекции, например:

    postman.setGlobalVariable("globalFunction", (parameters) => { console.log(parameters); pm.sendRequest('https://google.com/', function(err, resp) { pm.expect(err).to.not.be.ok; }); });

  2. используйте функцию как это:

    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))

Удачи :)