Anand Bagmar - Behavior Driven Testing (BDT) in Agile

Preview:

DESCRIPTION

I delivered this talk in SiliconIndia's SoftTec 2012 on 14th July 2012. I introduce Behavior Driven Testing (BDT) with a couple of examples, the different ways of writing the tests in Imperative and Declarative style, the value proposition of BDT, and how BDT can help you build a very good safety net using Test Automation suite.

Citation preview

Behavior  Driven  Tes.ng  (BDT)    in    

Agile  

What  is  Tes*ng  on  Agile  projects?  

Story  planning  and  

wri/ng  

IPM  

QA  kickoff  

Story  kickoff  

Test  Scenario  Wri/ng  

Implement  Test  

Automa/on  

BA  /  QA  Volleyball  

Manual  +  Exploratory  Tes/ng  

Automa/on  (execu/on,  

maintenance)  

Showcase  

Agile  Tes.ng    in  an   Itera.on

A  prac*ce  that  makes  Agile  Teams    successful?  

Test  Automa.on  

A  prac*ce  that  makes  Agile  Teams  unsuccessful?  

Test  Automa.on  

•  “Succeeding  with  Agile”  –  Mike  Cohn  

•  Mar*n  Fowler  –  Test  Pyramid  –  hCp://mar*nfowler.com/bliki/TestPyramid.html  

The  Test  Pyramid  

Func/onal  Tests  (GUI)  •  Developers  &  /  QA  team  

API  Tests  •  Developers  &  /  QA  team  

Integra/on  tests  • Developers  

Component  tests  •  Developers  

Unit  Tests  •  Developers  

Cost  /  Effort   Time  

Ideal  Test  Pyramid  

Test  Pyramid  reality  

Development  team  Test  Pyramid   QA  team  

Test  Pyramid  

Test  Pyramid  –  An*  PaCern  

Evolu*on  of  Test  Frameworks  Behavior  Driven  

Development  (BDD)  

Op/mized  scripts  

Record  &  Playback    

Core  Framework  

Behavior  Driven  Development    (BDD)  

RED  

GREEN  REFACTOR  

Behavior  Driven  Tes*ng  (BDT)  

Expected  Func/onality:  

 

The  customer  should  be  able  to  withdraw  money  from  his  account  via  an  ATM  machine  

Given  the  account  has  balance  of  5000  When  the  customer  requests  1000  Then  the  account  is  debited  by  1000  

BDD  Example:  

Given  the  account  is  in  credit  

And  the  dispenser  contains  cash  

 

When  the  customer  requests  cash  

 

Then  ensure  the  account  is  debited  

And  ensure  cash  is  dispensed  

And  ensure  the  card  is  returned  

BDT  Example:  

New  Expected  Func/onality:  

 

The  customer  should  be  able  to  withdraw  money  from  his  account  only  if  his  card  is  valid  

Given  the  account  is  in  credit  And  the  card  is  valid  And  the  dispenser  contains  cash    When  the  customer  requests  cash    Then  ensure  the  account  is  debited  And  ensure  cash  is  dispensed  And  ensure  the  card  is  returned  

BDT  Example  -­‐  updated:  

Case  Study  

Requirements  

•  Guest  User  is  able  to  search  for  a  flight  for  a  single  traveller  

•  Ability  to  specify  contact  informa*on  for  person  booking  the  flight  

Search    Search  Results  

Contact  Informa/on  

Contact  Details  

Test  specifica*on  styles  

•  Impera*ve    •  Declara*ve  

Impera*ve  style  Given  I  am  a  guest  user  on  the  Indigo  home  page  And  I  select  “round”  trip  op*on  And  I  select  “Pune”  from  the  origin  dropdown  And  I  select  “Bangalore”  from  the  des*na*on  drop  down  And  I  select  departure  date  as  “5  July  2012”  And  I  select  returning  date  as  “25  July  2012”    When  I  click  on  Search    Then  I  should  see  the  search  results  page    And  I  should  see  at  least  1  op*on  for  my  criteria    ...    

…  When  I  select  the  “first”  op*on  Then  I  am  on  the  Contact  Informa*on  page    When  I  enter  first  name  as  “foo”  And  I  enter  last  name  as  “bar”  …  …  And  I  click  the  “Select  and  Con/nue”  buCon    Then  I  should  be  on  the  next  page    

Given  I  am  a  guest  user    When  I  search  for  flight  op*ons  for  a  “one-­‐way”  trip  for  “1”  “Adult”  from  “Delhi”  to  “Bangalore”  And  I  select  the  “first”  flight  And  I  enter  “valid”  contact  details  for  “traveller1”    Then  I  am  able  to  Save  and  Con*nue  

Declara*ve  style  

Func/onal  Tests  (GUI)  •  Developers  &  /  QA  team  

API  Tests  •  Developers  &  /  QA  team  

Integra/on  tests  • Developers  

Component  tests  •  Developers  

Unit  Tests  •  Developers  

What  does  BDT  do  for  me?  

What  BDT  does  NOT  do  for  me?  

•  Replace  tes*ng  granular  func*onality    – ONLY  when  it  has  just  been  developed  

Steps  to  follow  to  implement  BDT  

Current  state  Tests  running  on  Hudson  /  Jenkins   Since  1st  test  was  automated  

Feature  files   33  

Scenarios   65  

Smoke  tests  execu*on  *me   15  minutes  

Regression  tests  execu*on  *me   45  minutes  

Test  case  repository  (manual  +  automated)  

Cucumber  .feature  files  with  appropriate  tagging  

Project  Management  tool   Mingle  

Tools  to  enable  BDD  /  BDT  

•  Cucumber  •  JBehave  •  SpecFlow  •  Twist  

Anand.Bagmar@thoughtworks.com  

abagmar@gmail.com  

 ThoughtWorks®