Мне нужно, чтобы переменные повторно использовались (совместно использовались) в сценариях в одном и том же файле функций. Пожалуйста, найдите ниже рабочий способ, который я использую в настоящее время.
Проблема здесь в том, что я должен передать общие переменные в другой файл функций, что кажется довольно громоздким для такой глупой задачи.
Мне было интересно, могу ли я определить повторно используемые переменные как игнорируемый сценарий в том же файле функций, который я могу callonce
из себя (тот же файл функций) следующим образом:
Файл my.feature
:
Feature: My
Background:
* url myUrl
# call once explicitly the scenario tagged with '@init'
* def vars = callonce read('my.feature@init')
@ignore @init
Scenario: Return shared variables for all scenarios
* def id = uuid()
# the non-ignored scenarios follow below this line...
Проблема. К сожалению, это приводит к бесконечному циклу с множеством ошибок. Похоже, что сам callonce
(тот же файл, который вызывает callonce
) снова запускает Background
, включая callonce
.
Возможна ли идея, показанная выше, и если да, то в чем моя ошибка?
Или вы могли бы callonce
снова не обрабатывать Background
? Что-то вроде добавления аргумента к callonce
или использования karate.callSingle(file, dontProcessBackground=true)
?
Большое спасибо.
--
Следующие работы (но громоздкие):
Файл my.feature
:
Feature: My
Background:
* url myUrl
* def vars = callonce read('my.init.feature')
@one
Scenario: One
* def payload = `{ "id" : "${vars.id}" }`
* request payload
* method post
* status 200
* match $.value == 'one'
@two
Scenario: Two
* def payload = `{ "id" : "${vars.id}" }`
* request payload
* method post
* status 200
* match $.value == 'two'
Файл my.init.feature
:
@ignore
Feature: Create variables to be used across mutliple scnearios
Scenario: Return shared variables for all scenarios
* def id = uuid()
... где uuid()
используется совместно с karate-config.js
:
function fn() {
var uuid = () => { return String(java.util.UUID.randomUUID().toString()) };
// ...
var config = { uuid: uuid }
return config;
}
callonce
кэшировать результат? Таким образом, даже если вы снова вызовете тот же файл функций, не должен ли он немедленно вернуть кешированный результат вместо повторной обработкиcallonce
вBackground
? 06.07.2021