Как написать правильный файл функции в огурце - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь выучить огурец BDD и пытаюсь написать файл функций для сценария входа в систему с действительными и недействительными именами пользователей.Для действительного пользователя будет зарегистрирован и выйдет, однако для недействительного имени пользователя, пользователю будет предложено снова перейти на страницу входа и попросить ввести правильные учетные данные.

Я хотел бы спросить, можем ли мы иметь как положительные, так инегативные сценарии в «Сценарном наброске»?Не могли бы вы помочь мне в написании идеального файла функций для этого простого сценария?Взгляните на мой код файла функций (PS, я новичок :))


Feature: Login Action 
    Description: This feature will test a LogIn and LogOut functionality


Scenario Outline: Login with valid and Invalid Credentials 

    Given User is on Home Page 
    When User navigate to Login Page
    Then User enters "<username>" and "<password>" 
    And Keeping case as Valid
    Then User should get logged in
    And Message displayed Login Successfully
    Then User enters "<username>" and "<password>" 
    And Keeping case as InValid
    Then user will be asked to go back to login page
    And Provide correct credentials

Examples: 
        |username|password|Case|
        |abc@gmail.com|12345|Valid|
        |abc1@gmail.com|dfsd2|InValid|


Scenario: Successful logout from application 

    When user logs out from application 
    Then Message displayed Logout successfully 
    And Browser quit by driver

Ответы [ 3 ]

0 голосов
/ 01 июня 2018
Scenario: Good sign in
  Given I am registered
  When I sign in
  Then I should be signed in

Scenario: Not registered sign in
  Given I am not registered
  When I sign
  Then I should not be signed in
  And ...

Scenario: Registered with wrong password
  Given I am registered
  When I sign in with a bad password
  Then I should not be signed in
  And ...

Советы:

  • Сохраняйте простоту
  • Не используйте контуры
  • Сохраняйте детали того, КАК вы делаете вещи вне сценариев
  • Имеется один сценарий для каждого пути
  • 10 простых сценариев лучше, чем один сложный.

Подробную информацию о том, как написать сценарии, подобные этому (в Ruby), можно найти наhttps://github.com/diabolo/cuke_up/tree/master/features.

Предостережения:

  • это мнение только одного человека
  • Вы должны быть в состоянии написать код для работы таким образом (как вызапихните все детали того, как все делается из огурца, в код помощника).
  • регистрация является обязательным условием для входа в систему
0 голосов
/ 18 октября 2018

Как указано здесь в отличном ответе - каждый сценарий, по сути, представляет собой один контрольный пример и поэтому должен быть четко отделен.

Тем не менее, важно понимать, что задано / когда / тогда (в своей самой основной сути) эквивалентны традиционным трем этапам системного теста: Arrange / Act / Assert, следовательно:

Given : привести систему в известное состояние

Когда : Командуйте системой (что вы хотите проверить)

Тогда : Утвердите, что результат был тем, что вы ожидали.

Вот и все!(конечно, BDD гораздо больше, но это основы исполняемой спецификации)

Given User is on Home Page не приводит систему в известное состояние, но Given I am registered - это .Хотя этого может быть недостаточно, чтобы заявить об этом, потому что, как только вы поймете, что и почему в сценарии, вы быстро поймете, что вам не хватает чего-то более конкретного в качестве примера.

Перефразируяпредыдущий ответ:

Given I am registered -> настроить пользователя (но имеет ли значение, кто?) как зарегистрированного в системе (запись в базе данных?), зарегистрированного для чего?имеет ли значение для результата?

When I sign in -> Дать системе команду на вход (кто?) - это может быть сделано через веб-форму или через API (или по телефону?).Имеет ли значение, в какое время вы входите в систему, можете ли вы войти сразу?

Then I should be signed in -> Проверить ответ из веб-приложения, базы данных, сеанса?cookie?

Сказав это, вход в сценарии, вероятно, не стоит использовать BDD для решения, так как они так же хорошо определены, как CRUD - анализ практически не требуется.

0 голосов
/ 01 июня 2018

«Идеально» - Разве это не так ...

Написанный вами план сценария очень запутан и, возможно, неверно истолковывает работу плана сценария.В основном вы входите в систему дважды с каждой строкой таблицы примеров, т.е.то же имя пользователя и пароль (строки 3 и 7 в SO).В схеме сценария все шаги будут повторяться с каждой строкой данных, которую вы предоставляете в примерах.См. Несколько доступных учебных пособий.

Зачем смешивать действительные и недействительные имена входа?Храните их в отдельных сценариях.Легко следовать.
Переместить выход в отдельный файл функций.Затем вы можете переместить первые 3 шага сценария входа в фоновый режим.Уменьшает повторение.

У вас возникнет проблема с проверкой функциональности входа в систему для действительного случая для нескольких данных.После входа в систему действительного пользователя большинство веб-приложений сохраняют учетные данные для входа в файл cookie и т. Д. И т. Д. Поэтому, когда делается новый запрос для страницы входа в систему, он может просто пропустить страницу входа и перейти, возможно, на домашнюю страницу.Затем вы получите NoSuchElementException, когда код селена ищет поле ввода идентификатора пользователя.Таким образом, для действительных дел вам также необходимо выйти из системы.

@Login
Scenario Outline: Login with valid and Invalid Credentials 

    Given User is on Home Page 
    ....
    ....

@Valid
Examples: 
        |username|password|Case|
        |abc@gmail.com|12345|Valid|

@InValid
Examples: 
        |username|password|Case|
        |abc@gmail.com|12345|Valid|

Для запуска Действительный логин дел используйте опцию тегов в runner как {"@Login","@Valid"} или если в огурце 2 @Login and @Valid.Для Invalid один заменить на @ InValid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...