48
Web Acceptance Tes-ng Revisited © 2012 Callista Enterprise | www.callistaenterprise.se 1 Web Acceptance Testing Revisited Björn Beskow| [email protected] | 20120118

Web Acceptance Testing Revisited - Callista Enterprisecallistaenterprise.se/assets/presentationer/...testing-revisited.pdf · Web$Acceptance$Testing$Revisited$ ... • Selenium$Server$(Selenium$RC/$WebDriver)$$

  • Upload
    trannga

  • View
    231

  • Download
    2

Embed Size (px)

Citation preview

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  1  

Web  Acceptance  Testing  Revisited  

Björn  Beskow|  [email protected]  |  2012-­‐01-­‐18  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  2  

Testing  Graphical  User  Interfaces  is  ...  

…  still  a  challenge  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Client  Server  era  

3  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  4  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  5  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  6  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  7  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

WWW  

8  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  9  

Client

Server

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  10  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  11  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  12  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  13  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  14  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  15  

…  except  for  the  GUI  …  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Web  2.0  

16  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  17  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

“Flickr  deploys  10  times  a  day  -­‐  why  don’t  you?”    

18  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  19  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  20  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Huston,  we  have  a  problem  …  

21  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

 …  and  hence  we  need  yet  some  layers  of  abstraction!  

•  Specifica-ons  

•  DOM  Abstrac-on  

•  Browser  Automa-on  

22  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Selenium:  A  framework  for  Browser  Automation  •  The  Selenium  engine  

executes  tests  directly  in  a  browser,  just  as  real  users  do.  

•  The  Selenium  1.0  test  engine  is  implemented  in  JavaScript,  and  thus  run  in  most  browser  (Internet  Explorer,  Mozilla,  Firefox,  Opera,  Safari  …)  on  most  pla^orms.  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Selenium  +  WebDriver  =  Selenium  2.0  

•  First  produc-on-­‐ready  version  in  July  2011  •  Greatly  enhanced  model  compared  to  Selenium  1.0  – Object-­‐based  API  for  DOM  Interac-on  – Browser  Driver  Implementa-ons  – Advanced  User  Interac-ons    

24  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

At  the  heart  of  Selenium:  Selenese  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Selenium  2.0  Tool  Chain  

•  Selenium  IDE  •  Browser  Drivers    •  Remote  WebDriver    •  Selenium  Server  (Selenium  RC/  WebDriver)    •  Selenium  Grid    

26  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Browser  Drivers  •  Na-ve  implementa-ons  of  the  WebDriver  API  

– Firefox  – Chrome  –  Internet  Explorer  – Opera  – Headless  (HtmlUnit)  –  iOS  – Android  – …  

27  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Selenium  Remote  Driver  

28  

RemoteWebDriver

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Selenium  Grid  

29  

Grid Node1 ...

Grid Hub

Optional Machine Boundary

Optional Machine Boundary

Grid Node2 Grid Noden-1 Grid Noden

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

DOM  Abstraction:  Geb  

•  Brings  together  – The  power  of  Selenium  /  Web  Driver  – The  elegance  of  JQuery  – The  robustness  of  the  Page  Object  pagern  – The  flexibility  and  pure  joy  of  Groovy  

30  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Navigator  API  

•  JQuery-­‐like  expressions  provide  a  concise  and  effec-ve  way  to  navigate  the  DOM  

$("p", text: contains(”Timecard"))$("input", name: "username").value("bjorn")$("div.message").text()

31  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Page  Objects  

•  Use  proper  object-­‐orienta-on  techniques  to  avoid  brigleness  and  duplica-on  

$("input", name: "username").value("bjorn")$("input", name: "password").value("secret")$("input", name: "submit").click()

32  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Page  Objects  

•  Use  proper  object-­‐orienta-on  techniques  to  avoid  brigleness  and  duplica-on  

page.login("bjorn", "secret")

33  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  34  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  35  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  36  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Geb  Page  deSinition  

class LoginPage extends Page {static url = "/timecard-grails/auth/login”static at = { title == "Login" }static content = { username { $("input", name: "username") } password { $("input", name: "password") } login { $("input", name: "submit") } message(required: false) { $("div.message").text() }}def login(name, passwd) { username.value(name) password.value(passwd) login.click()}

}  

37  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Geb  Page  deSinition:  navigation  

class LoginPage extends Page {

static url = "/timecard-grails/auth/login”static at = { title == "Login" }static content = { username { $("input", name: "username") } password { $("input", name: "password") } login { $("input", name: "submit") } message(required: false) { $("div.message").text() }}def login(name, passwd) { username.value(name) password.value(passwd) login.click()}

}  

38  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Geb  Page  deSinition:  at  predicate  

class LoginPage extends Page {static url = "/timecard-grails/auth/login”

static at = { title == "Login" }static content = { username { $("input", name: "username") } password { $("input", name: "password") } login { $("input", name: "submit") } message(required: false) { $("div.message").text() }}def login(name, passwd) { username.value(name) password.value(passwd) login.click()}

}  

39  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Geb  Page  deSinition:  logical  content  

class LoginPage extends Page {static url = "/timecard-grails/auth/login”static at = { title == "Login" }

static content = { username { $("input", name: "username") } password { $("input", name: "password") } login { $("input", name: "submit") } message(required: false) { $("div.message").text() }}def login(name, passwd) { username.value(name) password.value(passwd) login.click()}

}  

40  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Geb  Page  deSinition:  actions  

class LoginPage extends Page {static url = "/timecard-grails/auth/login”static at = { title == "Login" }static content = { username { $("input", name: "username") } password { $("input", name: "password") } login { $("input", name: "submit") } message(required: false) { $("div.message").text() }}

def login(name, passwd) { username.value(name) password.value(passwd) login.click()}

}  

41  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  42  

Business  people  wants  to  express  required  behaviour,  not  necessarily  write  tests  

SpeciSications  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  43  

Spock  

•  Another  BDD  framework  for  the  Java  pla^orm  

•  Based  on  Groovy  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  44  

Example  Task  Task:  Login  is  required  for  -me  repor-ng    Given  a  user  When  he  navigates  to  the  -me  repor-ng  page  Then  he  has  to  log  in                  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  45  

Example  Task  Task:  Regular  days    Given  a  white-­‐collar  employee  When  he  arrives  at  8:00  and  leaves  at  17:00  Then  his  result  for  that  day  is  0.                  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  

Spock  speciSication  class TimeReportTest extends GebSpec { def "White-collar time reporting, regular day"() {

given: to HomePage registerTime.click() waitFor { at LoginPage } login("bjorn", "secret")expect: at TimeReportPagewhen: arriveAt("08:00") leaveAt("17:00")then: at ResultsPage flex == "0"

}}  

46  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  47  

Demo!  

Web  Acceptance  Tes-ng  Revisited   ©  2012  Callista  Enterprise  |  www.callistaenterprise.se  48  

Time  for  Questions!