0
Websites testen met
Behave en Selenium
Fedict – Brussel – 11 oktober 2013

© Fedict 2013. All rights reserved
Agenda

© Fedict 2013. All rights reserved
Agenda


Websites testen



Selenium



Splinter



Behave



(Demo)



Vragen

© Fedict 2013. All rights reserved |...
Websites testen

© Fedict 2013. All rights reserved
Verschillende soorten (complementair)


Schaalbaarheid / load testing


Vb: JMeter



Beveiliging



Toegankelijkheid
...
Selenium

© Fedict 2013. All rights reserved
Selenium


Automatiseren browser acties




Open source




Niet bedoeld voor load testing, HTML validaties...
http:/...
Selenium Web Driver


Sturen browser






Ondersteuning voor meerdere browsers






Openen en sluiten browser
O...
Voorbeeld (Python)
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://some.example/user')
el...
Enkele mogelijkheden


Navigatie





Invullen formulieren




Tekstvelden, select, ...

Zoeken specifieke HTML-elem...
Beperkingen


Geen toegang tot onzichtbare elementen





Geen HTTP authentication / .htaccess




Vb: <input type=”...
Best practice: “Page Objects”


Extra abstractie





Nadeel




Scheiden applicatie-logica en HTML-elementen
Vb: “L...
Voorbeeld Page Object gebruiken
from selenium import webdriver
from myexample import LoginPage
browser = webdriver.Firefox...
Voorbeeld Page Object (LoginPage)
from selenium import webdriver
def login(self, username, password):
browser = self.brows...
Splinter

© Fedict 2013. All rights reserved
Overzicht


Python



(Iets) eenvoudigere API dan Selenium



Abstractie




PhantomJS / Selenium / Zope.testbrowser
...
Voorbeeld
from splinter import Browser
browser = Browser()
Browser.visit('http://some.example/user')
browser.fill('name', ...
Behave

© Fedict 2013. All rights reserved
Behavior Driven Development (BDD)


“Agile” ontwikkeling



“Leesbare” test cases




Samenwerking business / techies
...
Behave


Python



Bechrijven testen in tekst files




Automatisch uitvoeren




Features, Scenarios, Steps
Command...
Features, Scenarios, Steps


Testen van “Feature”s




Via een of meer “Scenario”s




Vb: inloggen op een website
Me...
Voorbeeld Feature met Scenarios, Steps
Feature: testing the login form of The Example website
Scenario: log in with invali...
Steps: Given, When, Then, And


Worden gekoppeld aan code / functies





Via annotaties
Alles na “Given” is eigenlijk...
Voorbeeld implementatie Step
from splinter import Browser
from myexample import LoginPage
@given('the website “{url}”')
de...
Voorbeeld complexere Step
Feature: testing the login form of The Example website
Scenario: log in with several invalid use...
Enkele handige functionaliteiten


Selecteren van uit te voeren Scenarios





Environment file





Via zelf te de...
Voorbeeld Environment
from splinter import Browser
def before_all(self):
profile = { 'network.proxy.type': 1,
'network.pro...
Vragen ?

© Fedict 2013. All rights reserved
Enkele linken


http://www.w3.org/TR/webdriver



http://www.seleniumhq.org



http://selenium-python.readthedocs.org

...
Bedankt !
Bart Hanssens / Fedict
Maria-Theresiastraat 1
1000 Brussel, Belgium
@BartHanssens
bart.hanssens [at] fedict.be |...
Upcoming SlideShare
Loading in...5
×

Websites testen met Selenium en Behave

278

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
278
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Websites testen met Selenium en Behave"

  1. 1. Websites testen met Behave en Selenium Fedict – Brussel – 11 oktober 2013 © Fedict 2013. All rights reserved
  2. 2. Agenda © Fedict 2013. All rights reserved
  3. 3. Agenda  Websites testen  Selenium  Splinter  Behave  (Demo)  Vragen © Fedict 2013. All rights reserved | p. 3
  4. 4. Websites testen © Fedict 2013. All rights reserved
  5. 5. Verschillende soorten (complementair)  Schaalbaarheid / load testing  Vb: JMeter  Beveiliging  Toegankelijkheid   Valideren HTML   Vb: AnySurfer Vb: W3C Markup Validator Via browser / eindgebruiker test  Vb: Selenium © Fedict 2013. All rights reserved | p. 5
  6. 6. Selenium © Fedict 2013. All rights reserved
  7. 7. Selenium  Automatiseren browser acties   Open source   Niet bedoeld voor load testing, HTML validaties... http://www.seleniumhq.org Verzameling tools     Selenium IDE (Firefox plugin) (Selenium Remote Control) Selenium WebDriver Selenium Grid (testen op meerdere servers tegelijk) © Fedict 2013. All rights reserved | p. 7
  8. 8. Selenium Web Driver  Sturen browser     Ondersteuning voor meerdere browsers     Openen en sluiten browser Openen pagina, klikken op buttons, invullen velden, ... Testen van aanwezigheid elementen, tekst ... Firefox 3.6+, HTMLUnit Chrome 12+, IE 7+, Opera 8+ IOS, Android browser Via verschillende programmeertalen   Java, C#, Python, Ruby (3rd party) PHP, Perl, … © Fedict 2013. All rights reserved | p. 8
  9. 9. Voorbeeld (Python) from selenium import webdriver browser = webdriver.Firefox() browser.get('http://some.example/user') elem = browser.find_element_by_id('edit-name') elem.send_keys('UserName') elem = browser.find_element_by_id('edit-pass') elem.send_keys('SecretPassword') elem = browser.find_element_by_id('button-submit') elem.click() browser.quit() © Fedict 2013. All rights reserved | p. 9
  10. 10. Enkele mogelijkheden  Navigatie    Invullen formulieren   Tekstvelden, select, ... Zoeken specifieke HTML-elementen     Pagina's laden, page history Navigeren naar frames, windows, alert dialogs Via attributen ID, class, name Via naam, CSS selector, XPath Linken: via (zichtbare) tekst van link Javascript, cookies, ... © Fedict 2013. All rights reserved | p. 10
  11. 11. Beperkingen  Geen toegang tot onzichtbare elementen    Geen HTTP authentication / .htaccess   Vb: <input type=”hidden”> => “Echte” gebruiker heeft dit ook niet Verschilt per browser / pop-up schermen invullen Proxy configureren verschilt per browser © Fedict 2013. All rights reserved | p. 11
  12. 12. Best practice: “Page Objects”  Extra abstractie    Nadeel   Scheiden applicatie-logica en HTML-elementen Vb: “LoginPage” object Extra werk vooraf (zelf te programmeren) Voordelen   Bevordert hergebruik Minder werk als HTML-code pagina wijzigt © Fedict 2013. All rights reserved | p. 12
  13. 13. Voorbeeld Page Object gebruiken from selenium import webdriver from myexample import LoginPage browser = webdriver.Firefox() page = LoginPage(browser, 'http://some.example/user') page.login('Username', 'Password') browser.quit() © Fedict 2013. All rights reserved | p. 13
  14. 14. Voorbeeld Page Object (LoginPage) from selenium import webdriver def login(self, username, password): browser = self.browser elem = browser.find_element_by_id('name') elem.send_keys(username) elem = browser.find_element_by_id('pass') elem.send_keys(password) elem = browser.find_element_by_id('button-submit') elem.click() def __init__(self, browser, url): self.browser = browser browser.get(url) © Fedict 2013. All rights reserved | p. 14
  15. 15. Splinter © Fedict 2013. All rights reserved
  16. 16. Overzicht  Python  (Iets) eenvoudigere API dan Selenium  Abstractie   PhantomJS / Selenium / Zope.testbrowser Testen of bepaald element wel/niet aanwezig is  Via naam, ID, XPath, …  Testen of bepaalde tekst wel/niet aanwezig is  Functies voor pagina titel / url / HTML code © Fedict 2013. All rights reserved | p. 16
  17. 17. Voorbeeld from splinter import Browser browser = Browser() Browser.visit('http://some.example/user') browser.fill('name', 'MyUserName') browser.fill('pass', 'SecretPassword') elem = browser.find_by_id('button-submit') elem.first.click() browser.quit() © Fedict 2013. All rights reserved | p. 17
  18. 18. Behave © Fedict 2013. All rights reserved
  19. 19. Behavior Driven Development (BDD)  “Agile” ontwikkeling  “Leesbare” test cases   Samenwerking business / techies Tools voor verschillende programmeertalen     Python: Behave Java: JBehave, Spock, Instinct … Javascript: Jasmine Ruby: Cucumber, RSpec, ... © Fedict 2013. All rights reserved | p. 19
  20. 20. Behave  Python  Bechrijven testen in tekst files   Automatisch uitvoeren   Features, Scenarios, Steps Command line / integratie IDE of andere tools Rapportering  Console, JUnit rapport, eigen log file ... © Fedict 2013. All rights reserved | p. 20
  21. 21. Features, Scenarios, Steps  Testen van “Feature”s   Via een of meer “Scenario”s   Vb: inloggen op een website Met correcte / verkeerde username ... Elk scenario bevat meerdere “Step”s   Ga naar website, log in, controleer … Worden door programmeur gekoppeld aan code © Fedict 2013. All rights reserved | p. 21
  22. 22. Voorbeeld Feature met Scenarios, Steps Feature: testing the login form of The Example website Scenario: log in with invalid users Given the website "some.example" When I log in with user "invalid" and password "wrong" Then an error message must be displayed Scenario: log in with valid user Given the website "some.example" When I log in with user "valid" and password "correct" Then the connection must be secured And a welcome message must be displayed © Fedict 2013. All rights reserved | p. 22
  23. 23. Steps: Given, When, Then, And  Worden gekoppeld aan code / functies    Via annotaties Alles na “Given” is eigenlijk een verwijzing Parameters zijn mogelijk   Worden uit tekst gehaald via “gewone” match of regexp Ook een (tekst) tabel is mogelijk © Fedict 2013. All rights reserved | p. 23
  24. 24. Voorbeeld implementatie Step from splinter import Browser from myexample import LoginPage @given('the website “{url}”') def step_impl(self, url): self.homepage = url @when('I log in with user “{user}” and password “{pwd}”') def step_impl(self, user, pwd): page = LoginPage(self.browser, self.homepage) page.login(user, pwd) @then('the connection must be secured') def step_impl(self): assert self.browser.url.startswith('https') © Fedict 2013. All rights reserved | p. 24
  25. 25. Voorbeeld complexere Step Feature: testing the login form of The Example website Scenario: log in with several invalid users Given the website "some.example" When I log in with an invalid username or password | username | password | | correct | wrong | | wrong | wrong | Then an error message must be displayed “”” Invalid username or password. Please try again. “”” © Fedict 2013. All rights reserved | p. 25
  26. 26. Enkele handige functionaliteiten  Selecteren van uit te voeren Scenarios    Environment file    Via zelf te definiëren tags Vb: @nl, @https, @mobile Voor en/of na elke Feature en/of Scenario en/of Step Vb: starten / afsluiten browser “Work in Progress” mode   Stopt bij eerste fout Geen error log naar console © Fedict 2013. All rights reserved | p. 26
  27. 27. Voorbeeld Environment from splinter import Browser def before_all(self): profile = { 'network.proxy.type': 1, 'network.proxy.http': 'myproxy.example', 'network.proxy.http_port': 8080 } self.browser = Browser('firefox', profile_preferences=profile) def after_all(self): self.browser.quit() © Fedict 2013. All rights reserved | p. 27
  28. 28. Vragen ? © Fedict 2013. All rights reserved
  29. 29. Enkele linken  http://www.w3.org/TR/webdriver  http://www.seleniumhq.org  http://selenium-python.readthedocs.org  http://splinter.cobrateam.info  http://pythonhosted.org/behave  https://saucelabs.com © Fedict 2013. All rights reserved | p. 29
  30. 30. Bedankt ! Bart Hanssens / Fedict Maria-Theresiastraat 1 1000 Brussel, Belgium @BartHanssens bart.hanssens [at] fedict.be | www.fedict.belgium.be © Fedict 2013. All rights reserved
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×