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

После вопроса о stackoverflow Параметры в Бехат 3 Ян нашел решение для параметров передачи.

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

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

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

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

Спасибо !

1

Решение

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

Вы можете получить эту работу, настроив наборы в вашем 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 с параметром страны. У этого также есть некоторые минусы:

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

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

1

Другие решения

Других решений пока нет …