Как мы реализуем «данные» в сценарии с корнишоном (SpecFlow / BDD / Selenium)? - PullRequest
3 голосов
/ 14 февраля 2012

Мы применяем BDD и используем SpecFlow и Selenium. Критерии приемки указаны в корнишоне.

У меня есть вопрос относительно данного предложения.

Примером может быть ...

  • Учитывая, что я на странице деталей заказа
  • Когда я отправляю заказ
  • Тогда я вижу сводку заказа

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

Если у нас уже есть соответствующие существующие шаги SpecFlow, мы можем использовать их (через Selenium), чтобы добраться до нужной точки - что-то вроде этого ...

  • Учитывая, что я зарегистрированный пользователь
  • А я на странице входа
  • И я вхожу, используя зарегистрированное имя пользователя и пароль
  • И я создаю новый заказ
  • И я ищу продукт XYZ
  • И я добавляю товар в заказ
  • И я выбираю страницу с информацией о заказе
  • Когда я отправляю заказ
  • Тогда я вижу сводку заказа

Мы можем даже поместить все эти шаги в код шага в разделе «Если я на странице с информацией о заказе»

Однако правильно ли мы использовать Selenium для реализации данного? Или мы должны найти какой-нибудь способ установить все соответствующие состояния / данные в сеансе / базе данных без прохождения пользовательского интерфейса?

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

Я надеюсь, что Stack Overflow - подходящий форум для этого (не могу помочь, но думаю, что нет - если так, пожалуйста, не стреляйте в меня!) ...

Ответы [ 2 ]

5 голосов
/ 14 февраля 2012

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

[Given(@"I am on the order details page ")]
public void GivenIAmOnTheOrderDetailsPage()
{
     Given("I am a registered user");
     And("I am on the login page");
     // so on
}
4 голосов
/ 14 февраля 2012

Я предполагаю, что вы проводите интеграционное тестирование, поэтому имеет смысл получить доступ к БД.

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

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

Feature: Order Details Page
As a customer ...
I want to ...
So that ...

Background: 
  #set up user authentication status
    Given I am logged in

  #set up order status to be consistent with this page
    And I have an order ready for submission

Scenario: I can submit my order
    ...etc...

Scenario: I can cancel my order
    ...etc...

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

Я думаю, как вы настраиваете данные для ваших интеграционных тестов, зависит от вас. Но я чувствую, что лучше создать запись в правильном состоянии.

Избегайте I log in using my registered username and password и вместо этого просто установите статус аутентификации непосредственно с помощью I am logged in. Настройте порядок аналогично - не полагайтесь на производственный код, который вы не тестируете, иначе ваш тест не пройдёт при неправильных обстоятельствах.

Вы МОЖЕТЕ повторно использовать данные шаги, но они не должны полагаться на производственный код.

...