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

После вопроса о 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 или чего-то подобного я смогу снова запустить весь свой сценарий с другой конфигурацией?

Спасибо !


person user1853777    schedule 10.10.2014    source источник


Ответы (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 стран займет несколько часов и не принесет существенной пользы.

person Ian Bytchek    schedule 10.10.2014