How do we implement the 'Given' in a Gherkin Scenario (SpecFlow/BDD/Selenium)?

Refresh

November 2018

Views

1.9k time

3

We are applying BDD and using SpecFlow and Selenium. Acceptance criteria are specified in Gherkin.

I have a question regarding the Given clause.

An example might be...

  • Given I am on the order details page
  • When I submit the order
  • Then I see the order summary

So for the 'Given I am on the order details page' we have to be logged in and have an order ready to submit. But how do we get to that point?

If we already have the relevant existing SpecFlow steps we can use these (via Selenium) to get to the right point - something like this...

  • Given I am a registered user
  • And I am on the login page
  • And I log in using my registered username and password
  • And I create a new order
  • And I search for XYZ product
  • And I add the product to the order
  • And I select the order details page
  • When I submit the order
  • Then I see the order summary

We can even put all those steps in the step code under 'Given I am on the order details page'

However are we right to use Selenium to implement the Given? Or should we find some way to set all the relevant states/data in the session/database without going through the UI?

I suspect that there is no right or wrong here. I have to say it is working very well for us but we are always looking to improve our approach. So would be very interested to hear from anyone with real experience.

I hope Stack Overflow is the right forum for this (can't help but think it isn't - if so please don't shoot me down!)...

2 answers

5

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

[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

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

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

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

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. Установите порядок аналогично - не полагайтесь на производстве код , который вы не тестирование или ваш тест потерпит неудачу в неподходящих условиях.

Вы можете повторно использовать Учитывая шаги - но они не должны полагаться на производстве код.