SlideShare a Scribd company logo
@wakaleo
The evolution of automated testing practices
Take me on a journey
@wakaleo
@wakaleo
John
Ferguson
Smart
Introductions
“I help teams of smart people 

learn to work together more efficiently, 

to deliver better software faster”
@wakaleo
Test Automation
Do it well, or don’t do it at all
@wakaleo
How much are your tests worth?
Weekly cost
vs
weekly savings
$0
$20,000
$40,000
$60,000
$80,000
$100,000
$120,000
$140,000
$160,000
$180,000
1/09/2015 1/10/2015 1/11/2015 1/12/2015
Test0suite0cost0vs0savings0(per0week)
Cost0saved0par0week Test0suite0cost0per0week
@wakaleo
How much are your tests worth?
Weekly cost
vs
weekly savings
$0
$20,000
$40,000
$60,000
$80,000
$100,000
$120,000
$140,000
$160,000
$180,000
1/09/2015 1/10/2015 1/11/2015 1/12/2015
Test0suite0cost0vs0savings0(per0week)
Cost0saved0par0week Test0suite0cost0per0week
Team cost is constant
@wakaleo
How much are your tests worth?
Weekly cost
vs
weekly savings
$0
$20,000
$40,000
$60,000
$80,000
$100,000
$120,000
$140,000
$160,000
$180,000
1/09/2015 1/10/2015 1/11/2015 1/12/2015
Test0suite0cost0vs0savings0(per0week)
Cost0saved0par0week Test0suite0cost0per0week
Team cost is constant
Time saved increases with the
number of executed
@wakaleo
How much are your tests worth?
$0
$200,000
$400,000
$600,000
$800,000
$1,000,000
$1,200,000
1/09/2015 1/10/2015 1/11/2015 1/12/2015
What0is0your0test0suite0worth?
Test0suite0ROI Test0suite0cost
Cumulated cost
vs
cumulated savings
@wakaleo
How much are your tests worth?
$0
$200,000
$400,000
$600,000
$800,000
$1,000,000
$1,200,000
1/09/2015 1/10/2015 1/11/2015 1/12/2015
What0is0your0test0suite0worth?
Test0suite0ROI Test0suite0cost
Cumulated cost
vs
cumulated savings
Cumulated value should increase
faster than cumulated cost
@wakaleo
Now factor in high maintenance
40-60%
Typical maintenance overhead
for poorly-written test suites
@wakaleo
Now factor in high maintenance
Number of tests
Maintenanceoverhead
@wakaleo
Now factor in high maintenance
Number of tests
Maintenanceoverhead
@wakaleo
$0
$50,000
$100,000
$150,000
$200,000
$250,000
$300,000
$350,000
$400,000
$450,000
$500,000
1/09/2015 1/10/2015 1/11/2015 1/12/2015 1/01/2016
What0is0your0test0suite0worth?
Test0suite0cost Test0suite0ROI
Now factor in high maintenance
High-maintenance costs
reduce the number of
tests a team can write
@wakaleo
$0
$50,000
$100,000
$150,000
$200,000
$250,000
$300,000
$350,000
$400,000
$450,000
$500,000
1/09/2015 1/10/2015 1/11/2015 1/12/2015 1/01/2016
What0is0your0test0suite0worth?
Test0suite0cost Test0suite0ROI
Now factor in high maintenance
High-maintenance costs
reduce the number of
tests a team can write
High maintenance costs can
cause your test suite to lose value
@wakaleo
Narrative Coding
Style
Open-Closed
Principle
Single
Responsibility
Principle
Separation of
Concerns
Software Engineering Principles can help you write
more maintainable tests
@wakaleo
Narrative Coding
Style
Open-Closed
Principle
Single
Responsibility
Principle
Separation of
Concerns
Software Engineering Principles can help you write
more maintainable tests
@wakaleo
Narrative Coding
Style
Open-Closed
Principle
Single
Responsibility
Principle
Separation of
Concerns
Software Engineering Principles can help you write
more maintainable tests
@wakaleo
Narrative Coding
Style
Open-Closed
Principle
Single
Responsibility
Principle
Separation of
Concerns
Software Engineering Principles can help you write
more maintainable tests
@wakaleo
Narrative Coding
Style
Open-Closed
Principle
Single
Responsibility
Principle
Separation of
Concerns
Software Engineering Principles can help you write
more maintainable tests
@wakaleo
Separation of Concerns - Layers
Goals
Tasks
Actions
@wakaleo
Separation of Concerns - Layers
Goals
Tasks
Actions
What are you trying to achieve?
@wakaleo
Separation of Concerns - Layers
Goals
Tasks
Actions
What are you trying to achieve?
What do you need to do to achieve
this goal?
@wakaleo
Separation of Concerns - Layers
Goals
Tasks
Actions
What are you trying to achieve?
What do you need to do to achieve
this goal?
What interactions with the
system do you need for each
task?
@wakaleo
Separation of Concerns - Layers
Scenario: Add a new todo entry on the todo home page

Given I am on the Todo application home page

When I enter 'Buy some milk' into the New Todo field

And I press ENTER

Then the todo list box should contain 'Buy some milk'
@wakaleo
Separation of Concerns - Layers
Scenario: Record a new todo action for future use

Given I need to buy some milk

When I add the todo action 'Buy some milk'

Then 'Buy some milk' should be recorded in my todo list
@wakaleo
Feature documentationDetailed feedbackHigh level feedback
Communication and documentation
@wakaleo
Feature documentationDetailed feedbackHigh level feedback
Communication and documentation
@wakaleo
Serenity BDD
“Because life is too short to
h a v e t o m a i n t a i n u g l y
automated test suites”
@wakaleo
Living
documentation
Strong Selenium
WebDriver support
JUnit, Cucumber
or JBehave
A layered approach
Serenity BDD
@wakaleo
The Serenity layered architecture
Goals
Tasks
Interactions
@wakaleo
The Serenity layered architecture
Goals
Tasks
Interactions
Tests or scenarios
@wakaleo
The Serenity layered architecture
Goals
Tasks
Interactions
Tests or scenarios
“Steps”
@wakaleo
The Serenity layered architecture
Goals
Tasks
Interactions
Tests or scenarios
“Steps”
Page Objects or other technical
components
@wakaleo
The Serenity layered architecture
Feature: Add new todos

James needs to be able to jot down actions he needs to do as he
thinks of them



Scenario: Record a new todo action for future use

Given James needs to buy some milk

When James adds the todo action 'Buy some milk'

Then 'Buy some milk' should be recorded in his todo list
@wakaleo
The Serenity layered architecture
Feature: Add new todos

James needs to be able to jot down actions he needs to do as he
thinks of them



Scenario: Record a new todo action for future use

Given James needs to buy some milk

When James adds the todo action 'Buy some milk'

Then 'Buy some milk' should be recorded in his todo list
A goal
@wakaleo
The Serenity layered architecture
Feature: Add new todos

James needs to be able to jot down actions he needs to do as he
thinks of them



Scenario: Record a new todo action for future use

Given James needs to buy some milk

When James adds the todo action 'Buy some milk'

Then 'Buy some milk' should be recorded in his todo list
A goal
A task
@wakaleo
The Serenity layered architecture
Feature: Add new todos

James needs to be able to jot down actions he needs to do as he
thinks of them



Scenario: Record a new todo action for future use

Given James needs to buy some milk

When James adds the todo action 'Buy some milk'

Then 'Buy some milk' should be recorded in his todo list
A goal
A task
@Steps ATodoUser james;



@When(“^(?:.*) (?:adds|has added) the todo action '(.*)'$")

public void i_add_the_todo_action(String actionName) {

james.adds_an_action_called(actionName);

}
@wakaleo
The Serenity layered architecture
Feature: Add new todos

James needs to be able to jot down actions he needs to do as he
thinks of them



Scenario: Record a new todo action for future use

Given James needs to buy some milk

When James adds the todo action 'Buy some milk'

Then 'Buy some milk' should be recorded in his todo list
A goal
A task
@Steps ATodoUser james;



@When(“^(?:.*) (?:adds|has added) the todo action '(.*)'$")

public void i_add_the_todo_action(String actionName) {

james.adds_an_action_called(actionName);

}
The task definition
@wakaleo
The Serenity layered architecture
Feature: Add new todos

James needs to be able to jot down actions he needs to do as he
thinks of them



Scenario: Record a new todo action for future use

Given James needs to buy some milk

When James adds the todo action 'Buy some milk'

Then 'Buy some milk' should be recorded in his todo list
A goal
A task
@Steps ATodoUser james;



@When(“^(?:.*) (?:adds|has added) the todo action '(.*)'$")

public void i_add_the_todo_action(String actionName) {

james.adds_an_action_called(actionName);

}
The task definition
TodoPage onTheTodoHomePage;



@Step

public void adds_an_action_called(String actionName) {

onTheTodoHomePage.addAnActionCalled(actionName);

}
@wakaleo
The Serenity layered architecture
Feature: Add new todos

James needs to be able to jot down actions he needs to do as he
thinks of them



Scenario: Record a new todo action for future use

Given James needs to buy some milk

When James adds the todo action 'Buy some milk'

Then 'Buy some milk' should be recorded in his todo list
A goal
A task
@Steps ATodoUser james;



@When(“^(?:.*) (?:adds|has added) the todo action '(.*)'$")

public void i_add_the_todo_action(String actionName) {

james.adds_an_action_called(actionName);

}
The task definition
TodoPage onTheTodoHomePage;



@Step

public void adds_an_action_called(String actionName) {

onTheTodoHomePage.addAnActionCalled(actionName);

}
An interaction
@wakaleo
Serenity for Living Documentation
Feature: Add new todos

I need to be able to jot down actions I need to do as fast as I think of them



Scenario: Record a new todo action for future use

Given I need to buy some milk

When I add the todo action 'Buy some milk'

Then 'Buy some milk' should be recorded in my todo list
@wakaleo
Serenity for Living Documentation
Feature: Add new todos

I need to be able to jot down actions I need to do as fast as I think of them



Scenario: Record a new todo action for future use

Given I need to buy some milk

When I add the todo action 'Buy some milk'

Then 'Buy some milk' should be recorded in my todo list
@wakaleo
Coding demo
@wakaleo
Hard to apply to
Single Page Apps
Need modifications
to extend
Multiple
Responsibilities
Bloat
Page Objects considered harmful
@wakaleo
Introducing the Journey Pattern
@wakaleo
Highly readable
style
Encourages reuse
and maintainable
code
Small, reusable
interaction
components
User-centric
The Journey Pattern
@wakaleo
Origins of the Journey Pattern in Serenity
Antony Marcano
2007
*
* Based on actual events
@wakaleo
Origins of the Journey Pattern in Serenity
Antony Marcano
“Page Objects kinda suck. Why
not try this pattern instead?”
Agile Alliance Functional Test Tools Workshop 2007
2007
*
* Based on actual events
@wakaleo
Origins of the Journey Pattern in Serenity
Antony Marcano
2007 2009
Andy Palmer
@wakaleo
Origins of the Journey Pattern in Serenity
Antony Marcano
2007 2009
More people should know
about this pattern
Andy Palmer
@wakaleo
Origins of the Journey Pattern in Serenity
Antony Marcano
2007 2009
More people should know
about this pattern
JNarrate
Andy Palmer
Let’s write a reference
implementation!
@wakaleo
Origins of the Journey Pattern in Serenity
Antony Marcano
2007 2009
“Coronation Street
rocks
2012
Andy Palmer
@wakaleo
Origins of the Journey Pattern in Serenity
Antony Marcano
2007 2009
“Coronation Street
rocks
2012
Andy Palmer
Eureka! “Soap Opera Personas”
@wakaleo
Andy Palmer
Origins of the Journey Pattern in Serenity
Antony Marcano
2007 2009 2012
Jan Molak
@wakaleo
Andy Palmer
Origins of the Journey Pattern in Serenity
Antony Marcano
2007 2009 2012
Jan Molak
You should call this “The
Journey Pattern”
@wakaleo
Andy Palmer
Origins of the Journey Pattern in Serenity
Antony Marcano
2007 2009 2012
Jan Molak
You should call this “The
Journey Pattern”
Damn!
@wakaleo
Andy Palmer
Origins of the Journey Pattern in Serenity
Antony Marcano
2007 2009 2012
Jan Molak
You should call this “The
Journey Pattern”
Damn!
Why didn’t we
think of that!
@wakaleo
Andy
Palmer
Origins of the Journey Pattern in Serenity
Antony
Marcano
2007 2009 2012
Jan Molak
2015
John Smart
@wakaleo
Andy
Palmer
Origins of the Journey Pattern in Serenity
Antony
Marcano
2007 2009 2012
Jan Molak
2015
John Smart
Serenity is cool
@wakaleo
Andy
Palmer
Origins of the Journey Pattern in Serenity
Antony
Marcano
2007 2009 2012
Jan Molak
2015
John Smart
Serenity is cool
But it needs the
Journey Pattern
@wakaleo
Andy
Palmer
Origins of the Journey Pattern in Serenity
Antony
Marcano
2007 2009 2012
Jan Molak
2015
John Smart
Serenity is cool
So let’s make it
happen!
But it needs the
Journey Pattern
@wakaleo
The Journey Pattern - A User-Centric model
Actors have goals
@wakaleo
The Journey Pattern - A User-Centric model
Actors have goals
Meet James
@wakaleo
The Journey Pattern - A User-Centric model
Actors have goals I’d like to be able to recall all
the things I need to do
Meet James
@wakaleo
The Journey Pattern - A User-Centric model
Actors have abilities
@wakaleo
The Journey Pattern - A User-Centric model
Actors have abilities I can browse the web with my
browser
@wakaleo
The Journey Pattern - A User-Centric model
Actors have abilities I can browse the web with my
browser
I can also query REST services
@wakaleo
I’d like to be able to recall all
the things I need to do
The Journey Pattern - A User-Centric model
Actors perform tasks
@wakaleo
I’d like to be able to recall all
the things I need to do
The Journey Pattern - A User-Centric model
Actors perform tasks
I’ll add ‘Buy some milk’ to my
todo list
@wakaleo
I’d like to be able to recall all
the things I need to do
The Journey Pattern - A User-Centric model
Actors may interact with the system to
perform these tasks
I’ll add ‘Buy some milk’ to my
todo list
@wakaleo
I’d like to be able to recall all
the things I need to do
The Journey Pattern - A User-Centric model
Actors may interact with the system to
perform these tasks
I’ll add ‘Buy some milk’ to my
todo list
@wakaleo
I’d like to be able to recall all
the things I need to do
The Journey Pattern - A User-Centric model
Actors may interact with the system to
perform these tasks
I’ll add ‘Buy some milk’ to my
todo list
Type ‘Buy the milk’
@wakaleo
I’d like to be able to recall all
the things I need to do
The Journey Pattern - A User-Centric model
Actors may interact with the system to
perform these tasks
I’ll add ‘Buy some milk’ to my
todo list
Type ‘Buy the milk’
@wakaleo
I’d like to be able to recall all
the things I need to do
The Journey Pattern - A User-Centric model
Actors may interact with the system to
perform these tasks
I’ll add ‘Buy some milk’ to my
todo list
Type ‘Buy the milk’
Press ‘ENTER’
@wakaleo
I’d like to be able to recall all
the things I need to do
The Journey Pattern - A User-Centric model
Actors may interact with the system to
perform these tasks
I’ll add ‘Buy some milk’ to my
todo list
Type ‘Buy the milk’
Press ‘ENTER’
@wakaleo
The Journey Pattern in Serenity
Actors have goals I’d like to be able to recall all
the things I need to do
@wakaleo
The Journey Pattern in Serenity
Actors have goals
Feature: Add new todos

James would like to be able to recall all the things he needs to do



Scenario: Record a new todo action for future use

Given James needs to buy some milk

When James adds the todo action 'Buy some milk'

Then 'Buy some milk' should be recorded in his todo list
I’d like to be able to recall all
the things I need to do
@wakaleo
A User-Centric model
Actors have abilities I can browse the web with my
browser
Actor james = Actor.named(“James");
@Managed

WebDriver hisBrowser;
…
james.can(BrowseTheWeb.with(hisBrowser));
@wakaleo
A User-Centric model
Actors perform tasks
@Steps

AddItem addATodoItem;
…
james.attemptsTo(addATodoItem.called("Buy some milk"));
@wakaleo
A User-Centric model
Actors perform tasks I’ll add ‘Buy some milk’ to my
todo list
@Steps

AddItem addATodoItem;
…
james.attemptsTo(addATodoItem.called("Buy some milk"));
@wakaleo
A User-Centric model
Actors perform tasks
@Steps

AddItem addATodoItem;
…
james.attemptsTo(addATodoItem.called("Buy some milk"));
actor.attemptsTo(

Enter.theValue(thingToDo).into(ToDoList.NEW_TODO_FIELD),

Hit.the(RETURN).keyIn(ToDoList.NEW_TODO_FIELD)

);
@wakaleo
A User-Centric model
Actors perform tasks I’ll add ‘Buy some milk’ to my
todo list
@Steps

AddItem addATodoItem;
…
james.attemptsTo(addATodoItem.called("Buy some milk"));
actor.attemptsTo(

Enter.theValue(thingToDo).into(ToDoList.NEW_TODO_FIELD),

Hit.the(RETURN).keyIn(ToDoList.NEW_TODO_FIELD)

);
@wakaleo
A User-Centric model
Actors perform tasks I’ll add ‘Buy some milk’ to my
todo list
@Steps

AddItem addATodoItem;
…
james.attemptsTo(addATodoItem.called("Buy some milk"));
actor.attemptsTo(

Enter.theValue(thingToDo).into(ToDoList.NEW_TODO_FIELD),

Hit.the(RETURN).keyIn(ToDoList.NEW_TODO_FIELD)

);
Type ‘Buy the milk’
@wakaleo
A User-Centric model
Actors perform tasks I’ll add ‘Buy some milk’ to my
todo list
@Steps

AddItem addATodoItem;
…
james.attemptsTo(addATodoItem.called("Buy some milk"));
actor.attemptsTo(

Enter.theValue(thingToDo).into(ToDoList.NEW_TODO_FIELD),

Hit.the(RETURN).keyIn(ToDoList.NEW_TODO_FIELD)

);
Type ‘Buy the milk’
Press ‘ENTER’
@wakaleo
Coding demo
@wakaleo
References
• http://www.serenity-bdd.info

• https://github.com/serenity-bdd/serenity-journey-demo

• http://bit.ly/rg-journey
@wakaleo
Questions?
John Ferguson Smart
john.smart@wakaleo.com
wakaleo
http://www.wakaleo.com
http://www.serenity-bdd.info

More Related Content

What's hot

Introduction to Automation Testing
Introduction to Automation TestingIntroduction to Automation Testing
Introduction to Automation Testing
Archana Krushnan
 
Playwright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern WebPlaywright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern Web
Applitools
 
Testing with Spring: An Introduction
Testing with Spring: An IntroductionTesting with Spring: An Introduction
Testing with Spring: An Introduction
Sam Brannen
 
Web automation using selenium.ppt
Web automation using selenium.pptWeb automation using selenium.ppt
Web automation using selenium.ppt
Ana Sarbescu
 
Automation testing
Automation testingAutomation testing
Automation testing
Biswajit Pratihari
 
Test Automation Framework Designs
Test Automation Framework DesignsTest Automation Framework Designs
Test Automation Framework Designs
Sauce Labs
 
Karate - Web-Service API Testing Made Simple
Karate - Web-Service API Testing Made SimpleKarate - Web-Service API Testing Made Simple
Karate - Web-Service API Testing Made Simple
VodqaBLR
 
API Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj RollisonAPI Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj Rollison
TEST Huddle
 
Selenium Automation Framework
Selenium Automation  FrameworkSelenium Automation  Framework
Selenium Automation Framework
Mindfire Solutions
 
User Interface Testing. What is UI Testing and Why it is so important?
User Interface Testing. What is UI Testing and Why it is so important?User Interface Testing. What is UI Testing and Why it is so important?
User Interface Testing. What is UI Testing and Why it is so important?
Maveryx
 
Test Automation Architecture That Works by Bhupesh Dahal
Test Automation Architecture That Works by Bhupesh DahalTest Automation Architecture That Works by Bhupesh Dahal
Test Automation Architecture That Works by Bhupesh Dahal
QA or the Highway
 
Selenium with Cucumber
Selenium  with Cucumber Selenium  with Cucumber
Selenium with Cucumber
Knoldus Inc.
 
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...
Edureka!
 
Xpath in Selenium | Selenium Xpath Tutorial | Selenium Xpath Examples | Selen...
Xpath in Selenium | Selenium Xpath Tutorial | Selenium Xpath Examples | Selen...Xpath in Selenium | Selenium Xpath Tutorial | Selenium Xpath Examples | Selen...
Xpath in Selenium | Selenium Xpath Tutorial | Selenium Xpath Examples | Selen...
Edureka!
 
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'tsRobot Framework Dos And Don'ts
Robot Framework Dos And Don'ts
Pekka Klärck
 
Selenium
SeleniumSelenium
Test Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and CucumberTest Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and Cucumber
Rhoynar Software Consulting
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!Jakub Kubrynski
 
testng
testngtestng

What's hot (20)

Introduction to Automation Testing
Introduction to Automation TestingIntroduction to Automation Testing
Introduction to Automation Testing
 
Playwright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern WebPlaywright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern Web
 
Testing with Spring: An Introduction
Testing with Spring: An IntroductionTesting with Spring: An Introduction
Testing with Spring: An Introduction
 
Web automation using selenium.ppt
Web automation using selenium.pptWeb automation using selenium.ppt
Web automation using selenium.ppt
 
Automation testing
Automation testingAutomation testing
Automation testing
 
Test Automation Framework Designs
Test Automation Framework DesignsTest Automation Framework Designs
Test Automation Framework Designs
 
Karate - Web-Service API Testing Made Simple
Karate - Web-Service API Testing Made SimpleKarate - Web-Service API Testing Made Simple
Karate - Web-Service API Testing Made Simple
 
API Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj RollisonAPI Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj Rollison
 
Selenium Automation Framework
Selenium Automation  FrameworkSelenium Automation  Framework
Selenium Automation Framework
 
User Interface Testing. What is UI Testing and Why it is so important?
User Interface Testing. What is UI Testing and Why it is so important?User Interface Testing. What is UI Testing and Why it is so important?
User Interface Testing. What is UI Testing and Why it is so important?
 
Test Automation Architecture That Works by Bhupesh Dahal
Test Automation Architecture That Works by Bhupesh DahalTest Automation Architecture That Works by Bhupesh Dahal
Test Automation Architecture That Works by Bhupesh Dahal
 
Selenium with Cucumber
Selenium  with Cucumber Selenium  with Cucumber
Selenium with Cucumber
 
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...
Selenium Tutorial For Beginners | What Is Selenium? | Selenium Automation Tes...
 
Xpath in Selenium | Selenium Xpath Tutorial | Selenium Xpath Examples | Selen...
Xpath in Selenium | Selenium Xpath Tutorial | Selenium Xpath Examples | Selen...Xpath in Selenium | Selenium Xpath Tutorial | Selenium Xpath Examples | Selen...
Xpath in Selenium | Selenium Xpath Tutorial | Selenium Xpath Examples | Selen...
 
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'tsRobot Framework Dos And Don'ts
Robot Framework Dos And Don'ts
 
Selenium
SeleniumSelenium
Selenium
 
Automation Testing by Selenium Web Driver
Automation Testing by Selenium Web DriverAutomation Testing by Selenium Web Driver
Automation Testing by Selenium Web Driver
 
Test Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and CucumberTest Automation Framework with BDD and Cucumber
Test Automation Framework with BDD and Cucumber
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
testng
testngtestng
testng
 

Viewers also liked

A journey beyond the page object pattern
A journey beyond the page object patternA journey beyond the page object pattern
A journey beyond the page object pattern
RiverGlide
 
BDD Anti-patterns
BDD Anti-patternsBDD Anti-patterns
BDD Anti-patterns
John Ferguson Smart Limited
 
CukeUp 2016 Agile Product Planning Workshop
CukeUp 2016 Agile Product Planning WorkshopCukeUp 2016 Agile Product Planning Workshop
CukeUp 2016 Agile Product Planning Workshop
John Ferguson Smart Limited
 
All the world's a stage – the next step in automated testing practices
All the world's a stage – the next step in automated testing practicesAll the world's a stage – the next step in automated testing practices
All the world's a stage – the next step in automated testing practices
John Ferguson Smart Limited
 
BDD - Collaborate like you mean it!
BDD - Collaborate like you mean it!BDD - Collaborate like you mean it!
BDD - Collaborate like you mean it!
John Ferguson Smart Limited
 
BDD-Driven Microservices
BDD-Driven MicroservicesBDD-Driven Microservices
BDD-Driven Microservices
John Ferguson Smart Limited
 
Refactoring page objects The Screenplay Pattern
Refactoring page objects   The Screenplay Pattern Refactoring page objects   The Screenplay Pattern
Refactoring page objects The Screenplay Pattern
RiverGlide
 
ScreenPlay Design Patterns for QA Automation
ScreenPlay Design Patterns for QA AutomationScreenPlay Design Patterns for QA Automation
ScreenPlay Design Patterns for QA Automation
COMAQA.BY
 
BDD in Action: Building Software Right and Building the Right Software
BDD in Action: Building Software Right and Building the Right SoftwareBDD in Action: Building Software Right and Building the Right Software
BDD in Action: Building Software Right and Building the Right Software
John Ferguson Smart Limited
 
BDD Anti-patterns
BDD Anti-patternsBDD Anti-patterns
BDD Anti-patterns
John Ferguson Smart Limited
 
Better Page Object Handling with Loadable Component Pattern
Better Page Object Handling with Loadable Component PatternBetter Page Object Handling with Loadable Component Pattern
Better Page Object Handling with Loadable Component Pattern
SQALab
 
Better Page Object Handling with Loadable Component Pattern
Better Page Object Handling with Loadable Component PatternBetter Page Object Handling with Loadable Component Pattern
Better Page Object Handling with Loadable Component Pattern
Sargis Sargsyan
 
BDD: The unit test of the product owner
BDD: The unit test of the product ownerBDD: The unit test of the product owner
BDD: The unit test of the product owner
John Ferguson Smart Limited
 
Page Objects Done Right - selenium conference 2014
Page Objects Done Right - selenium conference 2014Page Objects Done Right - selenium conference 2014
Page Objects Done Right - selenium conference 2014
Oren Rubin
 
Functional testing the_good_the_bad_and_the_ugly
Functional testing the_good_the_bad_and_the_uglyFunctional testing the_good_the_bad_and_the_ugly
Functional testing the_good_the_bad_and_the_ugly
John Ferguson Smart Limited
 
It's Testing, Jim, but not as we know it - BDD for Testers
It's Testing, Jim, but not as we know it - BDD for TestersIt's Testing, Jim, but not as we know it - BDD for Testers
It's Testing, Jim, but not as we know it - BDD for Testers
John Ferguson Smart Limited
 
Serenity-BDD training
Serenity-BDD trainingSerenity-BDD training
Serenity-BDD training
Savvycom Savvycom
 
BDD in Action - Devoxx 2014
BDD in Action - Devoxx 2014BDD in Action - Devoxx 2014
BDD in Action - Devoxx 2014
John Ferguson Smart Limited
 
Building a Secure App with Google Polymer and Java / Spring
Building a Secure App with Google Polymer and Java / SpringBuilding a Secure App with Google Polymer and Java / Spring
Building a Secure App with Google Polymer and Java / Spring
sdeeg
 

Viewers also liked (20)

A journey beyond the page object pattern
A journey beyond the page object patternA journey beyond the page object pattern
A journey beyond the page object pattern
 
BDD Anti-patterns
BDD Anti-patternsBDD Anti-patterns
BDD Anti-patterns
 
CukeUp 2016 Agile Product Planning Workshop
CukeUp 2016 Agile Product Planning WorkshopCukeUp 2016 Agile Product Planning Workshop
CukeUp 2016 Agile Product Planning Workshop
 
All the world's a stage – the next step in automated testing practices
All the world's a stage – the next step in automated testing practicesAll the world's a stage – the next step in automated testing practices
All the world's a stage – the next step in automated testing practices
 
Beyond Page Objects
Beyond Page ObjectsBeyond Page Objects
Beyond Page Objects
 
BDD - Collaborate like you mean it!
BDD - Collaborate like you mean it!BDD - Collaborate like you mean it!
BDD - Collaborate like you mean it!
 
BDD-Driven Microservices
BDD-Driven MicroservicesBDD-Driven Microservices
BDD-Driven Microservices
 
Refactoring page objects The Screenplay Pattern
Refactoring page objects   The Screenplay Pattern Refactoring page objects   The Screenplay Pattern
Refactoring page objects The Screenplay Pattern
 
ScreenPlay Design Patterns for QA Automation
ScreenPlay Design Patterns for QA AutomationScreenPlay Design Patterns for QA Automation
ScreenPlay Design Patterns for QA Automation
 
BDD in Action: Building Software Right and Building the Right Software
BDD in Action: Building Software Right and Building the Right SoftwareBDD in Action: Building Software Right and Building the Right Software
BDD in Action: Building Software Right and Building the Right Software
 
BDD Anti-patterns
BDD Anti-patternsBDD Anti-patterns
BDD Anti-patterns
 
Better Page Object Handling with Loadable Component Pattern
Better Page Object Handling with Loadable Component PatternBetter Page Object Handling with Loadable Component Pattern
Better Page Object Handling with Loadable Component Pattern
 
Better Page Object Handling with Loadable Component Pattern
Better Page Object Handling with Loadable Component PatternBetter Page Object Handling with Loadable Component Pattern
Better Page Object Handling with Loadable Component Pattern
 
BDD: The unit test of the product owner
BDD: The unit test of the product ownerBDD: The unit test of the product owner
BDD: The unit test of the product owner
 
Page Objects Done Right - selenium conference 2014
Page Objects Done Right - selenium conference 2014Page Objects Done Right - selenium conference 2014
Page Objects Done Right - selenium conference 2014
 
Functional testing the_good_the_bad_and_the_ugly
Functional testing the_good_the_bad_and_the_uglyFunctional testing the_good_the_bad_and_the_ugly
Functional testing the_good_the_bad_and_the_ugly
 
It's Testing, Jim, but not as we know it - BDD for Testers
It's Testing, Jim, but not as we know it - BDD for TestersIt's Testing, Jim, but not as we know it - BDD for Testers
It's Testing, Jim, but not as we know it - BDD for Testers
 
Serenity-BDD training
Serenity-BDD trainingSerenity-BDD training
Serenity-BDD training
 
BDD in Action - Devoxx 2014
BDD in Action - Devoxx 2014BDD in Action - Devoxx 2014
BDD in Action - Devoxx 2014
 
Building a Secure App with Google Polymer and Java / Spring
Building a Secure App with Google Polymer and Java / SpringBuilding a Secure App with Google Polymer and Java / Spring
Building a Secure App with Google Polymer and Java / Spring
 

Similar to Serenity and the Journey Pattern

Serenity BDD - from executable specifications to living documentation
Serenity BDD - from executable specifications to living documentationSerenity BDD - from executable specifications to living documentation
Serenity BDD - from executable specifications to living documentation
Alex Soto
 
TestWorks Conf Serenity BDD in action - John Ferguson Smart
TestWorks Conf Serenity BDD in action - John Ferguson SmartTestWorks Conf Serenity BDD in action - John Ferguson Smart
TestWorks Conf Serenity BDD in action - John Ferguson Smart
Xebia Nederland BV
 
Mobile App Feature Configuration and A/B Experiments
Mobile App Feature Configuration and A/B ExperimentsMobile App Feature Configuration and A/B Experiments
Mobile App Feature Configuration and A/B Experiments
lacyrhoades
 
Refactoring ReSwift Applications in order to make them modular
Refactoring ReSwift Applications in order to make them modularRefactoring ReSwift Applications in order to make them modular
Refactoring ReSwift Applications in order to make them modular
Giovanni Catania
 
Automated UI test on mobile - with Cucumber/Calabash
Automated UI test on mobile - with Cucumber/CalabashAutomated UI test on mobile - with Cucumber/Calabash
Automated UI test on mobile - with Cucumber/Calabash
Niels Frydenholm
 
Best Practice Testing with Lime 2
Best Practice Testing with Lime 2Best Practice Testing with Lime 2
Best Practice Testing with Lime 2Bernhard Schussek
 
Workshop State-management in React with Context and Hooks
Workshop State-management in React with Context and HooksWorkshop State-management in React with Context and Hooks
Workshop State-management in React with Context and Hooks
Roy Derks
 
Block flixpresentation
Block flixpresentationBlock flixpresentation
Block flixpresentationimmiki01
 
APIs for catalogs
APIs for catalogsAPIs for catalogs
APIs for catalogs
X.commerce
 
Visual Testing: Turbo-Charge Your Functional Tests with Visual Powers in Just...
Visual Testing: Turbo-Charge Your Functional Tests with Visual Powers in Just...Visual Testing: Turbo-Charge Your Functional Tests with Visual Powers in Just...
Visual Testing: Turbo-Charge Your Functional Tests with Visual Powers in Just...
Applitools
 
Reflections on Evolving an Effective Product Culture
Reflections on Evolving an Effective Product CultureReflections on Evolving an Effective Product Culture
Reflections on Evolving an Effective Product Culture
Graham Lea
 
The road to continuous deployment: a case study - Michiel Rook - Codemotion A...
The road to continuous deployment: a case study - Michiel Rook - Codemotion A...The road to continuous deployment: a case study - Michiel Rook - Codemotion A...
The road to continuous deployment: a case study - Michiel Rook - Codemotion A...
Codemotion
 
Advanced Google Analytics #SearchFest
Advanced Google Analytics #SearchFestAdvanced Google Analytics #SearchFest
Advanced Google Analytics #SearchFest
Mike P.
 
Wave Workshop
Wave WorkshopWave Workshop
Wave Workshop
Jason Dinh
 
Achievement Unlocked: Drive development, increase velocity, and write blissfu...
Achievement Unlocked: Drive development, increase velocity, and write blissfu...Achievement Unlocked: Drive development, increase velocity, and write blissfu...
Achievement Unlocked: Drive development, increase velocity, and write blissfu...
All Things Open
 
Testing C# and ASP.net using Ruby
Testing C# and ASP.net using RubyTesting C# and ASP.net using Ruby
Testing C# and ASP.net using Ruby
Ben Hall
 
Powershell to the People #suguk
Powershell to the People #sugukPowershell to the People #suguk
Powershell to the People #suguk
Chris McKinley
 
Synchronize applications with akeneo/batch
Synchronize applications with akeneo/batchSynchronize applications with akeneo/batch
Synchronize applications with akeneo/batch
gplanchat
 
Software Testing
Software TestingSoftware Testing
Software Testing
superphly
 
Seven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks - Compose Screenshot Testing Made EasySeven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks
 

Similar to Serenity and the Journey Pattern (20)

Serenity BDD - from executable specifications to living documentation
Serenity BDD - from executable specifications to living documentationSerenity BDD - from executable specifications to living documentation
Serenity BDD - from executable specifications to living documentation
 
TestWorks Conf Serenity BDD in action - John Ferguson Smart
TestWorks Conf Serenity BDD in action - John Ferguson SmartTestWorks Conf Serenity BDD in action - John Ferguson Smart
TestWorks Conf Serenity BDD in action - John Ferguson Smart
 
Mobile App Feature Configuration and A/B Experiments
Mobile App Feature Configuration and A/B ExperimentsMobile App Feature Configuration and A/B Experiments
Mobile App Feature Configuration and A/B Experiments
 
Refactoring ReSwift Applications in order to make them modular
Refactoring ReSwift Applications in order to make them modularRefactoring ReSwift Applications in order to make them modular
Refactoring ReSwift Applications in order to make them modular
 
Automated UI test on mobile - with Cucumber/Calabash
Automated UI test on mobile - with Cucumber/CalabashAutomated UI test on mobile - with Cucumber/Calabash
Automated UI test on mobile - with Cucumber/Calabash
 
Best Practice Testing with Lime 2
Best Practice Testing with Lime 2Best Practice Testing with Lime 2
Best Practice Testing with Lime 2
 
Workshop State-management in React with Context and Hooks
Workshop State-management in React with Context and HooksWorkshop State-management in React with Context and Hooks
Workshop State-management in React with Context and Hooks
 
Block flixpresentation
Block flixpresentationBlock flixpresentation
Block flixpresentation
 
APIs for catalogs
APIs for catalogsAPIs for catalogs
APIs for catalogs
 
Visual Testing: Turbo-Charge Your Functional Tests with Visual Powers in Just...
Visual Testing: Turbo-Charge Your Functional Tests with Visual Powers in Just...Visual Testing: Turbo-Charge Your Functional Tests with Visual Powers in Just...
Visual Testing: Turbo-Charge Your Functional Tests with Visual Powers in Just...
 
Reflections on Evolving an Effective Product Culture
Reflections on Evolving an Effective Product CultureReflections on Evolving an Effective Product Culture
Reflections on Evolving an Effective Product Culture
 
The road to continuous deployment: a case study - Michiel Rook - Codemotion A...
The road to continuous deployment: a case study - Michiel Rook - Codemotion A...The road to continuous deployment: a case study - Michiel Rook - Codemotion A...
The road to continuous deployment: a case study - Michiel Rook - Codemotion A...
 
Advanced Google Analytics #SearchFest
Advanced Google Analytics #SearchFestAdvanced Google Analytics #SearchFest
Advanced Google Analytics #SearchFest
 
Wave Workshop
Wave WorkshopWave Workshop
Wave Workshop
 
Achievement Unlocked: Drive development, increase velocity, and write blissfu...
Achievement Unlocked: Drive development, increase velocity, and write blissfu...Achievement Unlocked: Drive development, increase velocity, and write blissfu...
Achievement Unlocked: Drive development, increase velocity, and write blissfu...
 
Testing C# and ASP.net using Ruby
Testing C# and ASP.net using RubyTesting C# and ASP.net using Ruby
Testing C# and ASP.net using Ruby
 
Powershell to the People #suguk
Powershell to the People #sugukPowershell to the People #suguk
Powershell to the People #suguk
 
Synchronize applications with akeneo/batch
Synchronize applications with akeneo/batchSynchronize applications with akeneo/batch
Synchronize applications with akeneo/batch
 
Software Testing
Software TestingSoftware Testing
Software Testing
 
Seven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks - Compose Screenshot Testing Made EasySeven Peaks Speaks - Compose Screenshot Testing Made Easy
Seven Peaks Speaks - Compose Screenshot Testing Made Easy
 

More from John Ferguson Smart Limited

My Reading Specs - Refactoring Patterns for Gherkin Scenarios
My Reading Specs - Refactoring Patterns for Gherkin ScenariosMy Reading Specs - Refactoring Patterns for Gherkin Scenarios
My Reading Specs - Refactoring Patterns for Gherkin Scenarios
John Ferguson Smart Limited
 
Artisti e Condotierri - How can your team become artists of the 21st century ...
Artisti e Condotierri - How can your team become artists of the 21st century ...Artisti e Condotierri - How can your team become artists of the 21st century ...
Artisti e Condotierri - How can your team become artists of the 21st century ...
John Ferguson Smart Limited
 
Engage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a differenceEngage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a difference
John Ferguson Smart Limited
 
BE A POD OF DOLPHINS, NOT A DANCING ELEPHANT
BE A POD OF DOLPHINS, NOT A DANCING ELEPHANTBE A POD OF DOLPHINS, NOT A DANCING ELEPHANT
BE A POD OF DOLPHINS, NOT A DANCING ELEPHANT
John Ferguson Smart Limited
 
Feature Mapping Workshop
Feature Mapping WorkshopFeature Mapping Workshop
Feature Mapping Workshop
John Ferguson Smart Limited
 
Engage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a differenceEngage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a difference
John Ferguson Smart Limited
 
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
John Ferguson Smart Limited
 
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
John Ferguson Smart Limited
 
Shift left-devoxx-pl
Shift left-devoxx-plShift left-devoxx-pl
Shift left-devoxx-pl
John Ferguson Smart Limited
 
Screenplay - Next generation automated acceptance testing
Screenplay - Next generation automated acceptance testingScreenplay - Next generation automated acceptance testing
Screenplay - Next generation automated acceptance testing
John Ferguson Smart Limited
 
Cucumber and Spock Primer
Cucumber and Spock PrimerCucumber and Spock Primer
Cucumber and Spock Primer
John Ferguson Smart Limited
 
BDD in Action - Automated Web Testing with WebDriver and Serenity
BDD in Action - Automated Web Testing with WebDriver and SerenityBDD in Action - Automated Web Testing with WebDriver and Serenity
BDD in Action - Automated Web Testing with WebDriver and Serenity
John Ferguson Smart Limited
 
Its testing-jim-but-not-as-we-know-it-devoxx
Its testing-jim-but-not-as-we-know-it-devoxxIts testing-jim-but-not-as-we-know-it-devoxx
Its testing-jim-but-not-as-we-know-it-devoxx
John Ferguson Smart Limited
 
BDD in Action - building software that matters
BDD in Action - building software that mattersBDD in Action - building software that matters
BDD in Action - building software that matters
John Ferguson Smart Limited
 
BDD in Action – principles, practices and real-world application
BDD in Action – principles, practices and real-world applicationBDD in Action – principles, practices and real-world application
BDD in Action – principles, practices and real-world application
John Ferguson Smart Limited
 
TDD and BDD in Java 8 - what's in it for me?
TDD and BDD in Java 8 - what's in it for me?TDD and BDD in Java 8 - what's in it for me?
TDD and BDD in Java 8 - what's in it for me?
John Ferguson Smart Limited
 
BDD: There's more to it than you think
BDD: There's more to it than you thinkBDD: There's more to it than you think
BDD: There's more to it than you think
John Ferguson Smart Limited
 
Help! My Legacy Application is Unmaintainable!
Help! My Legacy Application is Unmaintainable!Help! My Legacy Application is Unmaintainable!
Help! My Legacy Application is Unmaintainable!
John Ferguson Smart Limited
 

More from John Ferguson Smart Limited (19)

My Reading Specs - Refactoring Patterns for Gherkin Scenarios
My Reading Specs - Refactoring Patterns for Gherkin ScenariosMy Reading Specs - Refactoring Patterns for Gherkin Scenarios
My Reading Specs - Refactoring Patterns for Gherkin Scenarios
 
Artisti e Condotierri - How can your team become artists of the 21st century ...
Artisti e Condotierri - How can your team become artists of the 21st century ...Artisti e Condotierri - How can your team become artists of the 21st century ...
Artisti e Condotierri - How can your team become artists of the 21st century ...
 
Engage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a differenceEngage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a difference
 
BE A POD OF DOLPHINS, NOT A DANCING ELEPHANT
BE A POD OF DOLPHINS, NOT A DANCING ELEPHANTBE A POD OF DOLPHINS, NOT A DANCING ELEPHANT
BE A POD OF DOLPHINS, NOT A DANCING ELEPHANT
 
Feature Mapping Workshop
Feature Mapping WorkshopFeature Mapping Workshop
Feature Mapping Workshop
 
Engage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a differenceEngage! Bringing teams together to deliver software that makes a difference
Engage! Bringing teams together to deliver software that makes a difference
 
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
 
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
Beyond Given/When/Then - why diving into Cucumber is the wrong approach to ad...
 
Shift left-devoxx-pl
Shift left-devoxx-plShift left-devoxx-pl
Shift left-devoxx-pl
 
Screenplay - Next generation automated acceptance testing
Screenplay - Next generation automated acceptance testingScreenplay - Next generation automated acceptance testing
Screenplay - Next generation automated acceptance testing
 
Cucumber and Spock Primer
Cucumber and Spock PrimerCucumber and Spock Primer
Cucumber and Spock Primer
 
BDD in Action - Automated Web Testing with WebDriver and Serenity
BDD in Action - Automated Web Testing with WebDriver and SerenityBDD in Action - Automated Web Testing with WebDriver and Serenity
BDD in Action - Automated Web Testing with WebDriver and Serenity
 
Its testing-jim-but-not-as-we-know-it-devoxx
Its testing-jim-but-not-as-we-know-it-devoxxIts testing-jim-but-not-as-we-know-it-devoxx
Its testing-jim-but-not-as-we-know-it-devoxx
 
BDD in Action - building software that matters
BDD in Action - building software that mattersBDD in Action - building software that matters
BDD in Action - building software that matters
 
BDD in Action – principles, practices and real-world application
BDD in Action – principles, practices and real-world applicationBDD in Action – principles, practices and real-world application
BDD in Action – principles, practices and real-world application
 
TDD and BDD in Java 8 - what's in it for me?
TDD and BDD in Java 8 - what's in it for me?TDD and BDD in Java 8 - what's in it for me?
TDD and BDD in Java 8 - what's in it for me?
 
Continuous Integration 101
Continuous Integration 101Continuous Integration 101
Continuous Integration 101
 
BDD: There's more to it than you think
BDD: There's more to it than you thinkBDD: There's more to it than you think
BDD: There's more to it than you think
 
Help! My Legacy Application is Unmaintainable!
Help! My Legacy Application is Unmaintainable!Help! My Legacy Application is Unmaintainable!
Help! My Legacy Application is Unmaintainable!
 

Recently uploaded

Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 

Recently uploaded (20)

Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 

Serenity and the Journey Pattern

  • 1. @wakaleo The evolution of automated testing practices Take me on a journey @wakaleo
  • 2. @wakaleo John Ferguson Smart Introductions “I help teams of smart people 
 learn to work together more efficiently, 
 to deliver better software faster”
  • 3. @wakaleo Test Automation Do it well, or don’t do it at all
  • 4. @wakaleo How much are your tests worth? Weekly cost vs weekly savings $0 $20,000 $40,000 $60,000 $80,000 $100,000 $120,000 $140,000 $160,000 $180,000 1/09/2015 1/10/2015 1/11/2015 1/12/2015 Test0suite0cost0vs0savings0(per0week) Cost0saved0par0week Test0suite0cost0per0week
  • 5. @wakaleo How much are your tests worth? Weekly cost vs weekly savings $0 $20,000 $40,000 $60,000 $80,000 $100,000 $120,000 $140,000 $160,000 $180,000 1/09/2015 1/10/2015 1/11/2015 1/12/2015 Test0suite0cost0vs0savings0(per0week) Cost0saved0par0week Test0suite0cost0per0week Team cost is constant
  • 6. @wakaleo How much are your tests worth? Weekly cost vs weekly savings $0 $20,000 $40,000 $60,000 $80,000 $100,000 $120,000 $140,000 $160,000 $180,000 1/09/2015 1/10/2015 1/11/2015 1/12/2015 Test0suite0cost0vs0savings0(per0week) Cost0saved0par0week Test0suite0cost0per0week Team cost is constant Time saved increases with the number of executed
  • 7. @wakaleo How much are your tests worth? $0 $200,000 $400,000 $600,000 $800,000 $1,000,000 $1,200,000 1/09/2015 1/10/2015 1/11/2015 1/12/2015 What0is0your0test0suite0worth? Test0suite0ROI Test0suite0cost Cumulated cost vs cumulated savings
  • 8. @wakaleo How much are your tests worth? $0 $200,000 $400,000 $600,000 $800,000 $1,000,000 $1,200,000 1/09/2015 1/10/2015 1/11/2015 1/12/2015 What0is0your0test0suite0worth? Test0suite0ROI Test0suite0cost Cumulated cost vs cumulated savings Cumulated value should increase faster than cumulated cost
  • 9. @wakaleo Now factor in high maintenance 40-60% Typical maintenance overhead for poorly-written test suites
  • 10. @wakaleo Now factor in high maintenance Number of tests Maintenanceoverhead
  • 11. @wakaleo Now factor in high maintenance Number of tests Maintenanceoverhead
  • 12. @wakaleo $0 $50,000 $100,000 $150,000 $200,000 $250,000 $300,000 $350,000 $400,000 $450,000 $500,000 1/09/2015 1/10/2015 1/11/2015 1/12/2015 1/01/2016 What0is0your0test0suite0worth? Test0suite0cost Test0suite0ROI Now factor in high maintenance High-maintenance costs reduce the number of tests a team can write
  • 13. @wakaleo $0 $50,000 $100,000 $150,000 $200,000 $250,000 $300,000 $350,000 $400,000 $450,000 $500,000 1/09/2015 1/10/2015 1/11/2015 1/12/2015 1/01/2016 What0is0your0test0suite0worth? Test0suite0cost Test0suite0ROI Now factor in high maintenance High-maintenance costs reduce the number of tests a team can write High maintenance costs can cause your test suite to lose value
  • 19. @wakaleo Separation of Concerns - Layers Goals Tasks Actions
  • 20. @wakaleo Separation of Concerns - Layers Goals Tasks Actions What are you trying to achieve?
  • 21. @wakaleo Separation of Concerns - Layers Goals Tasks Actions What are you trying to achieve? What do you need to do to achieve this goal?
  • 22. @wakaleo Separation of Concerns - Layers Goals Tasks Actions What are you trying to achieve? What do you need to do to achieve this goal? What interactions with the system do you need for each task?
  • 23. @wakaleo Separation of Concerns - Layers Scenario: Add a new todo entry on the todo home page
 Given I am on the Todo application home page
 When I enter 'Buy some milk' into the New Todo field
 And I press ENTER
 Then the todo list box should contain 'Buy some milk'
  • 24. @wakaleo Separation of Concerns - Layers Scenario: Record a new todo action for future use
 Given I need to buy some milk
 When I add the todo action 'Buy some milk'
 Then 'Buy some milk' should be recorded in my todo list
  • 25. @wakaleo Feature documentationDetailed feedbackHigh level feedback Communication and documentation
  • 26. @wakaleo Feature documentationDetailed feedbackHigh level feedback Communication and documentation
  • 27. @wakaleo Serenity BDD “Because life is too short to h a v e t o m a i n t a i n u g l y automated test suites”
  • 28. @wakaleo Living documentation Strong Selenium WebDriver support JUnit, Cucumber or JBehave A layered approach Serenity BDD
  • 29. @wakaleo The Serenity layered architecture Goals Tasks Interactions
  • 30. @wakaleo The Serenity layered architecture Goals Tasks Interactions Tests or scenarios
  • 31. @wakaleo The Serenity layered architecture Goals Tasks Interactions Tests or scenarios “Steps”
  • 32. @wakaleo The Serenity layered architecture Goals Tasks Interactions Tests or scenarios “Steps” Page Objects or other technical components
  • 33. @wakaleo The Serenity layered architecture Feature: Add new todos
 James needs to be able to jot down actions he needs to do as he thinks of them
 
 Scenario: Record a new todo action for future use
 Given James needs to buy some milk
 When James adds the todo action 'Buy some milk'
 Then 'Buy some milk' should be recorded in his todo list
  • 34. @wakaleo The Serenity layered architecture Feature: Add new todos
 James needs to be able to jot down actions he needs to do as he thinks of them
 
 Scenario: Record a new todo action for future use
 Given James needs to buy some milk
 When James adds the todo action 'Buy some milk'
 Then 'Buy some milk' should be recorded in his todo list A goal
  • 35. @wakaleo The Serenity layered architecture Feature: Add new todos
 James needs to be able to jot down actions he needs to do as he thinks of them
 
 Scenario: Record a new todo action for future use
 Given James needs to buy some milk
 When James adds the todo action 'Buy some milk'
 Then 'Buy some milk' should be recorded in his todo list A goal A task
  • 36. @wakaleo The Serenity layered architecture Feature: Add new todos
 James needs to be able to jot down actions he needs to do as he thinks of them
 
 Scenario: Record a new todo action for future use
 Given James needs to buy some milk
 When James adds the todo action 'Buy some milk'
 Then 'Buy some milk' should be recorded in his todo list A goal A task @Steps ATodoUser james;
 
 @When(“^(?:.*) (?:adds|has added) the todo action '(.*)'$")
 public void i_add_the_todo_action(String actionName) {
 james.adds_an_action_called(actionName);
 }
  • 37. @wakaleo The Serenity layered architecture Feature: Add new todos
 James needs to be able to jot down actions he needs to do as he thinks of them
 
 Scenario: Record a new todo action for future use
 Given James needs to buy some milk
 When James adds the todo action 'Buy some milk'
 Then 'Buy some milk' should be recorded in his todo list A goal A task @Steps ATodoUser james;
 
 @When(“^(?:.*) (?:adds|has added) the todo action '(.*)'$")
 public void i_add_the_todo_action(String actionName) {
 james.adds_an_action_called(actionName);
 } The task definition
  • 38. @wakaleo The Serenity layered architecture Feature: Add new todos
 James needs to be able to jot down actions he needs to do as he thinks of them
 
 Scenario: Record a new todo action for future use
 Given James needs to buy some milk
 When James adds the todo action 'Buy some milk'
 Then 'Buy some milk' should be recorded in his todo list A goal A task @Steps ATodoUser james;
 
 @When(“^(?:.*) (?:adds|has added) the todo action '(.*)'$")
 public void i_add_the_todo_action(String actionName) {
 james.adds_an_action_called(actionName);
 } The task definition TodoPage onTheTodoHomePage;
 
 @Step
 public void adds_an_action_called(String actionName) {
 onTheTodoHomePage.addAnActionCalled(actionName);
 }
  • 39. @wakaleo The Serenity layered architecture Feature: Add new todos
 James needs to be able to jot down actions he needs to do as he thinks of them
 
 Scenario: Record a new todo action for future use
 Given James needs to buy some milk
 When James adds the todo action 'Buy some milk'
 Then 'Buy some milk' should be recorded in his todo list A goal A task @Steps ATodoUser james;
 
 @When(“^(?:.*) (?:adds|has added) the todo action '(.*)'$")
 public void i_add_the_todo_action(String actionName) {
 james.adds_an_action_called(actionName);
 } The task definition TodoPage onTheTodoHomePage;
 
 @Step
 public void adds_an_action_called(String actionName) {
 onTheTodoHomePage.addAnActionCalled(actionName);
 } An interaction
  • 40. @wakaleo Serenity for Living Documentation Feature: Add new todos
 I need to be able to jot down actions I need to do as fast as I think of them
 
 Scenario: Record a new todo action for future use
 Given I need to buy some milk
 When I add the todo action 'Buy some milk'
 Then 'Buy some milk' should be recorded in my todo list
  • 41. @wakaleo Serenity for Living Documentation Feature: Add new todos
 I need to be able to jot down actions I need to do as fast as I think of them
 
 Scenario: Record a new todo action for future use
 Given I need to buy some milk
 When I add the todo action 'Buy some milk'
 Then 'Buy some milk' should be recorded in my todo list
  • 43. @wakaleo Hard to apply to Single Page Apps Need modifications to extend Multiple Responsibilities Bloat Page Objects considered harmful
  • 45. @wakaleo Highly readable style Encourages reuse and maintainable code Small, reusable interaction components User-centric The Journey Pattern
  • 46. @wakaleo Origins of the Journey Pattern in Serenity Antony Marcano 2007 * * Based on actual events
  • 47. @wakaleo Origins of the Journey Pattern in Serenity Antony Marcano “Page Objects kinda suck. Why not try this pattern instead?” Agile Alliance Functional Test Tools Workshop 2007 2007 * * Based on actual events
  • 48. @wakaleo Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 Andy Palmer
  • 49. @wakaleo Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 More people should know about this pattern Andy Palmer
  • 50. @wakaleo Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 More people should know about this pattern JNarrate Andy Palmer Let’s write a reference implementation!
  • 51. @wakaleo Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 “Coronation Street rocks 2012 Andy Palmer
  • 52. @wakaleo Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 “Coronation Street rocks 2012 Andy Palmer Eureka! “Soap Opera Personas”
  • 53. @wakaleo Andy Palmer Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 2012 Jan Molak
  • 54. @wakaleo Andy Palmer Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 2012 Jan Molak You should call this “The Journey Pattern”
  • 55. @wakaleo Andy Palmer Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 2012 Jan Molak You should call this “The Journey Pattern” Damn!
  • 56. @wakaleo Andy Palmer Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 2012 Jan Molak You should call this “The Journey Pattern” Damn! Why didn’t we think of that!
  • 57. @wakaleo Andy Palmer Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 2012 Jan Molak 2015 John Smart
  • 58. @wakaleo Andy Palmer Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 2012 Jan Molak 2015 John Smart Serenity is cool
  • 59. @wakaleo Andy Palmer Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 2012 Jan Molak 2015 John Smart Serenity is cool But it needs the Journey Pattern
  • 60. @wakaleo Andy Palmer Origins of the Journey Pattern in Serenity Antony Marcano 2007 2009 2012 Jan Molak 2015 John Smart Serenity is cool So let’s make it happen! But it needs the Journey Pattern
  • 61. @wakaleo The Journey Pattern - A User-Centric model Actors have goals
  • 62. @wakaleo The Journey Pattern - A User-Centric model Actors have goals Meet James
  • 63. @wakaleo The Journey Pattern - A User-Centric model Actors have goals I’d like to be able to recall all the things I need to do Meet James
  • 64. @wakaleo The Journey Pattern - A User-Centric model Actors have abilities
  • 65. @wakaleo The Journey Pattern - A User-Centric model Actors have abilities I can browse the web with my browser
  • 66. @wakaleo The Journey Pattern - A User-Centric model Actors have abilities I can browse the web with my browser I can also query REST services
  • 67. @wakaleo I’d like to be able to recall all the things I need to do The Journey Pattern - A User-Centric model Actors perform tasks
  • 68. @wakaleo I’d like to be able to recall all the things I need to do The Journey Pattern - A User-Centric model Actors perform tasks I’ll add ‘Buy some milk’ to my todo list
  • 69. @wakaleo I’d like to be able to recall all the things I need to do The Journey Pattern - A User-Centric model Actors may interact with the system to perform these tasks I’ll add ‘Buy some milk’ to my todo list
  • 70. @wakaleo I’d like to be able to recall all the things I need to do The Journey Pattern - A User-Centric model Actors may interact with the system to perform these tasks I’ll add ‘Buy some milk’ to my todo list
  • 71. @wakaleo I’d like to be able to recall all the things I need to do The Journey Pattern - A User-Centric model Actors may interact with the system to perform these tasks I’ll add ‘Buy some milk’ to my todo list Type ‘Buy the milk’
  • 72. @wakaleo I’d like to be able to recall all the things I need to do The Journey Pattern - A User-Centric model Actors may interact with the system to perform these tasks I’ll add ‘Buy some milk’ to my todo list Type ‘Buy the milk’
  • 73. @wakaleo I’d like to be able to recall all the things I need to do The Journey Pattern - A User-Centric model Actors may interact with the system to perform these tasks I’ll add ‘Buy some milk’ to my todo list Type ‘Buy the milk’ Press ‘ENTER’
  • 74. @wakaleo I’d like to be able to recall all the things I need to do The Journey Pattern - A User-Centric model Actors may interact with the system to perform these tasks I’ll add ‘Buy some milk’ to my todo list Type ‘Buy the milk’ Press ‘ENTER’
  • 75. @wakaleo The Journey Pattern in Serenity Actors have goals I’d like to be able to recall all the things I need to do
  • 76. @wakaleo The Journey Pattern in Serenity Actors have goals Feature: Add new todos
 James would like to be able to recall all the things he needs to do
 
 Scenario: Record a new todo action for future use
 Given James needs to buy some milk
 When James adds the todo action 'Buy some milk'
 Then 'Buy some milk' should be recorded in his todo list I’d like to be able to recall all the things I need to do
  • 77. @wakaleo A User-Centric model Actors have abilities I can browse the web with my browser Actor james = Actor.named(“James"); @Managed
 WebDriver hisBrowser; … james.can(BrowseTheWeb.with(hisBrowser));
  • 78. @wakaleo A User-Centric model Actors perform tasks @Steps
 AddItem addATodoItem; … james.attemptsTo(addATodoItem.called("Buy some milk"));
  • 79. @wakaleo A User-Centric model Actors perform tasks I’ll add ‘Buy some milk’ to my todo list @Steps
 AddItem addATodoItem; … james.attemptsTo(addATodoItem.called("Buy some milk"));
  • 80. @wakaleo A User-Centric model Actors perform tasks @Steps
 AddItem addATodoItem; … james.attemptsTo(addATodoItem.called("Buy some milk")); actor.attemptsTo(
 Enter.theValue(thingToDo).into(ToDoList.NEW_TODO_FIELD),
 Hit.the(RETURN).keyIn(ToDoList.NEW_TODO_FIELD)
 );
  • 81. @wakaleo A User-Centric model Actors perform tasks I’ll add ‘Buy some milk’ to my todo list @Steps
 AddItem addATodoItem; … james.attemptsTo(addATodoItem.called("Buy some milk")); actor.attemptsTo(
 Enter.theValue(thingToDo).into(ToDoList.NEW_TODO_FIELD),
 Hit.the(RETURN).keyIn(ToDoList.NEW_TODO_FIELD)
 );
  • 82. @wakaleo A User-Centric model Actors perform tasks I’ll add ‘Buy some milk’ to my todo list @Steps
 AddItem addATodoItem; … james.attemptsTo(addATodoItem.called("Buy some milk")); actor.attemptsTo(
 Enter.theValue(thingToDo).into(ToDoList.NEW_TODO_FIELD),
 Hit.the(RETURN).keyIn(ToDoList.NEW_TODO_FIELD)
 ); Type ‘Buy the milk’
  • 83. @wakaleo A User-Centric model Actors perform tasks I’ll add ‘Buy some milk’ to my todo list @Steps
 AddItem addATodoItem; … james.attemptsTo(addATodoItem.called("Buy some milk")); actor.attemptsTo(
 Enter.theValue(thingToDo).into(ToDoList.NEW_TODO_FIELD),
 Hit.the(RETURN).keyIn(ToDoList.NEW_TODO_FIELD)
 ); Type ‘Buy the milk’ Press ‘ENTER’