// der php hacker

// archiv

Selenium Guide, Teil 2: Selenium Remote Control nutzen

Geschrieben am 12. Feb 2009 von Cem Derin

selenium_shot

Im letzten Teil habe ich erklärt, was Selenium ist, dass Webtests keine zu vernachlässigender Bestandteil eines profesionellen Deployments von Webapplikationen sind und wie man mithilfe der Selenium-IDE Tests erstellen kann.

Heute möchte ich euch zeigen, dass man verdammt schnell und sehr einfach einen Selenium Remote Control Server aufsetzen kann, und dieser mit einer ganzen Reihe von Sprachen direkt ansprechbar ist. In unserem Beispiel werden wir uns natürlich auf PHP konzentrieren.

Hier noch einmal die Artikelübersicht:

  1. Sinnvolle Tests erstellen
  2. Selenium Remote Control nutzen
  3. Tests automatisieren und in Unittest-Frameworks einbinden

Testumgebung

Bevor man einen RC-Server aufsetzen kann, muss man sich entscheiden, welche Browser man überhaupt testen will. Verzichtet man auf Nieschenbrowser wie Konqueror und Camino, so wird ein Windows Server ausreichen.

Nachdem alo der Windows Server breit steht, kann man sich von der Selenium-Seite direkt das RC-Paket holen, entpacken und den Server starten. Der Server wird im Verzeichnis selenium-server-xx liegen. Starten kann man ihn einfach mit dem Befehl java -jar selenium-server.jar. Standardmäßig startet Selenium RC auf Port 4444. Wünscht man einen anderen Port, so kann man diesen mit dem Schalter -port <wunschport> beim Starten einstellen. Das war es dann auch eigentlich schon. Nun müssen wir den Server nur noch ansprechen.

Einen Test an den RC-Server senden

Da ich in hier vornehmlich PHP-Themen behandle, wollen wir Tests natürlich auch mit PHP an den RC-Server senden. Selenium bietet einen Treiber für PHPUnit an. Dieses UnitTest-Framework wird mit PEAR ausgeliefert. Evtl. muss es nachinstalliert werden – wie das funktioniert erfahrt ihr auf der PHPUnit-Seite. Dann sollte eigentlich alles automatisch passieren.

Bis hier die Theorie. Während ich das alles ausprobiert habe, ist nicht die Bohne automatisch passiert. Ich musste alles nachbearbeiten, anpassen, Pfade- und Klassennamen korrigieren. Wenigstens der Server hat keine Faxen gemacht. Einzig Safari wollte nicht testen, aber der wird offiziell unter Windows ja auch nur mit „may work” aufgeführt.

Dazu muss ich gestehen, dass ich kein großer Freund von PHPUnit bin. Das liegt in erster Linie daran, dass es so fest in PEAR eingebacken ist – was ich auch nicht mag. Wie dem auch sei. Ich will Selenium für SimpleTest benutzen. Dazu schnappt ihr euch einfach die im RC-Archiv vorhandenen Selenium-PHP-Dateien und passt sie ein bischen an. Zunächst erweitert die Exception nicht mehr die PEAR-Exception. Darüberhinaus erweitert die Klasse Testing_Selenium die Klasse UnitTestCase erweitert. Dann baut ihr noch eine neue Methode ein:

    public function run(SimpleReporter $reporter) {
    	$this->start();
    	$return = parent::run($reporter);
    	$this->stop();
    	return $return;
    }

Und fertig. Die TestCases die ihr mit der Selenium-IDE erstellt könnt ihr nun aus der IDE als PHP herauskopieren und in eure Tests einfügen. Der Konstruktor rist eigentlich selbsterklärend. Wie man nun UnitTests schreibt, werde ich hier aber nicht mehr erklären ;-)

Und nun?

Im letzten Teil werde ich erklären, wie man die in PHP überführten Tests in seinen Deploymentprozess integrieren kann, wie man schnell ordentliche Tests schreibt und mittels Selenium Grid dafür sorgt, dass man automatisiert und ohne Performanceverlust und Bottleneck testen kann.

Ich hoffe ich konnte euch Selenium näher bringen. Sollten noch Fragen offen sein, so scheut nicht, die Kommentarfunktion zu bemühen ;-)

Geschrieben in Testing 2 Kommentare

#001
03. Aug 2009

Hallo Cem,

der dritte Teil lässt schon was länger auf sich warten. Kommt da noch was?

Viele Grüße,
Ingo.


#002
18. Dez 2009

Hi, der 3. Teil würde mich auch sehr interssieren.

// kommentieren

// senden
theme von mir, software von wordpress, grid von 960 grid system. funktioniert in allen browsern, aber der safari bekommt das mit der schrift am schönsten hin.