#selenium-webdriver #ui-automation #cucumber-java
#selenium-webdriver #пользовательский интерфейс-автоматизация #cucumber-java
Вопрос:
Я изучаю cucumber. У меня есть два сценария. Я не могу сказать точно из-за политики компании. Файл первого шага похож
Scenario 1: Flow with attachments
Given Login to APP
When User chooses "country"
And clicks "Yes"
And attaches "files"
And Go to location page
And add comments
Then Submit
Scenario2: Flow without attachments
Given Login to APP
When User chooses "country"
And clicks "Yes"
And add players manually
And User picks players
And User clicks on a player
And does the settings
And Go to location page
And add comments
Then Submit
Нужно ли мне снова записывать все шаги в сценарии 2 или я могу что-то сделать, чтобы я мог обойти запись всех шагов в файле функций.
Я имею в виду, могу ли я поддерживать только разные шаги во 2-й функции, как мы делаем при написании файла шага или склеивания кода для этого.
Если да, то как это сделать, чтобы выполнить все предыдущие шаги. Пожалуйста, помогите
Комментарии:
1. нет. Нет никакого способа сделать это (по крайней мере, я не в курсе). Также это совершенно не похоже на cucumber. В качестве хорошей практики два сценария должны быть как можно более независимыми друг от друга. Пожалуйста, прочитайте ниже: automationpanda.com/2017/01/30/bdd-101-writing-good-gherkin
2. Похоже, вы ищете
Background
ключевое слово. cucumber.io/docs/gherkin/reference/#background3. Предыстория — … но я намеревался также опубликовать шаги .. @rahulrai: спасибо за ссылку. Я следую тому же, что и сказал
4. Ах, фон — но они не имеют никакого отношения к вашему случаю в качестве фона в чем-то, что будет выполняться перед запуском, или в каждом сценарии в файле функций. Вы говорите о шагах, которые могут быть где угодно в сценариях. Я надеюсь, что теперь вам все ясно. Приветствия!!!
Ответ №1:
Вместо того, чтобы записывать все шаги в терминах небольших действий, которые пользователи выполняют в системе (например, «перейти на страницу», «щелкнуть это», «отправить это»), подумайте о том, чего пытается достичь пользователь, и создайте шаг, который описывает это так, чтобы это было значимо для пользователя (например, «добавить игроков из файла» или «добавить игроков вручную»). Определение шага для этого шага будет содержать все эти действия в системе (щелкните это, заполните это и т.д.). Вы также можете использовать то, что мы называем «вспомогательными методами» из вашего определения шага; например, создайте метод, который будет переходить на определенную страницу, и вызовите этот метод с соответствующей страницей для перехода из ваших различных определений шага.
Таким образом, ваши сценарии будут описывать предполагаемое поведение системы или то, что пользователю должно быть разрешено делать (или не делать).
Кроме того, из приведенных вами примеров мне непонятно, что вы тестируете / утверждаете. Я всегда считал полезным использовать «Given / And» для настройки исходного состояния системы, «When / И» для действий, которые необходимо выполнить, которые вы хотите протестировать результат, и «Then / И» для проверки ожидаемого результата. Заголовок сценария должен четко описывать, для чего он тестируется.
Из вашего примера я предположил, что вы тестируете, что пользователь может добавлять проигрыватели либо из файла, либо вручную. В этом случае сценарии могут выглядеть примерно следующим образом:
Scenario: User is able to add players from a file
Given a user who is logged in
And the user has selected "country"
When the user attaches "files"
And adds a comment about location
Then the players are added
And the comment is saved
Scenario: user is able to add players manually
Given a user who is logged in
And the user has selected "country"
When the user adds players manually
And adds a comment about location
Then the players are added
And the comment is saved
В приведенном выше примере я также предполагаю, что следующие шаги:
And add players manually
And User picks players
And User clicks on a player
And does the settings
на самом деле все (всегда) необходимы для добавления игроков вручную, поэтому все эти действия будут выполняться за один шаг «И добавить игроков вручную» (либо путем реализации их всех за один шаг, либо вызова нескольких вспомогательных методов с этого шага).
Описывая поведение подобным образом, становится намного понятнее, что вы тестируете в каждом сценарии и каково ожидаемое поведение системы.
Кроме того, это приведет к меньшему дублированию «шагов» (как, я полагаю, и был ваш первоначальный вопрос).
Комментарии:
1. Спасибо за предоставленные знания. Да, я действительно согласен с этим. Спасибо, что сообщили мне больше о поведенческих тестах
2. Пожалуйста. Вы можете найти дополнительную информацию здесь: docs.cucumber.io/docs/bdd и присоединитесь к одному из каналов поддержки Cucumber (например, Slack), если у вас есть еще вопросы 🙂