Selenium a PHP I.

posted 17.08.2013

Začít unit testovat roky starou aplikaci je většinou těžké a neobejde se bez zásahů do původního kódu. Pro programátora je to Hlava 22 - pro jistotu, že nic nerozbije, by potřeboval pokrytí testy, pro pokrytí testy by potřeboval zasáhnout do existující běžící aplikace. Kompromisy a důraz na pokrytí nových kommitů se většinou podaří situaci změnit, je ale potřeba vymyslet, co dělat v mezičase. Funkční testy, neméně důležitý sourozenec jednotkových test, jsou asi nejlepším řešením.

Selenium RC, Selenium 2, Selenium WebDriver, Selenium Grid, Selenium IDE

Seleniu bohužel chybí jednoduchý a přehledný návod pro začátečníky. Oficiální dokumentace volně zaměňuje různé verze a pořád obě nabízí. Pokud dnes začínáte s testováním, rovnou zahoďte již nevyvíjené Selenium RC a zaměřte se na novou verzi, občas označenou Selenium 2.0, především ale známou jako WebDriver. Aktuální verze (srpen 2013) je cca. 2.3x.0

Selenium Grid je označení pro distribuované spouštění testu v RC i WebDriveru. V principu je vždy spouštění jeden server/hub, ke kterému jsou připojeny jednotlivé testovací nody, které spouštějí prohlížeč a vykonávají test. Jedno použití je škálování, druhé např. spouštění různých verzí IE (které na jednom systému je těžké spustit izolovaně).

Selenium IDE je pak rozšíření do Firefoxu, které umožňuje testy naklikat bez znalosti programování. Pro Webdriver ještě není spolehlivé řešení, a je tak lepší testy ručně skriptovat.

První test

  1. Ať už budete psát testy v kterémkoliv jazyce, společnou částí bude Selenium Server. Stáhněte si nejnovější selenium-server-standalone-#.jar a spusťte ho pomocí:
    java -jar selenium-server-standalone-#.jar
    Odpovědí bude podobný výpis:
    VIII 17, 2013 6:30:34 ODP. org.openqa.grid.selenium.GridLauncher main
    INFO: Launching a standalone server
    …
    18:30:39.523 INFO - v2.25.0, with Core v2.25.0. Built from revision 17482
    18:30:39.647 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
    …
    18:30:39.679 INFO - Started SocketListener on 0.0.0.0:4444
    18:30:39.679 INFO - Started org.openqa.jetty.jetty.Server@14bc4e6
  2. Nyní je potřeba zvolit knihovnu, která umí komunikovat se serverem, který ovládá prohlížeč. Mým favoritem je instaclick/php-webdriver, udržovaný fork knihovny pro Selenium od Facebooku. Instalace opět jednoduchá:
    composer require "instaclick/php-webdriver ~1.0.0"
  3. A nakonec už jen samotný test:
    <?php
    require 'vendor/autoload.php';
    
    $web_driver = new WebDriver\WebDriver();
    $session = $web_driver->session('firefox');
    
    $session->open('http://www.google.cz');
    echo $session->title(); // Google
    $session->close();
    	
  4. Co dál?

    Zatím jsme vybrali jen nadpis stránky, což je pro užitečný test příliš málo. Rozvedu základní práci s načtenou stránkou a nastíním, jak testy zorganizovat a spouštět hromadně.
comments powered by Disqus