Как установить глобальный заголовок для всех файлов функций в Karate API

Мне нужно отправить запрос на получение токена авторизации и включить его в заголовок для всех последующих тестовых запросов. Этот токен меняется каждый раз, но он действителен в течение всего тестового сеанса, пока я продолжаю отправлять запросы. В каждом файле функции я могу вызвать другой файл функции, чтобы получить этот токен. Но я не хочу делать это для каждого файла функции. Я просто хочу получить токен один раз в начале теста и использовать его для всех файлов функций. Как я могу это сделать? Я прочитал информацию о карате на GitHub, но не нашел ответа.


person Community    schedule 23.12.2017    source источник


Ответы (1)


Второй пример в демонстрациях отвечает на все ваши вопросы: карате-демо .

РЕДАКТИРОВАТЬ1: Извините, я слишком быстро прочитал ваш вопрос. Вы можете использовать karate.call() в karate-config.js, чтобы он применялся ко всем файлам функций. Я не рекомендую это, потому что у вас всегда будут некоторые функции, которые вам НЕ нужны. Просто позвоните в функцию и не переусердствуйте с тестами.

EDIT2: я подумал об этом немного больше, если вам комфортно с Java, вы можете сделать вызов синглтона в начале каждой функции (или даже в глобальном karate-config.js), и в этом синглтонном кеше значение токена аутентификации . Таким образом, вы можете делать именно то, что вам нужно, и это будет гибко.

EDIT3: на основе этого вопроса - мы добавили эту функциональность в Каратэ как karate.callSingle() операцию, вот документ: https://github.com/intuit/karate/tree/develop#the-karate-object

person Peter Thomas    schedule 23.12.2017
comment
Питер, я попробовал первый метод, потому что он проще и мой api требует авторизации для всех запросов. Но я не могу заставить его работать. Мой karate-config.js выглядит так. Помогите, пожалуйста. функция () {var env = karate.env; karate.log ('системное свойство karate.env было:', env); var credentials = {loginName: 'admin', password: 'mypassword'} var token = karate.call ('GetTokenId.feature', учетные данные); } Ошибка: WARN com.intuit.karate.ScriptContext - конфигурация запуска не удалась, отсутствует или неверна 'karate-config.js' - не удалось вызвать функцию, arg: [object Object] - person ; 24.12.2017
comment
@bhc извините, я никак не могу понять из того, что вы опубликовали. Я предлагаю сначала заставить его работать с обычным вызовом в начале функции. затем перейти на этот высокий уровень. но просто попробуйте использовать префикс classpath для имени вызываемого файла функции. всего наилучшего: P - person Peter Thomas; 24.12.2017
comment
Он работал нормально после того, как я обновил версию с 0.2.7 до 0.6.2. Спасибо за помощь. - person ; 24.12.2017
comment
Не уверен, почему мой голос не был принят. Похоже, что первый метод не совсем то, что я хочу, потому что запрос токена в karate-config.js выполняется для каждого файла функции. Я хочу, чтобы токен устанавливался глобально только при запуске, и все файлы функций могут его использовать. Придется попробовать второй способ. Но это займет у меня некоторое время, потому что я не очень хорошо знаком с Java. - person ; 25.12.2017
comment
@bhc спасибо за отзыв, я подумаю о добавлении этой функции в Karate, чтобы вам не нужно было использовать Java. - person Peter Thomas; 26.12.2017
comment
@bhc есть новая опция karate.callSingle() и версия 0.7.0.RC1, которую вы можете попробовать - вот документ: github.com/intuit/karate/tree/develop#the-karate-object - было бы здорово, если бы у вас была возможность проверить - person Peter Thomas; 30.12.2017
comment
Я провел несколько тестов, и все прошло хорошо. Это именно то, что мне нужно. Большое спасибо за эту новую опцию. - person ; 31.12.2017
comment
Цитата Питера Томаса: можно использовать karate.configure('headers', { aheader: 'yourHeaderValue' }) для статических заголовков - person zakaria amine; 24.05.2019