Behat снова запускает сценарий программным путем

После вопроса о параметрах stackoverflow в Behat 3 Ian нашел решение для параметров pass to behat.

Для окружающей среды это нормально, но для параметров страны я немного смущен. У меня есть такая функция:

Scenario Outline: Test if first link works Given I am on website "<country>" Then I visit the url "my-url" Then I click on first link Examples: | country | | US | | IT | 

Это то, что у меня есть, и теперь я хочу запустить что-то вроде:

 env="stg" country="US,IT" php53 bin/behat --suite=mySuite 

Но с контуром сценария весь сценарий запускается для каждой страны. Я хочу сделать то же самое, но со списком страны, переданным в параметрах.

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

Благодаря !

Related of "Behat снова запускает сценарий программным путем"

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

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

 default: extensions: Behat\MinkExtension suites: default: paths: […] contexts: […] US: paths: […] contexts: […] IT: paths: […] contexts: […] 

И используйте крюк @beforeSuite :

 /** * @beforeSuite * * @param BeforeSuiteScope $scope */ public static function setUpSuite(BeforeSuiteScope $scope) { $suiteName = $scope->getSpecificationIterator()->getSuite()->getName(); // If the suite denotes one of the languages, then set it as the main language. } 

Это решение имеет несколько минусов:

  1. Вы не можете использовать сюиты для чего-либо еще, кроме языков.
  2. Много дублирования конфигурации.
  3. Установка языка с крючка будет болью. Вероятно, вам нужно будет сохранить его как статическое свойство и перед отправкой каждого запроса Mink передать его в заголовок, чтобы ваш сервер знал, какой язык использовать. Для этого вам понадобится еще один крючок – во всяком случае, это еще одна история боли.

Еще одно решение, которое приходит на ум, – просто использовать другой скрипт PHP / Bash, который будет последовательно запускать Behat с параметром country. У него также есть некоторые минусы:

  1. Если вы каждый раз используете разные параметры Behat, вам, вероятно, потребуется добавить логику для их передачи.
  2. Возможно, возникла проблема с корректным отображением результатов Behat при запуске каждой подзадачи.
  3. Вы все равно должны передать этот язык в свое приложение, но вышеприведенное предложение должно работать.

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