Skip to content

Using BDD and Cucumber in Squash - Writing test cases

Writing the test cases

Annita
Squash TM administrator
Pravash
Product owner
Fabrice
Functional tester
Antonine
Automatician
Set up Squash TM
Write requirements
Write test cases
Transmit test cases
Get test cases
Automate test cases
Deliver automated test cases
Indicate automation is performed
Run automated tests

During refinement sessions, Pravash explains to the whole team (Scrum master, developers, and Fabrice) the features he wants to get in the product.
For each feature, the developers and Fabrice ask for details to Pravash (nominal cases, error cases, boundary cases…). Then, the team defines together one or more use cases and draft them using the Gherkin syntax. This ensures that everybody share the same understanding of what needs to be implemented and that this understanding is capitalized.

An overview of the Gherkin syntax

  • Given (Arrange): Describes a prerequisite, a.k.a. a precondition, for the scenario to be applicable.
    All the prerequisites define the initial state (or at least the relevant part of the initial state) of the system before the start of the use case.
  • When (Act): Describes an action taken during the test.
    Actions are performed in the specified order.
  • Then (Assert): Describes an outcome, a.k.a. a postcondition, that should be fulfilled at the end of the test.
    All the outcomes define the expected final state (or at least the relevant part of the final state) of the system after the end of the use case.

Some conjunctions can be used to avoid repeating the previous words (they have the same meaning as repeating the word):

  • And
  • But

Examples:

Scenario: A user withdraws money from his bank account
    Given Eric has a valid basic Debit card  
    And his account balance is $100  
    When he inserts his card  
    And he withdraws $45  
    Then the ATM should give $45  
    And the ATM returns his card
    And his account balance is $55

Scenario: A user attempts to withdraw more money than he has in his account
    Given Vsevolod has a valid basic Debit card  
    And his account balance is $20  
    When he inserts his card  
    And he withdraws $40  
    Then the ATM displays an error  
    And the ATM returns his card
    But his account balance remains $20

Doc Strings can be used to define a large piece of text. They are delimited by three double-quotes.
Example:

Then the ATM displays the following error message
 """
 Refused withdraw
 ================
 Your Debit card does does allow you to withdraw more money than your current account balance.
 Please, contact your bank councillor.
 """

Data Tables can be used to define a list of values in an action.
Example:

Given the Debit cards exist:
  | name     | allowed overdraw | max overdraw duration (days) |
  | basic    | $0               | 0                            |
  | gold     | $500             | 15                           |
  | platinum | $3000            | 42                           |

It is possible to group scenarios having the same actions, but different values by using Scenario Outline and placeholders between < and >.
Example:

Scenario Outline: A user withdraws money from an ATM  
    Given <Name> has a valid basic Debit card  
    And his account balance is <OriginalBalance>  
    When he inserts his card    
    And he withdraws <WithdrawalAmount>  
    Then the ATM should give <WithdrawalAmount>  
    And the ATM returns his card
    And his account balance is <NewBalance>

    Examples:
      | Name   | OriginalBalance | WithdrawalAmount | NewBalance |
      | Eric   | 100             | 45               | 55         |
      | Gaurav | 100             | 40               | 60         |
      | Ed     | 1000            | 200              | 800        |

An example of scenario recorded by Fabrice:

Create an account, then check login and personal data

Given I am on the AccountCreation page
When I fill AccountCreation fields with gender <gender> firstName <first> lastName <last> password <password> email <mail> birthDate <birth> acceptPartnerOffers <offers> acceptPrivacyPolicy <privacy> acceptNewsletter <news> acceptGdpr <gpdr> and submit
And I go to the Home page
And I sign out
Then I can successfully sign in with email <mail> password <password>
And The displayed name is <display>
And My personal information is gender <gender> firstName <first> lastName <last> email <mail> birthDate <birth> acceptPartnerOffers <offers> acceptPrivacyPolicy "no" acceptNewsletter <news> acceptGdpr "no"
Examples: 
  | gender | first     | last        | display             | password     | mail               | birth        | offers | privacy | news  | gpdr  |
  | "M"    | "John"    | "Doe"       | "John Doe"          | "mypassword" | "jdoe@example.com" | "1990-01-02" | "no"   | "yes"   | "yes" | "yes" |
  | "F"    | "Jane"    | "Doe"       | "Jane Doe"          | "123&µ"      | "jane.doe@oo.com"  | "1992-01-02" | "yes"  | "yes"   | "yes" | "yes" |
  | "U"    | "Camille" | "Bertillon" | "Camille Bertillon" | "£→µ$¤11"    | "cb@gmail.com"     | "1968-02-10" | "yes"  | "yes"   | "no"  | "yes" |
  | "U"    | "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz" | "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz" | "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz" | "012345678901234567890123456789012345678901234567890123456789"    | "012345678901234567890123456789012345678901234567890123456789@oo.com"     | "2022-02-10" | "yes"  | "yes"   | "yes"  | "yes" |

Fabrice records these Gherkin scenarios as BDD test cases in Squash TM and indicates their traceability to the requirements as defined in the Squash TM documentation:

test case definition

test case definition

test case definition

Transmitting the test cases

Annita
Squash TM administrator
Pravash
Product owner
Fabrice
Functional tester
Antonine
Automatician
Set up Squash TM
Write requirements
Write test cases
Transmit test cases
Get test cases
Automate test cases
Deliver automated test cases
Indicate automation is performed
Run automated tests

Once a test case has been reviewed and approved (see Squash TM documentation), Fabrice flags it as eligible for automation (see Squash TM documentation) and, optionally, defines an automation priority. He can now transmit the test case by clicking on the arrow:

test case transmission

The test case transmission has two effects:

  • the Cucumber feature file is generated and is pushed to the remote Git repository a few minutes later;
  • the test case appears in the Automation Workspace.