Как не повторять постоянно фоновый сценарий для функций огурца, которые зависят от этого фонового сценария - PullRequest
2 голосов
/ 28 мая 2019

Я пишу несколько сквозных тестов для моего приложения с использованием Cucumber и Selenium.Я держу каждый сценарий полностью независимым друг от друга, как рекомендовано на сайте Cucumber.Однако мое приложение имеет аутентификацию на основе сеанса, поэтому каждый раз, когда запускается новый сценарий, для первого доступа к сайту потребуется вход в систему.Прямо сейчас мой подход состоит в том, чтобы поместить сценарий входа в качестве фонового сценария для всех других сценариев, например, так:

  Background: User is Logged In
    Given I am on the login screen
    When I enter my login details
    And I click submit
    Then I should be logged in

Однако это похоже на большое количество дублированного «кода».Кроме того, чтобы каждый сценарий запускался независимо, требуется создать новый экземпляр WebDriver и запустить браузер для каждого сценария, что кажется немного неэффективным?

Может ли кто-нибудь посоветовать, во-первых, как избежать дублирования фонового сценария в любом другом сценарии (если это возможно), а во-вторых, если правильный выбор отдельного экземпляра WebDriver для каждого сценария?

Ответы [ 2 ]

1 голос
/ 28 мая 2019

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

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

Чтобы сделать это элегантно с властью, то есть иметь дело с разными пользователями с ролями и дополнительными атрибутами, вам нужно сделать немного больше. Вы можете увидеть подробный пример этого здесь (https://github.com/diabolo/cuke_up).

Чтобы использовать это эффективно, следите за историей коммитов и сосредоточьтесь в основном на папке возможностей.

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

Конечным результатом является то, что вы можете написать определение шага, например

Given I am registered
Given I am an admin
Given I am logged in
Given I am logged in as an admin

которые реализованы как

Given 'I am registered' do
  @i = create_user
end

Given 'I am an admin' do
  @i = create_user role: 'admin'
end

Given 'I am logged in' do
  @i = create_user
  login as: @i
end

Given 'I am logged in as an admin' do
  @i = create_user role: 'admin'
  login as: @i
end

примечание: переменная @i используется для передачи пользователя от одного шага к следующему

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

0 голосов
/ 28 мая 2019

Этот пример в Ruby. Вы можете сгруппировать шаги, используемые для входа в систему, в файле login_steps.rb.

В файле .feature вам нужно написать шаг вроде ", учитывая, что пользователь вошел в систему ". Вы можете также ввести данные для входа на этом этапе, если хотите. Затем в файле login_steps.rb вы создаете:

Given(/^the user is logged in$/) do
  step('I am on the login screen')
  step('I enter my login details')
  step('I click submit')
  step('I should be logged in')
end

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

Background: Given the user is logged in

и будет использоваться перед каждым сценарием этого конкретного .feature файла

Что касается Webdriver, насколько я знаю, вы создаете сеанс, когда тест начинается, и вы выходите, когда он заканчивается.

Надеюсь, это поможет!

...