Websites testen met Selenium en Behave

  • 161 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
161
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Websites testen met Behave en Selenium Fedict – Brussel – 11 oktober 2013 © Fedict 2013. All rights reserved
  • 2. Agenda © Fedict 2013. All rights reserved
  • 3. Agenda  Websites testen  Selenium  Splinter  Behave  (Demo)  Vragen © Fedict 2013. All rights reserved | p. 3
  • 4. Websites testen © Fedict 2013. All rights reserved
  • 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. Selenium © Fedict 2013. All rights reserved
  • 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. 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. 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. 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. 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. 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. 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. 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. Splinter © Fedict 2013. All rights reserved
  • 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. 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. Behave © Fedict 2013. All rights reserved
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. Vragen ? © Fedict 2013. All rights reserved
  • 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. 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