как передать данные (из примеров) одного файла функций в другой файл функций?

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

feature file 1:
scenario outline: test xxx functionality
Examples :
|user|password|
|abc|pass|

feature file2:
Scenario Outline : test yyy functionality
Examples:
|user|password|
|    |        |

Здесь я хочу, чтобы данные, которые есть в файле функций 1, были переданы в файл функций 2, то есть abc и pass должны быть скопированы в Примеры файла функций 2. Пожалуйста, предложите. Заранее спасибо!


person Rahul    schedule 27.10.2017    source источник


Ответы (2)


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

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

person Thomas Sundberg    schedule 28.10.2017

Строго говоря, вы не должны передавать данные из одного теста BDD в другой. Это противоречит цели проведения независимого модульного теста BDD. В общем, модульные тесты программного обеспечения должны быть независимыми друг от друга.

При этом вы, безусловно, можете сохранить какое-то состояние из одного определения шага, а затем повторно использовать его в другом:

@When("^I login with username \"(.*)\"$") 
public void enterUsername(String username) { 
    // do something with username

    // make a database call and insert the username in a temporary table
}

Затем во втором файле функций вы можете запросить ту же таблицу и получить имя пользователя.

Это может быть не совсем то, что вы имеете в виду, но общая идея состоит в том, чтобы просто сохранять какое-то состояние во время первого теста, которое затем можно использовать во втором тесте.

person Tim Biegeleisen    schedule 27.10.2017
comment
Это немного вводит в заблуждение для OP, поскольку не объясняет, что состояние в переменных будет потеряно между одним сценарием и следующим, а также будет сброшена база данных. Использование test в вашем последнем предложении сбивает с толку, говорите ли вы здесь о сценарии или об определении шага. Определения шагов не являются тестами. - person diabolist; 31.10.2017
comment
@diabolist the database will be reset ... нет, не будет, и мы используем этот метод, чтобы обойти проблему шагов, предположительно не имеющих состояния. - person Tim Biegeleisen; 31.10.2017
comment
Огурец по умолчанию хочет сбросить базу данных между сценариями (обратите внимание, не шаги). Ваш ответ сбивает с толку, потому что непонятно, когда вы говорите о шагах, а когда о сценариях. Вы можете обмениваться данными между определениями шагов, только если они используются в одном и том же сценарии. - person diabolist; 31.10.2017