Можно ли перезаписать параметры в вызываемом файле объектов, которые были определены в фоновом режиме или сценарии? - PullRequest
2 голосов
/ 14 мая 2019

https://github.com/intuit/karate#calling-other-feature-files

Приведенная выше ссылка содержит пример вызова файла объектов для повторного использования кода.Файл объекта, который используется повторно, вызывается с помощью входных данных

Background:
* configure headers = read('classpath:my-headers.js')
* def signIn = call read('classpath:my-signin.feature') { username:'john', password: 'secret' }
* def authToken = signIn.authToken

Вызванный my-signin.feature:

Scenario:
    Given url loginUrlBase
    And request { userId: '#(username)', userPass: '#(password)' }
    When method post
    Then status 200
    And def authToken = response
    ...

В этом примере my-signin.feature должен выполняться свводимые имя пользователя и пароль.Я знаю, что если бы у вас было следующее:

Background:
   * def username = "foo"
   * def password = "secret"

в верхней части файла my-signature.feature, параметры, введенные функцией, пытающейся повторно использовать файл функции, будут перезаписаны.

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

Мне кажется, что фон перезаписывает входные параметры, а не наоборот, затрудняет повторное использование * .feature файлов.Я знаю, что меня немного расстраивает мой проект, поскольку я не могу повторно использовать уже написанные тесты без рефакторинга повторно используемого кода в другой файл.

1 Ответ

2 голосов
/ 14 мая 2019

Любая вызываемая функция в каратэ будет иметь магическую переменную __arg, вы можете проверить это перед присвоением значений вашим переменным в вызываемом скрипте.

Background:
 * def username = (__arg == null) ? "foo" : __arg.username
 * def password = (__arg == null)? "secret" : __arg.password

это проверит на пройденные значения,

  • если ничего не передано, будет назначено значение по умолчанию

* def signIn = call read('classpath:my-signin.feature')

  • если передано с аргументами, переданные аргументы будут назначены

* def signIn = call read('classpath:my-signin.feature') { username: 'notfoo', password: 'notsecret' }

Для простоты не используйте никаких других параметров, которые нужно передавать, кроме этого.

...