Как запускать одни и те же функции BDD несколько раз, используя разные роли пользователей

В любом случае, мы можем запускать одни и те же тесты несколько раз, чтобы проверить функциональность.

Вот мой файл функций:

Feature: End to end tests 

    I want an End to End test pack
    As Super user and Admin user
    So that I can ensure that the integrated components of the application function as expected

    Background:
            Given I have the login Page
            When I login to application
            Then the list is displayed

    @javascript
    Scenario: To verify the functionality on the Dashboard          
            When I navigate to the Dashboard Page
            Then the Dashboard Page is displayed

Я хотел бы запустить этот сценарий для двух разных пользователей. Есть ли способ запускать одни и те же функции, используя несколько пользователей/ролей.

У меня есть несколько других файлов функций, которые нужно запустить с использованием 2 или 3 разных пользователей, которые мне нужно запустить на ночь.

Обратитесь к файлу контекста ниже:

public function iLoginToApplication() { 
$page = $this->getSession()->getPage();
$page->find('css', '#username')->setValue("admin");
$page->find('css', '#password')->setValue("Password");
$signInButton->press();
}

person vijay pujar    schedule 05.09.2014    source источник
comment
Некоторые рассмотрят возможность помочь, когда вы ответите на все свои 19 вопросов и примете ответы, дополняющие ваш 13-летний опыт работы. Сообщество проводит время, знаете ли…   -  person Ian Bytchek    schedule 07.09.2014
comment
Я полностью понимаю и ценю то, откуда вы пришли. И я принял и прокомментировал те из них, которые относятся к делу. Можете быть более конкретными   -  person vijay pujar    schedule 08.09.2014


Ответы (1)


Да, ты можешь. Часть, которая идет непосредственно под Feature: …, в основном бесполезна с точки зрения функциональности и используется в качестве документации. AFIAK, вы можете удалить его или написать туда все, что хотите, ваши тесты будут работать точно так же.

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

Feature: End to end tests 

    I want an End to End test pack
    As Super user and Admin user
    So that I can ensure that the integrated components of the application function as expected

    Background:
        Given I have the login Page

    @javascript
    Scenario Outline: To verify the functionality on the Dashboard         
        When I login to application as "<username>" with "<password>"
        Then the list is displayed
        When I navigate to the Dashboard Page
        Then the Dashboard Page is displayed

    Examples:
        | username | password |
        |  super   |  qwerty  |
        |  admin   |  qwerty  |

/**
 * @When /^I login to application$/
 * @When /^I login to application as "(.+)" with "(.+)"$/
 */
public function iLoginToApplication($username = null, $password = null) {
    $page = $this->getSession()->getPage();
    $page->find('css', '#username')->setValue(isset($username) ? $username : 'admin');
    $page->find('css', '#password')->setValue(isset($password) ? $password : 'Password');
    $signInButton->press();
}

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

person Ian Bytchek    schedule 08.09.2014
comment
Большое спасибо за ответ. Я собираюсь попробовать это решение, когда наша среда снова заработает. - person vijay pujar; 09.09.2014
comment
Дайте мне знать, если это сработает. - person Ian Bytchek; 09.09.2014
comment
Привет Ян, я пытаюсь использовать это решение. Однако проблема заключается в использовании его в моем файле контекста. Могу ли я передать это как аргумент в мой файл контекста. Пожалуйста, обратитесь к описанию выше для контекста: - person vijay pujar; 09.09.2014
comment
Поэтому, когда я запускаю тест, он проходит только для второго пользователя, так как он находится в моем файле контекста и не проходит для суперпользователя. Как я могу передать имя пользователя в качестве аргумента метода. - person vijay pujar; 09.09.2014
comment
Смотрите обновление. Он работает точно так же, как и любое другое определение шага/контекст. В приведенном выше примере вы можете либо использовать значения по умолчанию, либо указать имя пользователя и пароль. - person Ian Bytchek; 09.09.2014
comment
Это блестящий ответ. Большое спасибо. - person vijay pujar; 09.09.2014