Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Selenium a WebDriver - přítomnost a budoucnost

251 views

Published on

Konference Test Stack, 6. června 2019, Praha

Kam se testování přes Selenium posunulo?
* Co je to standard W3C WebDriver, proč na něj Selenium přechází a co se díky němu mění
* Jakou výhodu přináší to, že se o integraci protokolu do prohlížečů starají sami jejich výrobci (Mozilla, Google, Apple)
* Jaké nové možnosti přineslo end-to-end testování přes Selenium v poslední době – například headless režim Firefoxu a Chrome
* Lokální zprovoznění Selenia i vybraného prohlížeče jedním příkazem – spuštěním Selenia v Dockeru si můžeme ušetřit spoustu obtíží a nekompatibilit, na které jsme dříve mohli narazit

Budoucnost Selenia:
* Co přinese Selenium 4.0? Jak se na něj připravit, abychom pak nemuseli věnovat upgradu veliké úsilí?
* Kam směřuje budoucí role Selenia? Možná ho totiž nebudeme potřebovat na to, na co ho používáme dnes.
* Kdy má smysl použít alternativy k Seleniu jako Pupeteer nebo Cypress? A proč Selenium rozhodně není překonané a naopak je jeho potenciál vyšší, než kdy dříve?

Published in: Software

Selenium a WebDriver - přítomnost a budoucnost

  1. 1. Selenium a WebDriver přítomnost a budoucnost Konference Test stack 6. června 2019 Ondřej Machulda  @OndraM  ondrejmachulda.cz Anotovaná verze přednáškyAnotovaná verze přednášky
  2. 2. HTTP HTTP HTTP port 4444 Zjednodušené schéma toho, jak Selenium funguje. Pomocí knihovny ve vašem jazyce přes HTTT port komunikujete se Selenium serverem, který si pak povídá s prohlížeči, a provádí v nich akce, které jste zavolali. Zjednodušené schéma toho, jak Selenium funguje. Pomocí knihovny ve vašem jazyce přes HTTT port komunikujete se Selenium serverem, který si pak povídá s prohlížeči, a provádí v nich akce, které jste zavolali.
  3. 3. Selenium 2 alias Selenium WebDriverSelenium 2 alias Selenium WebDriver “Prehistoric scene” by Karen is licensed under CC BY 2.0 Historický problém Selenia byl, že když vznikalo, nebyla žádná standardizovaná cesta, jak prohlížeče automatizovaně ovládat. A tak fungovalo trochu jako „hack“ a zneužívalo vnitřní vývojářské API prohlížečů – které ale mohlo kdykoliv přestat fungovat. I protože tu podporu Selenia nedělali samotní výrobci prohlížečů. Historický problém Selenia byl, že když vznikalo, nebyla žádná standardizovaná cesta, jak prohlížeče automatizovaně ovládat. A tak fungovalo trochu jako „hack“ a zneužívalo vnitřní vývojářské API prohlížečů – které ale mohlo kdykoliv přestat fungovat. I protože tu podporu Selenia nedělali samotní výrobci prohlížečů.
  4. 4. Json W ire Protocol Json Wire ProtocolJson Wire Protocol Další historický problém byl, že HTTP protokol, kterým Selenium komunikuje (JsonWireProtocol), vznikal na koleni... Další historický problém byl, že HTTP protokol, kterým Selenium komunikuje (JsonWireProtocol), vznikal na koleni...
  5. 5. Json Wire Protocol? Protokol byl definovaný na wiki stránce, neměl parametry plnohodnotného standardu, takže když ho pak chtěli implementovat různé knihovny nebo různé prohlížeče, docházelo k rozdílům v implementaci. Takže třeba cross-browser testování byla spíše teorie. Protokol byl definovaný na wiki stránce, neměl parametry plnohodnotného standardu, takže když ho pak chtěli implementovat různé knihovny nebo různé prohlížeče, docházelo k rozdílům v implementaci. Takže třeba cross-browser testování byla spíše teorie.
  6. 6. https://w3c.github.io/webdriver/ Proto bylo třeba protokol standardizovat, což se vývojářům Selenia ve spolupráci s výrobci prohlížečů povedlo pod hlavičkou W3C. A tak se po šesti letech práce stal protokol W3C WebDriver vloni plnohodnotným standardem a oficiální webovou technologií s růžovou budoucností. Proto bylo třeba protokol standardizovat, což se vývojářům Selenia ve spolupráci s výrobci prohlížečů povedlo pod hlavičkou W3C. A tak se po šesti letech práce stal protokol W3C WebDriver vloni plnohodnotným standardem a oficiální webovou technologií s růžovou budoucností.
  7. 7. W 3C W ebDriver W3C WebDriver W3C WebDriver Selenium tak kromě starého JsonWire protokolu umí nově mluvit i standardizovaným W3C WebDriver protokolem. (Pokud ho umí knihovna ve vašem jazyce). A protože to je standard, mohou ho na straně prohlížečů také dobře implementovat jejich výrobci – Mozilla, Chrome, Apple... Selenium tak kromě starého JsonWire protokolu umí nově mluvit i standardizovaným W3C WebDriver protokolem. (Pokud ho umí knihovna ve vašem jazyce). A protože to je standard, mohou ho na straně prohlížečů také dobře implementovat jejich výrobci – Mozilla, Chrome, Apple...
  8. 8. W3C WebDriver a k čemu nám to je
  9. 9. „Selenium WebDriver je de-facto standard pro automatizaci ovládání prohlížečů“ Doteď jsme říkali, že Selenium WebDriver je „de-facto“ standard. Protože na tom panovala neformální shoda... Doteď jsme říkali, že Selenium WebDriver je „de-facto“ standard. Protože na tom panovala neformální shoda...
  10. 10. „Selenium WebDriver je de-facto standard pro automatizaci ovládání prohlížečů“ Teď už ale „de-facto“ říkat nemusíme. WebDriver je skutečný standard pro🎉 automatizované ovládání prohlížečů – žádný jiný takový standard neexistuje. Tím, že je pod W3C, je to i formální dohoda výrobců prohlížečů, kteří se vlastně zavázali, že standard budou sami implementovat a podporovat. Teď už ale „de-facto“ říkat nemusíme. WebDriver je skutečný standard pro🎉 automatizované ovládání prohlížečů – žádný jiný takový standard neexistuje. Tím, že je pod W3C, je to i formální dohoda výrobců prohlížečů, kteří se vlastně zavázali, že standard budou sami implementovat a podporovat.
  11. 11. Podpora od výrobců prohlížečů https://webdriver-herald.herokuapp.com/ k 27. 3. 2019 A opravdu to dělají a implementují ho. S každou další verzí prohlížečů se navíc implementace zlepšuje. Takže to vypadá, že díky novému standardu a tím sjednocení chování prohlížečů se stane cross-browser testování (které opravdu funguje) brzy realitou. A opravdu to dělají a implementují ho. S každou další verzí prohlížečů se navíc implementace zlepšuje. Takže to vypadá, že díky novému standardu a tím sjednocení chování prohlížečů se stane cross-browser testování (které opravdu funguje) brzy realitou.
  12. 12. JsonWire Protocol W3C WebDriver Selenium 2 Selenium 3 Selenium 4 ✓ ✓ ✓ 😐 😐 😊 V Seleniu 3 už je většina standardu W3C WebDriver implementovaná a v Seleniu 4 by měl být implementovaný plně. Starý JsonWire protokol ale nadále funguje a i v Seleniu 4.0 by měl pořád fungovat – ale je už označený za „obsolete“ a jeho fragmenty mohou být postupně odstraňovány. V Seleniu 3 už je většina standardu W3C WebDriver implementovaná a v Seleniu 4 by měl být implementovaný plně. Starý JsonWire protokol ale nadále funguje a i v Seleniu 4.0 by měl pořád fungovat – ale je už označený za „obsolete“ a jeho fragmenty mohou být postupně odstraňovány.
  13. 13. Přechod na W3C WebDriver Firefox 48+ (Geckodriver) Chrome (Chromedriver) // wdio.conf.js exports.config = { capabilities: { browserName: 'chrome', 'goog:chromeOptions': { "w3c": true, } }, } + Selenium 3 + Pokud to knihovna ve vašem jazyce umí (nejspíš ano), a používáte Selenium 3, můžete ho už začít používat. A jestliže testujete ve Firefoxu 48+, tak už ho používáte, protože Geckodriver starý protokol ani neumí ¯_( ツ )_/¯. Pokud to knihovna ve vašem jazyce umí (nejspíš ano), a používáte Selenium 3, můžete ho už začít používat. A jestliže testujete ve Firefoxu 48+, tak už ho používáte, protože Geckodriver starý protokol ani neumí ¯_( ツ )_/¯.
  14. 14. Přechod na W3C WebDriver Firefox 48+ (Geckodriver) Chrome (Chromedriver) // wdio.conf.js exports.config = { capabilities: { browserName: 'chrome', 'goog:chromeOptions': { "w3c": true, } }, } Od Chrome 75 je to výchozí ʘ‿ʘ Selenium 3 + + V Chrome si W3C protokol můžete zapnout, ale od Chrome a Chromedriveru 75 (vyšlo předevčírem) je W3C protokol už výchozí. Takže je možné, že na něj brzy beztak přejdete, a ideálně byste to ani neměli nijak negativně pocítit. 👌 V Chrome si W3C protokol můžete zapnout, ale od Chrome a Chromedriveru 75 (vyšlo předevčírem) je W3C protokol už výchozí. Takže je možné, že na něj brzy beztak přejdete, a ideálně byste to ani neměli nijak negativně pocítit. 👌
  15. 15. Nové možnosti
  16. 16. Headless prohlížečeHeadless prohlížeče PhantomJSPhantomJS RIPRIP Když testy pouštíme na serveru, není třeba, aby se vykreslovalo okno prohlížeče. Použitím headless prohlížeče se web renderuje jenom v paměti a my tak můžeme ušetřit systémové prostředky i testy zrychlit. Dřív se na to používal prohlížeč PhantomJS – ale ten už je mrtvý a neudržovaný, protože headless režim dnes umí přímo Firefox i Chrome. Když testy pouštíme na serveru, není třeba, aby se vykreslovalo okno prohlížeče. Použitím headless prohlížeče se web renderuje jenom v paměti a my tak můžeme ušetřit systémové prostředky i testy zrychlit. Dřív se na to používal prohlížeč PhantomJS – ale ten už je mrtvý a neudržovaný, protože headless režim dnes umí přímo Firefox i Chrome.
  17. 17. Headless prohlížeče // wdio.conf.js exports.config = { capabilities: { browserName: 'chrome', 'goog:chromeOptions': { args: ['--headless'], } }, } Stačí jenom nastavit v capabilities. Pro Firefox by to bylo obdobně: browserName: 'firefox', 'moz:firefoxOptions': { args: ['-headless'] } Stačí jenom nastavit v capabilities. Pro Firefox by to bylo obdobně: browserName: 'firefox', 'moz:firefoxOptions': { args: ['-headless'] }
  18. 18. Spouštění testů v Dockeru Docker se dnes rve všude možně a jde použít i pro Selenium. V kontejneru nám pak běží Selenium i s kompatibilní verzí prohlížeče. Navenek se nic nezmění, pořád to komunikuje po HTTP portu jako předtím. Jen se nemusíme starat o instalaci prohlížečů, můžeme mít v kontejnerech vedle sebe víc různých verzí atd. Docker se dnes rve všude možně a jde použít i pro Selenium. V kontejneru nám pak běží Selenium i s kompatibilní verzí prohlížeče. Navenek se nic nezmění, pořád to komunikuje po HTTP portu jako předtím. Jen se nemusíme starat o instalaci prohlížečů, můžeme mít v kontejnerech vedle sebe víc různých verzí atd.
  19. 19. Spouštění testů v Dockeru $ docker run -p 4444:4444 -p 5900:5900 selenium/standalone-chrome-debug:3.141.59 $ vncviewer localhost:5900 $ ./node_modules/.bin/wdio wdio.conf.js Jedním příkazem stáhneme a spustíme Docker se Seleniem a Chrome. Otevřeme port 4444 pro komunikaci Selenia a 5900 pro VNC, abychom se mohli koukat, co se uvnitř děje: Jedním příkazem stáhneme a spustíme Docker se Seleniem a Chrome. Otevřeme port 4444 pro komunikaci Selenia a 5900 pro VNC, abychom se mohli koukat, co se uvnitř děje: Připojíme se přes VNC dovnitř kontejneru:Připojíme se přes VNC dovnitř kontejneru: A testy spustíme jako předtím. Ve VNC pak můžeme vidět, jak nám vyskakují okna Chrome 🎉 A testy spustíme jako předtím. Ve VNC pak můžeme vidět, jak nám vyskakují okna Chrome 🎉
  20. 20. Spouštění testů v Dockeru Selenium v Dockeru se navíc dá snadno škálovat, třeba přes Docker Swarm nebo Kubernetes, a můžete si sami nastartovat desítky nodů a zrychlit testy lepší paralelizací. Ve spojení s headless režimem si můžeme relativně jednoduše a s malými nároky vytvořit vlastní Selenium cloud, aniž bychom pálili peníze u SauceLabs, BrowserStacku apod. Selenium v Dockeru se navíc dá snadno škálovat, třeba přes Docker Swarm nebo Kubernetes, a můžete si sami nastartovat desítky nodů a zrychlit testy lepší paralelizací. Ve spojení s headless režimem si můžeme relativně jednoduše a s malými nároky vytvořit vlastní Selenium cloud, aniž bychom pálili peníze u SauceLabs, BrowserStacku apod.
  21. 21. Spouštění testů bez Selenium serveru? W3C WebDriver Selenium Server má roli routeru (vybírá vhodný node, kde testu pustit), startuje požadované prohlížeče apod., ale pak požadavky z vašich testů předává zase dál na prohlížeč. Při lokálním vývoji tak možná roli routeru (a tedy Selenium server) nepotřebujeme... Selenium Server má roli routeru (vybírá vhodný node, kde testu pustit), startuje požadované prohlížeče apod., ale pak požadavky z vašich testů předává zase dál na prohlížeč. Při lokálním vývoji tak možná roli routeru (a tedy Selenium server) nepotřebujeme...
  22. 22. W3C WebDriver W3C WebDriver Spouštění testů bez Selenium serveru? $ chromedriver --port=4444 # nebo geckodriver $ ./node_modules/.bin/wdio wdio.conf.js Pro lokální použití se tak nabízí možnost komunikovat přímo se prohlížečem – bez potřeby spouštění Selenium severu. Stačí nahodit driver prohlížeče změnit adresu kam se připojujeme (z http://localhost:4444/wd/hub na http://localhost:4444/) Pro lokální použití se tak nabízí možnost komunikovat přímo se prohlížečem – bez potřeby spouštění Selenium severu. Stačí nahodit driver prohlížeče změnit adresu kam se připojujeme (z http://localhost:4444/wd/hub na http://localhost:4444/)
  23. 23. Selenium IDE TNG https://www.seleniumhq.org/selenium-ide/ Selenium IDE je rozšíření pro prohlížeč, které umožňuje naklikat a spouštět testy pomocí Selenia. Je nově přepsané jako WebExtension, takže funguje ve Firefoxu i v Chrome. Má zajímavé novinky, například v něm jde spouštět v rámci jednoho testu jiný, takže třeba opakující se login nemusíme mít nakopírovaný na více místech. Umí i řídící struktury (ify atd.). I tak ale platí, že Selenium IDE je spíše jen pro „hraní“ nebo malé projektíky – pro větší test suite je to neudžovatelné. Selenium IDE je rozšíření pro prohlížeč, které umožňuje naklikat a spouštět testy pomocí Selenia. Je nově přepsané jako WebExtension, takže funguje ve Firefoxu i v Chrome. Má zajímavé novinky, například v něm jde spouštět v rámci jednoho testu jiný, takže třeba opakující se login nemusíme mít nakopírovaný na více místech. Umí i řídící struktury (ify atd.). I tak ale platí, že Selenium IDE je spíše jen pro „hraní“ nebo malé projektíky – pro větší test suite je to neudžovatelné.
  24. 24. ● Selenium IDE TNG $ npm install -g selenium-side-runner $ npm install -g chromedriver geckodriver $ selenium-side-runner Jobs.cz.side $ selenium-side-runner -c "browserName=firefox" Jobs.cz.side $ selenium-side-runner -c "browserName=chrome" -w 5 Jobs.cz.side $ selenium-side-runner -c "browserName=chrome chromeOptions.args=[headless]" … Když bychom Selenium IDE ale na něco použili, nově se testy napsané v něm dají uložit a spouštět z příkazové řádky třeba na CI serveru. A jde to klidně spouštět i paralelně nebo v headless režimu. Pořád to má ale daleko do plnohodnotného testování. Pro vyzkoušení end-to-end testování ale můžeme se Selenium IDE začít. Když bychom Selenium IDE ale na něco použili, nově se testy napsané v něm dají uložit a spouštět z příkazové řádky třeba na CI serveru. A jde to klidně spouštět i paralelně nebo v headless režimu. Pořád to má ale daleko do plnohodnotného testování. Pro vyzkoušení end-to-end testování ale můžeme se Selenium IDE začít.
  25. 25. Blízká budoucnost
  26. 26. Selenium Mocha / Jasmine / Jest / … PHPUnit / Codeception / … TestNG / JUnit / … rspec / Cucumber / … unittest / pytest / … NUnit / … Cypress / Puppeteer Mocha (Cypress) crossbrowsertesting.com/blog/test-automation/selenium-vs-cypress/ automationrhapsody.com/cypress-vs-selenium-end-era/ applitools.com/blog/cypress-vs-selenium-webdriver-better-or-just-different Selenium a ekosystém okolo je tvořen řadou nástrojů: knihovny pro všemožné jazyky; pro testování můžete používat svůj oblíbený testovací framework; můžete testovat oproti různým prohlížečům i mobilním zařízením. Díky W3C WebDriver standardu navíc nově s lepší cross-browser kompatibilitou a stabilněji, než kdy dříve. Selenium a ekosystém okolo je tvořen řadou nástrojů: knihovny pro všemožné jazyky; pro testování můžete používat svůj oblíbený testovací framework; můžete testovat oproti různým prohlížečům i mobilním zařízením. Díky W3C WebDriver standardu navíc nově s lepší cross-browser kompatibilitou a stabilněji, než kdy dříve. Nástroje jako Cypress nebo Puppeteer tak rozhodně Selenium nenahrazují ani nestojí proti němu – spíš jsou určeny na jinou věc. Ideální uplatnění mohou najít zejména u frontend vývojářů, pro testování SPA aplikací postavených na Reactu/Vue apod. Díky tomu, jak tyto nástroje fungují, jsou na to rychlejší než Selenium a umožňují některé věci, na které Selenium vlastně ani není vhodný nástroj. Nástroje jako Cypress nebo Puppeteer tak rozhodně Selenium nenahrazují ani nestojí proti němu – spíš jsou určeny na jinou věc. Ideální uplatnění mohou najít zejména u frontend vývojářů, pro testování SPA aplikací postavených na Reactu/Vue apod. Díky tomu, jak tyto nástroje fungují, jsou na to rychlejší než Selenium a umožňují některé věci, na které Selenium vlastně ani není vhodný nástroj.
  27. 27. Selenium 4 3.141.59 zůstane poslední verzí Selenia 3 18. 4. 2019 – v4.0.0-alpha-1 Kdy bude stabilní verze? github.com/SeleniumHQ/selenium/projects/2 Drop-in replacement Zcela přepsaný Selenium Grid Výkonnější, když máme hodně nodů. Rozdělený do komponent, takže např. ukládání sessions může být samostatný proces – takže když by se router třeba zasekl a my ho restartovali, sessions by nám zůstaly živé a nemuseli bychom všechny běžící testy restartovat. Výkonnější, když máme hodně nodů. Rozdělený do komponent, takže např. ukládání sessions může být samostatný proces – takže když by se router třeba zasekl a my ho restartovali, sessions by nám zůstaly živé a nemuseli bychom všechny běžící testy restartovat. Pro většinu uživatelů bude přechod na Selenium 4 jen o zvýšení verze, a všechno by mělo nadále fungovat bez negativní změny. Pro většinu uživatelů bude přechod na Selenium 4 jen o zvýšení verze, a všechno by mělo nadále fungovat bez negativní změny. Vývoj se už soustředí na Selenium 4, takže k další aproximaci verze směrem k hodnotě π už nejspíše nedojde.Vývoj se už soustředí na Selenium 4, takže k další aproximaci verze směrem k hodnotě π už nejspíše nedojde. Už se dá dokonce vyzkoušet alpha verze Selenia 4Už se dá dokonce vyzkoušet alpha verze Selenia 4 Na GitHubu můžete sledovat, v jakém stavu se vývoj Selenia 4 nachází. Podle Simon Stewarta (lead developer Selenium projektu) vyjde Selenium 4 na čínský Nový rok. Neřekl tedy který, nejbližší možnost je 25. ledna 2020 .🤷 Na GitHubu můžete sledovat, v jakém stavu se vývoj Selenia 4 nachází. Podle Simon Stewarta (lead developer Selenium projektu) vyjde Selenium 4 na čínský Nový rok. Neřekl tedy který, nejbližší možnost je 25. ledna 2020 .🤷
  28. 28.  Ondřej Machulda  ondrejmachulda.cz  @OndraM Q & A

×