Обновление
Я полностью переписал этот вопрос на основе последующего расследования. Надеюсь, это даст некоторые ответы.
Я новичок в Postman и пытаюсь выяснить, как наиболее эффективно создать набор тестов для REST-приложения. В каждом из моих тестовых сценариев есть несколько полезных функций, которые я хотел бы иметь в своем распоряжении, но вырезать и вставить их в каждый тестовый сценарий кажется ужасным решением.
Рассматривая различные «области», с которыми Postman позволяет вам сжимать данные (например, глобальные переменные, окружение, сбор), кажется, что все это просто хранилища строк / чисел. Другими словами, он должным образом хранит их, если вы можете / действительно зашифровать результаты. Но на самом деле это не позволяет вам хранить надлежащие объекты или функции. Это имеет смысл, поскольку каждый сценарий, по-видимому, выполняется как отдельное выполнение, поэтому идея совместного использования указателей на разные сценарии не имеет смысла.
Кажется, что общепринятым способом совместного использования служебных функций является toString () функция в определяющем скрипте (например, скрипт Pre-Req коллекции), а затем eval () этой строковой версии в тестовом скрипте. Например:
Сборник Pre-Req Script
const utilFunc = () => { console.log("I am a utility function"); };
pm.environment.set("utilFunc",utilFunc.toString() );
Тестовый скрипт
const utilFunc = eval(pm.environment.get("utilFunc"));
utilFunc();
Тестовый скрипт успешно выведет на консоль «Я - служебная функция».
Я видел, как люди делали более сложные вещи, когда, если у них было более одной служебной функции, помещали их в объект, такой как utils.func1
и utils.func2
, и чтобы общая функция возвращала объект utils
, поэтому тестовый сценарий все еще должен иметь одну строку вверху, импортирующую все это.
Проблема, с которой я сталкиваюсь, заключается в области видимости - поскольку буквальный текст функции выполняется в тестовом скрипте, все, что должна иметь функция утилиты, должно быть в этом коде или иным образом существовать в eval()
время в тестовом сценарии. Например, если я сделаю:
Сборник Pre-Req Script
const baseUtilFunc = (foo) => { console.log(foo); };
const utilFunc1 = (param) => { baseUtilFunc("One: " + param); };
const utilFunc2 = (param) => { baseUtilFunc("Two: " + param); };
pm.environment.set("utilFunc1",utilFunc1.toString() );
pm.environment.set("utilFunc2",utilFunc2.toString() );
Тестовый скрипт
const utilFunc1 = eval(pm.environment.get("utilFunc1"));
const utilFunc2 = eval(pm.environment.get("utilFunc2"));
utilFunc1("Test");
Сбой, потому что в тестовом скрипте baseUtilFunc
не существует. Очевидно, в этом примере это было бы легко исправить. Но в более сложном мире, где функции утилит, которые я собираюсь использовать в своих тестовых скриптах, сами по себе строятся поверх базовых вспомогательных функций, это становится все труднее.
Так, как правильно решить эту проблему? Люди просто втискивают всю соответствующую логику в одну большую функцию, которую они затем вызывают toString()
? Встраивают ли они извлечение из окружения и затем в eval в каждую функцию util в своем определении, чтобы оно работало в контексте тестового сценария? Они экспортируют каждый отдельный метод?