Each Step in a Cycle Feature must begin with a keyword. There are a few different types of keywords. Some keywords perform a function, such as Once, If, Else, Elsif, Endif, While, and EndWhile. These are explained elsewhere in the manual. Other keywords, such as Given, When, Then, And, and But, do not execute a function or perform an action in Cycle, but they still serve an important purpose.
The keywords Given, When, Then, And, and But can not only aid with the readability of the Steps in a Feature, but they can also be used meaningfully to support a standard approach to Business Process Validation.1
# Example of using keywords for a purpose # Note that these are not valid Steps, but are created to illustrate the concept Given my system is in this expected state When I perform this specific action Then I expect to see this outcome And I expect to see this outcome too But I don't expect to see this outcome
The purpose of each keyword is explained in further detail below.
Given should be used to describe the current state of the system or process, before a key interaction is performed by the user or system. For example, you might use Given to describe a current database connection that needs to be in place before executing a test. Another example would be to use Given to open a browser and navigate to a certain page that you plan to test. Given can also be used in conjunction with Activity Steps to document non-software assumptions that would be a precondition for running a test.
# Describe a database connection Given I connect to Mysql database "customers" at "localhost" port 3306 logged in as "USERNAME" with password "PASSWORD" # Open a browser and navigate to a webpage that you plan to test Given I open "Chrome" web browser And I navigate to "https://www.cycleautomation.com" in web browser # Document non-software or process assumptions Given I "received no verbal reports of issues with the website"
When is ideal for describing interactions being performed by the user or system. You might use When to describe clicking a button in a piece of software or a webpage, for example. When should be used to describe the key interactions that you want to test or validate.
# Describe a web interaction When I click the "Feedback" link in web browser # Describe a desktop interaction When I click "Image:OKbutton.png" within 2 seconds
The purpose of Then is to describe the expected result of an interaction for purposes of validation. For instance, when you click a button in a software application, then you expect a new screen to load. Then pairs well with validation Steps that begin with "I see", for example.
# Validate the outcome of a web interaction Then I see text "Accounts" in title in web browser # Validate the outcome of a desktop interaction Then I see "Image:SplashScreen.png"
And is used to join together a group of Givens, Whens, or Thens. Instead of having a group of Steps with the same keyword listed in a row, And can be used to make it clear there are multiple related Steps of a certain type, without sacrificing readability. And is also useful for inserting waiting Steps.
# Join together a group of Whens When I type "my username" in the "Login" field in web browser And I type "my password" in the "Password" field in web browser And I click element "id:submitbutton" in web browser # Insert waiting Steps When I click "Image:OKbutton.png" And I wait 2 seconds
Similar to And, But can be used in conjunction with Given, When, and Then to describe a caveat or negative validation. For example, when you click a link in a web page, then you expect one screen to load, but not another screen to load.
# Describe a negative validation Then I see "Welcome" in web browser But I do not see "Error" in web browser
Pulling it all together
Below is an example of a short Scenario that utilizes the keywords for their intended purpose.
Given I open the "Chrome" web browser And I navigate to "https://www.cycleautomation.com" in web browser When I click the "Overview" link in web browser Then I see "What is Cycle" in web browser within 3 seconds But I do not see "404" in web browser within 3 seconds