SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Acceptance Testing   with Fitnesse   Alessandro Marchetto Fondazione Bruno Kessler - IRST
Outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Business Logic GUI Web UI Persistence  Layer Jemmy/Abbot/JFCUnit/… HttpUnit/Canoo/Selenium Junit/SQLUnit/XMLUnit FIT/Fitnesse ( High level ) Junit ( Low level ) Cactus Perfomance and  Load Testing JMeter/JUnitPerf Testing tools
[object Object],[object Object],Traditional Approaches for acceptance testing Disadvantages : expensive, error prone, not repeatable, … Disavantages: Tests are brittle, i.e., have to be re-captured if the GUI changes.  “ Avoid acceptance testing only in final stage: Too late to find bugs”
[object Object],[object Object],Table-based Approach for acceptance testing Pro:  help to clarify requirements, used in System testing, … Cons:  expensive, error prone, … inputs output
What is Fit? ,[object Object],[object Object],[object Object],[object Object]
Using Fit ,[object Object],[object Object],[object Object],[object Object],[object Object]
To work with Fit ,[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],Fit table
Fixture ,[object Object],[object Object],[object Object]
Test Runner ,[object Object],“ red for failures  and  green for passed tests ” 75 5 7 26 38 Wigan 100  expected ------------------- 93  actual 2 1 35 38 Dummy 93 2 1 35 38 Chelsea 54 16 2 20 38 Aston Villa 83 5 2 31 38 Arsenal rating() lost drawn won played team name sample.VerifyRating
The Fit picture   User Story Fit Table Fixture Customer/ Analyst (i, o) System i o’ Developer o  ≠  o’ Test Runner Output Table O = expected output O’ = actual output
Core Fixture ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Fit Tools ,[object Object],[object Object],[object Object],[object Object],[object Object]
What is a Wiki? ,[object Object],[object Object],[object Object],[object Object],[object Object],Wikipedia … TestDrivenDevelopment ?
Eclipse ,[object Object],[object Object],[object Object],[object Object],[object Object],IDE = “Integrated development environment” ,[object Object],[object Object],[object Object],[object Object]
What is FitNesse? ,[object Object],[object Object],[object Object],[object Object],[object Object]
How to use FitNesse? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],“ expected 170, actual 190” How to use Fitnesse without Eclipse?   http ://fitnesse.org/FitNesse.UserGuide.DownloadingAndInstallingFitNesse   http://www.bandxi.com/fitnesse/download.html
http://fitnesse.org/FitNesse.UserGuide.EditingFitNessePages
Sub Wikis and Test suites  ,[object Object],[object Object],[object Object],… Wiki parent SubWiki 1 SubWiki 2 http://fitnesse.org/FitNesse.UserGuide.SubWiki
Wiki Sub-wiki Remember to initially create the first page
Core Fixture  in Fitnesse ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],http://fitnesse.org/FitNesse.UserGuide.FixtureGallery
[object Object],ColumnFixture - The second row lists column names for input and output “()” - All following rows list combinations of input arguments and expected values of output arguments.  The fixture class should extend  fit.ColumnFixture  and declare public fields and methods to  match the second table row.  import  fit.ColumnFixture extends  ColumnFixture import fit.ColumnFixture; public class ColumnFixtureTest  extends ColumnFixture {   public String firstPart;   public String secondPart;   private int length;    public String together(){   length=firstPart.length()+secondPart.length();   return firstPart+ ", "+secondPart; } public int totalLength(){   return length; } } !|info.fitnesse.fixturegallery.ColumnFixtureTest| |firstPart|secondPart|together()|totalLength()| |Hello|World|Hello, World|10| |Houston|We Have a Problem|Houston, We Have a Problem|24|
[object Object],ActionFixture All rows after the first begin with a command cell, followed by command arguments in the remaining cells. Possible commands are:  start  — it starts the test by taking the class name for the actual fixture to automate  check  — it executes a method and verifies its value.  press  — it executes a void   method without testing anything.  enter  — it executes a method and passes an argument to it.  import  fit.ActionFixture; extends  ActionFixture public class ActionFixtureTest extends fit.Fixture{ private String first, second, both; public void firstPart(String s){  first=s; } public void secondPart(String s){  second=s; } public void join(){  both=first+ ", "+second; } public String together(){  return both; } } !|ActionFixture| |start|ActionFixtureTest| |enter|firstPart|Hello| |enter|secondPart|World| |press|join| |check|together|Hello, World|
[object Object],RowFixture Override: - getTargetClass:  returns the Type or Class   object representing the type of objects in the array.  - query : returns the actual array of objects to be verified.  - The second row describes the properties or methods that you want to verify - All rows after that describe expected objects in the array   import  fit.RowFixture extends  RowFixture import info.fitnesse.fixturegallery.domain.Player; import fit.RowFixture; public class RowFixtureTest extends RowFixture{ public Class getTargetClass() {   return Player.class; } public Object[] query() throws Exception  {  return Player.players.toArray(); } } !|RowFixtureTest| |name|post code| |John Smith|SW4 66Z| |Michael Jordan|NE1 8AT|
[object Object],RowEntryFixture ,[object Object],[object Object],[object Object],- The first row contains the field that we want to enter - All rows after the first contain the data to be added import  fitnesse.fixtures.RowEntryFixture; extends  RowEntryFixture  public class RowEntryExample extends RowEntryFixture{ public int v; public void enterRow() throws Exception{ if (v == 0)   throw new Exception("Oh, no! Zero!"); } }   |fitnesse.fixtures.RowEntryExample| |v| |1| |0|
An example: Sum Calculator public class  MySum  {   public static int  sum (int a, int b)  { return a+b;  }  }  public class  MyFixture  extends   ColumnFixture  {   int a,b; public int  sum ()  {   return MySum.sum(a,b); }  }  A full demo:  http://softeng.polito.it/courses/tutorial/FitnesseInEclipse.html
An example: Football team Website ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
user story (change requirement) set of acceptance tests excel file with sample data
Test1: Table  “verify the rating is calculated properly”   ,[object Object],[object Object],[object Object],[object Object],[object Object],“column fixture”
Test1: Fixture  “verify the rating is calculated properly” ,[object Object],[object Object],[object Object],public class  VerifyRating  extends  ColumnFixture  { public String teamName;  public int played;  public int won;  public int drawn;  public int lost;  public long  rating()  { Team team = new Team(teamName, played,won,drawn,lost); return team.rating;  }  }
[object Object],package  sport.businessObjects; public class  Team  {   public String name; public int played; public int won; public int drawn; public int lost; public int rating; public  Team(String name, int ply, int won, int drawn, int lst)  {  super();  this.name = name;  this.played = played;  this.won = won;  this.drawn = drawn;  this.lost = lost;  calculateRating();  } private void  calculateRating()  {  float value = ((10000f*(won*3+drawn))/(3*played))/100;  rating = Math.round(value);  }  }
Test1: Running “verify the rating is calculated properly” ,[object Object],[object Object],[object Object],[object Object],[object Object],passed failed exception Launch the test runner … 75 5 7 26 38 Wigan 100  expected ------------------- 93  actual 2 1 35 38 Dummy 93 2 1 35 38 Chelsea 54 16 2 20 38 Aston Villa 83 5 2 31 38 Arsenal rating() lost drawn won played team name sport.fixtures.VerifyRating
Test 2  “Search for top two teams using the screen and validate the search results” ,[object Object],[object Object],[object Object],[object Object],[object Object],“ Top 2 teams based on rating”
[object Object],[object Object],[object Object],[object Object],Test 2: Table 1  “Search for top two teams using the screen and validate the search results” “action fixture”
Test 2: Fixture “1”  “Search for top two teams using the screen and validate the search results” public class  VerifyWorkflow  extends  Fixture { private int topN;  private Collection<Team> results; public void numberOfTopTeams(int n) {  topN = n;  }   public void search()  {  results = Populate.teams.getTopTeams(topN);  } public int numberOfResults() {  return results.size();  } }
Test 2: Running “1”  “Search for top two teams using the screen and validate the search results” ,[object Object],[object Object],[object Object],[object Object],2 number of results check   search press   2 number of top teams enter   sport.fixtures.VerifyWorkflow   start   fit.ActionFixture
Test 2: Fit table “2”  “validate the search results” ,[object Object],[object Object],[object Object],It could be expressed by means of its  fields or methods 83 5 2 31 38 Arsenal 93 2 1 35 38 Chelsea rating lost drawn won played name sport.fixtures.VerifyResults   “row fixture” Name of the row fixture Expected collection of objects
Test 2: Fixture “2”   “validate the search results” public class  VerifyResults  extends  RowFixture  {   @Override public  Object[] query() throws Exception {  return Populate.teams.getTopTeams(2).toArray();  } @Override public  Class getTargetClass()  {  return Team.class;  }  }
Test 2: Running “2”   “validate the search results” ,[object Object],[object Object],[object Object],[object Object],[object Object],83 5 2 31 38 Arsenal 93 2 1 35 38 Chelsea rating lost drawn won played name sample.VerifyResults
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],…  supporting fixture
Testing non-functional requirements: “timed action fixture” ,[object Object],[object Object],[object Object],10 sec.
Summary   fixture   ,[object Object],[object Object],[object Object]
Conclusions ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
References ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Weitere ähnliche Inhalte

Was ist angesagt?

Keyword-driven Test Automation Framework
Keyword-driven Test Automation FrameworkKeyword-driven Test Automation Framework
Keyword-driven Test Automation FrameworkMikhail Subach
 
#1 unit testing
#1 unit testing#1 unit testing
#1 unit testingeleksdev
 
RFT Tutorial 4 How Do We Record A Script Using Rational Functional Tester - RFT
RFT Tutorial 4 How Do We Record A Script Using Rational Functional Tester - RFTRFT Tutorial 4 How Do We Record A Script Using Rational Functional Tester - RFT
RFT Tutorial 4 How Do We Record A Script Using Rational Functional Tester - RFTYogindernath Gupta
 
QTP&UFT Automation Framework
QTP&UFT Automation FrameworkQTP&UFT Automation Framework
QTP&UFT Automation FrameworkYu Tao Zhang
 
Writing Test Cases in Agile
Writing Test Cases in AgileWriting Test Cases in Agile
Writing Test Cases in AgileSaroj Singh
 
Full Testing Experience - Visual Studio and TFS 2010
 Full Testing Experience - Visual Studio and TFS 2010 Full Testing Experience - Visual Studio and TFS 2010
Full Testing Experience - Visual Studio and TFS 2010Ed Blankenship
 
Keyword Driven Automation
Keyword Driven AutomationKeyword Driven Automation
Keyword Driven AutomationPankaj Goel
 
Final Automation Testing
Final Automation TestingFinal Automation Testing
Final Automation Testingpriya_trivedi
 
Load Testing Using JMeter Tutorial | Edureka
Load Testing Using JMeter Tutorial | EdurekaLoad Testing Using JMeter Tutorial | Edureka
Load Testing Using JMeter Tutorial | EdurekaEdureka!
 
RFT Tutorial - 9 How To Create A Properties Verification Point In Rft For Tes...
RFT Tutorial - 9 How To Create A Properties Verification Point In Rft For Tes...RFT Tutorial - 9 How To Create A Properties Verification Point In Rft For Tes...
RFT Tutorial - 9 How To Create A Properties Verification Point In Rft For Tes...Yogindernath Gupta
 
Test automation principles, terminologies and implementations
Test automation principles, terminologies and implementationsTest automation principles, terminologies and implementations
Test automation principles, terminologies and implementationsSteven Li
 
Introduction to Gauge
Introduction to GaugeIntroduction to Gauge
Introduction to Gaugevodqancr
 
What is Integration Testing? | Edureka
What is Integration Testing? | EdurekaWhat is Integration Testing? | Edureka
What is Integration Testing? | EdurekaEdureka!
 
Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 201...
Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 201...Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 201...
Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 201...Yavor Nikolov
 

Was ist angesagt? (20)

The Fitnesse Fix
The Fitnesse FixThe Fitnesse Fix
The Fitnesse Fix
 
Automation Framework/QTP Framework
Automation Framework/QTP FrameworkAutomation Framework/QTP Framework
Automation Framework/QTP Framework
 
Keyword-driven Test Automation Framework
Keyword-driven Test Automation FrameworkKeyword-driven Test Automation Framework
Keyword-driven Test Automation Framework
 
#1 unit testing
#1 unit testing#1 unit testing
#1 unit testing
 
RFT Tutorial 4 How Do We Record A Script Using Rational Functional Tester - RFT
RFT Tutorial 4 How Do We Record A Script Using Rational Functional Tester - RFTRFT Tutorial 4 How Do We Record A Script Using Rational Functional Tester - RFT
RFT Tutorial 4 How Do We Record A Script Using Rational Functional Tester - RFT
 
QTP&UFT Automation Framework
QTP&UFT Automation FrameworkQTP&UFT Automation Framework
QTP&UFT Automation Framework
 
Writing Test Cases in Agile
Writing Test Cases in AgileWriting Test Cases in Agile
Writing Test Cases in Agile
 
Automation using ibm rft
Automation using ibm rftAutomation using ibm rft
Automation using ibm rft
 
Full Testing Experience - Visual Studio and TFS 2010
 Full Testing Experience - Visual Studio and TFS 2010 Full Testing Experience - Visual Studio and TFS 2010
Full Testing Experience - Visual Studio and TFS 2010
 
Keyword Driven Automation
Keyword Driven AutomationKeyword Driven Automation
Keyword Driven Automation
 
Final Automation Testing
Final Automation TestingFinal Automation Testing
Final Automation Testing
 
Load Testing Using JMeter Tutorial | Edureka
Load Testing Using JMeter Tutorial | EdurekaLoad Testing Using JMeter Tutorial | Edureka
Load Testing Using JMeter Tutorial | Edureka
 
Uft Basics
Uft BasicsUft Basics
Uft Basics
 
Rft courseware
Rft coursewareRft courseware
Rft courseware
 
RFT Tutorial - 9 How To Create A Properties Verification Point In Rft For Tes...
RFT Tutorial - 9 How To Create A Properties Verification Point In Rft For Tes...RFT Tutorial - 9 How To Create A Properties Verification Point In Rft For Tes...
RFT Tutorial - 9 How To Create A Properties Verification Point In Rft For Tes...
 
Test automation principles, terminologies and implementations
Test automation principles, terminologies and implementationsTest automation principles, terminologies and implementations
Test automation principles, terminologies and implementations
 
Fundamentals of unit testing
Fundamentals of unit testingFundamentals of unit testing
Fundamentals of unit testing
 
Introduction to Gauge
Introduction to GaugeIntroduction to Gauge
Introduction to Gauge
 
What is Integration Testing? | Edureka
What is Integration Testing? | EdurekaWhat is Integration Testing? | Edureka
What is Integration Testing? | Edureka
 
Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 201...
Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 201...Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 201...
Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 201...
 

Andere mochten auch

Gray Stone Advisors NBAA Leadership 2012 ppt
Gray Stone Advisors NBAA Leadership 2012 pptGray Stone Advisors NBAA Leadership 2012 ppt
Gray Stone Advisors NBAA Leadership 2012 pptGray Stone Advisors
 
Cánh hoa duyên kiếp
Cánh hoa duyên kiếpCánh hoa duyên kiếp
Cánh hoa duyên kiếpsteppe91
 
The human factor
The human factorThe human factor
The human factorKoen Maris
 
โครงงานไวรัสคอมพิวเตอร์ 5.4
โครงงานไวรัสคอมพิวเตอร์ 5.4โครงงานไวรัสคอมพิวเตอร์ 5.4
โครงงานไวรัสคอมพิวเตอร์ 5.4somjaibio003
 
Direct Red 254, Pigment Dispersions
Direct Red 254, Pigment DispersionsDirect Red 254, Pigment Dispersions
Direct Red 254, Pigment Dispersionsshreem industries
 
Jak być interaktywnym? Pozytywnie o agencjach
Jak być interaktywnym? Pozytywnie o agencjach Jak być interaktywnym? Pozytywnie o agencjach
Jak być interaktywnym? Pozytywnie o agencjach Positive Power Sp. z o.o
 
Sensible defence
Sensible defenceSensible defence
Sensible defenceKoen Maris
 
ภาคผนวก
ภาคผนวกภาคผนวก
ภาคผนวกsomjaibio003
 

Andere mochten auch (20)

Apache Hive
Apache HiveApache Hive
Apache Hive
 
Gray Stone Advisors NBAA Leadership 2012 ppt
Gray Stone Advisors NBAA Leadership 2012 pptGray Stone Advisors NBAA Leadership 2012 ppt
Gray Stone Advisors NBAA Leadership 2012 ppt
 
ALEJE.IT z Positive Power
ALEJE.IT z Positive PowerALEJE.IT z Positive Power
ALEJE.IT z Positive Power
 
บทที่ 1
บทที่ 1บทที่ 1
บทที่ 1
 
Cánh hoa duyên kiếp
Cánh hoa duyên kiếpCánh hoa duyên kiếp
Cánh hoa duyên kiếp
 
Lks pengukuran
Lks pengukuranLks pengukuran
Lks pengukuran
 
บทที่ 2
บทที่ 2บทที่ 2
บทที่ 2
 
The human factor
The human factorThe human factor
The human factor
 
Rafael Moucka na konferencji InternetASAP
Rafael Moucka na konferencji InternetASAPRafael Moucka na konferencji InternetASAP
Rafael Moucka na konferencji InternetASAP
 
Rafael Moucka na konferencji PARP
Rafael Moucka na konferencji PARPRafael Moucka na konferencji PARP
Rafael Moucka na konferencji PARP
 
Company Presentation
Company PresentationCompany Presentation
Company Presentation
 
โครงงานไวรัสคอมพิวเตอร์ 5.4
โครงงานไวรัสคอมพิวเตอร์ 5.4โครงงานไวรัสคอมพิวเตอร์ 5.4
โครงงานไวรัสคอมพิวเตอร์ 5.4
 
Direct Red 254, Pigment Dispersions
Direct Red 254, Pigment DispersionsDirect Red 254, Pigment Dispersions
Direct Red 254, Pigment Dispersions
 
Rafael Moucka wśród Mentorów E-biznesu
Rafael Moucka wśród Mentorów E-biznesuRafael Moucka wśród Mentorów E-biznesu
Rafael Moucka wśród Mentorów E-biznesu
 
Jak być interaktywnym? Pozytywnie o agencjach
Jak być interaktywnym? Pozytywnie o agencjach Jak być interaktywnym? Pozytywnie o agencjach
Jak być interaktywnym? Pozytywnie o agencjach
 
บทที่ 5
บทที่ 5บทที่ 5
บทที่ 5
 
Basketball
BasketballBasketball
Basketball
 
Sensible defence
Sensible defenceSensible defence
Sensible defence
 
RWD: przyszłością m.commerce?
RWD: przyszłością m.commerce?RWD: przyszłością m.commerce?
RWD: przyszłością m.commerce?
 
ภาคผนวก
ภาคผนวกภาคผนวก
ภาคผนวก
 

Ähnlich wie 2 fitnesse

Testing Options in Java
Testing Options in JavaTesting Options in Java
Testing Options in JavaMichael Fons
 
AUTOCODECOVERGEN: PROTOTYPE OF DATA DRIVEN UNIT TEST GENRATION TOOL THAT GUAR...
AUTOCODECOVERGEN: PROTOTYPE OF DATA DRIVEN UNIT TEST GENRATION TOOL THAT GUAR...AUTOCODECOVERGEN: PROTOTYPE OF DATA DRIVEN UNIT TEST GENRATION TOOL THAT GUAR...
AUTOCODECOVERGEN: PROTOTYPE OF DATA DRIVEN UNIT TEST GENRATION TOOL THAT GUAR...acijjournal
 
Getting started with test complete 7
Getting started with test complete 7Getting started with test complete 7
Getting started with test complete 7Hoamuoigio Hoa
 
J unit presentation
J unit presentationJ unit presentation
J unit presentationPriya Sharma
 
Testers Desk Presentation
Testers Desk PresentationTesters Desk Presentation
Testers Desk PresentationQuality Testing
 
Acceptance Testing With Selenium
Acceptance Testing With SeleniumAcceptance Testing With Selenium
Acceptance Testing With Seleniumelliando dias
 
RPG Program for Unit Testing RPG
RPG Program for Unit Testing RPG RPG Program for Unit Testing RPG
RPG Program for Unit Testing RPG Greg.Helton
 
Testes? Mas isso não aumenta o tempo de projecto? Não quero...
Testes? Mas isso não aumenta o tempo de projecto? Não quero...Testes? Mas isso não aumenta o tempo de projecto? Não quero...
Testes? Mas isso não aumenta o tempo de projecto? Não quero...Comunidade NetPonto
 
TDD And Refactoring
TDD And RefactoringTDD And Refactoring
TDD And RefactoringNaresh Jain
 
Introduction To Work Item Customisation
Introduction To Work Item CustomisationIntroduction To Work Item Customisation
Introduction To Work Item Customisationwbarthol
 
QuerySurge integration with ETL / DataStage
QuerySurge integration with ETL / DataStageQuerySurge integration with ETL / DataStage
QuerySurge integration with ETL / DataStageAsad Abdullah
 
Getting started with_testcomplete
Getting started with_testcompleteGetting started with_testcomplete
Getting started with_testcompleteankit.das
 
UI Automation_White_CodedUI common problems and tricks
UI Automation_White_CodedUI common problems and tricksUI Automation_White_CodedUI common problems and tricks
UI Automation_White_CodedUI common problems and tricksTsimafei Avilin
 
Unit testing php-unit - phing - selenium_v2
Unit testing   php-unit - phing - selenium_v2Unit testing   php-unit - phing - selenium_v2
Unit testing php-unit - phing - selenium_v2Tricode (part of Dept)
 
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex ScenariosUnit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex ScenariosFlutter Agency
 
Qtp 92 Tutorial769
Qtp 92 Tutorial769Qtp 92 Tutorial769
Qtp 92 Tutorial769subhasis100
 

Ähnlich wie 2 fitnesse (20)

Testing Options in Java
Testing Options in JavaTesting Options in Java
Testing Options in Java
 
AUTOCODECOVERGEN: PROTOTYPE OF DATA DRIVEN UNIT TEST GENRATION TOOL THAT GUAR...
AUTOCODECOVERGEN: PROTOTYPE OF DATA DRIVEN UNIT TEST GENRATION TOOL THAT GUAR...AUTOCODECOVERGEN: PROTOTYPE OF DATA DRIVEN UNIT TEST GENRATION TOOL THAT GUAR...
AUTOCODECOVERGEN: PROTOTYPE OF DATA DRIVEN UNIT TEST GENRATION TOOL THAT GUAR...
 
Getting started with test complete 7
Getting started with test complete 7Getting started with test complete 7
Getting started with test complete 7
 
J unit presentation
J unit presentationJ unit presentation
J unit presentation
 
JUnit Presentation
JUnit PresentationJUnit Presentation
JUnit Presentation
 
Testers Desk Presentation
Testers Desk PresentationTesters Desk Presentation
Testers Desk Presentation
 
Unit testing with JUnit
Unit testing with JUnitUnit testing with JUnit
Unit testing with JUnit
 
Acceptance Testing With Selenium
Acceptance Testing With SeleniumAcceptance Testing With Selenium
Acceptance Testing With Selenium
 
RPG Program for Unit Testing RPG
RPG Program for Unit Testing RPG RPG Program for Unit Testing RPG
RPG Program for Unit Testing RPG
 
Automation tips
Automation tipsAutomation tips
Automation tips
 
Testes? Mas isso não aumenta o tempo de projecto? Não quero...
Testes? Mas isso não aumenta o tempo de projecto? Não quero...Testes? Mas isso não aumenta o tempo de projecto? Não quero...
Testes? Mas isso não aumenta o tempo de projecto? Não quero...
 
TDD And Refactoring
TDD And RefactoringTDD And Refactoring
TDD And Refactoring
 
Introduction To Work Item Customisation
Introduction To Work Item CustomisationIntroduction To Work Item Customisation
Introduction To Work Item Customisation
 
JUnit Goodness
JUnit GoodnessJUnit Goodness
JUnit Goodness
 
QuerySurge integration with ETL / DataStage
QuerySurge integration with ETL / DataStageQuerySurge integration with ETL / DataStage
QuerySurge integration with ETL / DataStage
 
Getting started with_testcomplete
Getting started with_testcompleteGetting started with_testcomplete
Getting started with_testcomplete
 
UI Automation_White_CodedUI common problems and tricks
UI Automation_White_CodedUI common problems and tricksUI Automation_White_CodedUI common problems and tricks
UI Automation_White_CodedUI common problems and tricks
 
Unit testing php-unit - phing - selenium_v2
Unit testing   php-unit - phing - selenium_v2Unit testing   php-unit - phing - selenium_v2
Unit testing php-unit - phing - selenium_v2
 
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex ScenariosUnit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
 
Qtp 92 Tutorial769
Qtp 92 Tutorial769Qtp 92 Tutorial769
Qtp 92 Tutorial769
 

Kürzlich hochgeladen

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 

Kürzlich hochgeladen (20)

New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 

2 fitnesse

  • 1. Acceptance Testing with Fitnesse Alessandro Marchetto Fondazione Bruno Kessler - IRST
  • 2.
  • 3. Business Logic GUI Web UI Persistence Layer Jemmy/Abbot/JFCUnit/… HttpUnit/Canoo/Selenium Junit/SQLUnit/XMLUnit FIT/Fitnesse ( High level ) Junit ( Low level ) Cactus Perfomance and Load Testing JMeter/JUnitPerf Testing tools
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. The Fit picture User Story Fit Table Fixture Customer/ Analyst (i, o) System i o’ Developer o ≠ o’ Test Runner Output Table O = expected output O’ = actual output
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 20.
  • 21. Wiki Sub-wiki Remember to initially create the first page
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27. An example: Sum Calculator public class MySum { public static int sum (int a, int b) { return a+b; } } public class MyFixture extends ColumnFixture { int a,b; public int sum () { return MySum.sum(a,b); } } A full demo: http://softeng.polito.it/courses/tutorial/FitnesseInEclipse.html
  • 28.
  • 29. user story (change requirement) set of acceptance tests excel file with sample data
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36. Test 2: Fixture “1” “Search for top two teams using the screen and validate the search results” public class VerifyWorkflow extends Fixture { private int topN; private Collection<Team> results; public void numberOfTopTeams(int n) { topN = n; } public void search() { results = Populate.teams.getTopTeams(topN); } public int numberOfResults() { return results.size(); } }
  • 37.
  • 38.
  • 39. Test 2: Fixture “2” “validate the search results” public class VerifyResults extends RowFixture { @Override public Object[] query() throws Exception { return Populate.teams.getTopTeams(2).toArray(); } @Override public Class getTargetClass() { return Team.class; } }
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.