Повторите тот же сценарий с переменной

#loops #behat

#циклы #behat

Вопрос:

Я тестирую права пользователя API-интерфейсов одного веб-приложения с помощью Behat. Мне нужно быть уверенным, что несколько ролей не могут получить доступ к некоторым API. Поэтому мне нужно проверить, что эти роли получают запрещенный ответ от API. Это работает хорошо, но поскольку существует 8 разных ролей, мой файл функций становится огромным, потому что я повторяю все шаги для каждой роли..

Моя текущая функция записывается следующим образом:

 Feature: Accounting

  @accounting
  Scenario: I want to see the accounting
    Given I have the role of "sales"
    When I want to get the accounting
    Then I should get a forbidden response
    When I want to get the balance sheet
    Then I should get a forbidden response
    When I want to get the income statement
    Then I should get a forbidden response

    Given I have the role of "project"
    When I want to get the accounting
    Then I should get a forbidden response
    When I want to get the balance sheet
    Then I should get a forbidden response
    When I want to get the income statement
    Then I should get a forbidden response

    Given I have the role of "support"
    When I want to get the accounting
    Then I should get a forbidden response
    When I want to get the balance sheet
    Then I should get a forbidden response
    When I want to get the income statement
    Then I should get a forbidden response

    ...
  

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

Ответ №1:

Вот для чего предназначены схемы сценариев:

   Scenario Outline: I want to see the accounting
    Given I have the role of "<role>"
    When I want to get the accounting
    Then I should get a forbidden response
    When I want to get the balance sheet
    Then I should get a forbidden response
    When I want to get the income statement
    Then I should get a forbidden response

    Examples:
      | role    |
      | sales   |
      | project |
      | support |