Automagick Tests mit Selenium

Automagick Tests mit Selenium

photo credit: Stéfan via photopin cc
photo credit: Stéfan via photopin cc

Immer komplexer werdende Software sollte getestet werden, so dass vor der Auslieferung oder einem Deployment einer Webapplikation das bisherige Verhalten sichergestellt ist. Diese Sicherstellung sollte nicht erst beim Kunden stattfinden, sondern im Optimalfall weit vor der produktiven Auslieferung neuer Features stattfinden. Normalerweise werden neue Features von einer Fachabteilung oder in einer SCRUM Umgebung vom Auftraggeber bzw. dem Productowner abgenommen aber nicht immer das Gesamtsystem betrachtet.

Bei Regressionstests reagiert man bei einer neuen Version mit neuen Features darauf, dass die ursprüngliche Funktionalität gewährleistet bleibt. Neue Features können wieder in Regression genommen werden und mit der Zeit ergeben sich eine Menge von automatisch ablaufenden Tests. Dies können nicht immer alles abdecken, aber zu einem hohen Grad eine Aussage darüber liefern, ob die Funktionsweise der Software vor einem Rollout sichergestellt ist.

Diese Tests können auf xUnittests aufbauen, die kleine Codeeinheiten abdecken. Solche Tests werden zu größeren Paketen zusammengefasst, um verschiedene voneinander unabhängige Einheiten in Kombination und in einem größeren Kontext zu testen.

Auf höchster Ebene stehen Obeflächentests, die Nutzerverhalten simulieren und eine Aussage darüber liefern, ob eine bestimmte Wegstrecke einer Applikation vom Benutzer genutzt werden kann, wie ursprünglich definiert.

Was ist Selenium und was kann man damit anstellen

Mit Selenium ist es möglich den Browser zu steuern und Abläufe zu wiederholen. Normalerweise wird dieses Framework dazu verwendet Web Applikationen und dessen Oberfläche zu testen. Dabei können diese Tests bereits funktionierende Features vor einem Deployment verifizieren und so festgestellt werden, dass neue Features keine negativen Einflüsse auf das System haben.

Eigenes Framework welches auf Selenium basiert

Es ist möglich auf Selenium aufbauend eine Bibliothek bzw. ein Framework zu schreiben, welches die Funktionalität abbildet, die auch ein User im Stande ist auf der Webapplikation zu vollführen. Normalweise wird der Kern der Applikation in Tests abgebildet, die letzendlich der Sinn und Zweck einer Webapplikation ist und warum ein User die Applikation bedienen will. Dieser Zweck kann beispielsweise sein ein Produkt auf der Applikation auszuwählen und diese im Warenkorb abzulegen mit dem Ziel ein Produkt oder Service zu Kaufen. Solche Tests können in Regression regelmäßig vor dem Ausrollen neuer Versionen oder in Nightly Builds durchgeführt werden.

Als Vorbedingunen in einer Build Pipeline vor der Ausführung von Oberflächentests können automatische Unittests dienen, die in einer Continuous Integration Umgebung eingebettet werden.

Weitere Anwendungsmöglichkeiten

Natürlich ist Selenium nicht unbedingt auf das Testing beschränkt. Das Framework kann zur Automatisierung von Aufgaben genutzt werden, um zum Beispiel immer wiederkehrende Arbeitschritte parametrisiert durchzuführen. Ein Beispiel kann sein, einen neuen Benutzer in einem Forum zu erstellen oder in WordPress neue Plugins automatisch zu aktualisieren. Es gibt viel Potenzial und Ideen, um Selenium zu nutzen.

Selenium IDE oder doch Tests selber schreiben

Selenium IDE als Firefox Plugin

Die ersten Naiven Ansätze, die ich mittels Selenium durchgeführt habe waren Obeflächentests mit Hilfe von Selenium IDE. Bei Seleinum IDE handelt es sich um einen Firefox Plugin, mit dessen Hilfe bestimmte Abläufe auf einer Seite aufgezeichnet werden können. Diese Aufzeichnungen können jederzeit wieder ausgeführt werden, dies allerdings nur innerhalb von Firefox. Solche Tests eignen sich somit nicht für übergreifende Verifizierungen auf verschiedenen Browsern.

Um dennoch ein Gefühl für die Technoligie zu bekommen, kann die Firefox IDE von Selenium aber eine erste Ausgangsbasis darstellen. Auch um z.B. die Stakeholder eines Projekts für mehr Qualität zu begeistern und die Möglichkeiten mit wenig Aufwand aufzuzeigen.

Selenium API

Um Regressionstests zu schreiben, die auf verschiedenen Umgebungen wie z.B. verschiedenen Betriebssystemen oder Browsern in Kombination zu testen, eignet sich das Firefox Plugin nicht. Um das trotzdem zu erreichen, kann die Selenium API angesprochen werden, um programmatisch das gewünschte Verhalten zu generieren. Die Selenium API lässt sich mittels verschiedener Programmiersprachen ansprechen und ist nicht auf Java beschränkt, obwohl das Framework in Java geschrieben ist. So ist es neben Java auch Python, PHP, Ruby, C#, Perl oder JavaScript möglich, automatische Tests zu definieren und auszuführen.

So kann die Businesslogik einer Anwendung beispielsweise in Java geschrieben sein und die Definition der Tests in Python. So kann der Testaufwand verringert werden, da Programmiersprachen mit Höherer Abstraktion und Aufgrund Ihrer Dynamik zu schnelleren Ergebnissen führen können. Mit Java und Spring oder C# ist es ebenfalls möglich Tests zu schreiben, wenn das Entwicklungsteam diese Vorgehensweise als sinnvoll betrachtet und keine Erfahrung oder Skills mit Skriptsprachen vorherrschen.

Um also wiederverwendbare Tests zu erhalten, eignet sich die Selenium API mit dessen Hilfe ein einfaches darauf aufbauendes Framework erstellt werden kann, dass sich perfekt an die zu testende Applikation anpasst und nach jedem Inkrement erweitert wird, um mit der Zeit eine höhere Testabdeckung zu erhalten.

Wie ist Deine Erfahrung mit Selenium? Hast Du evtl. schon mal ein Framework auf Basis von Selenium geschrieben? Bitte hinterlasse hier Deine Meinung und Teile Deine Erfahrung mit uns.

Vielen Dank und viele Grüße

Andrés

Quellen

Selenium: http://www.seleniumhq.org/
Selenium IDE: http://docs.seleniumhq.org/projects/ide/
Selenium mittels Python: http://selenium-python.readthedocs.org/
Regression testing: http://searchsoftwarequality.techtarget.com/definition/regression-testing
Sinn und Unsinn von Testautomatisierung: http://www.bernhardwilmer.de/sinn-und-unsinn-testautomatisierung/
Integrationstests: http://de.wikipedia.org/wiki/Integrationstest
Dynamisch vs. statisch : http://www.lesscode.de/2010/06/10/statische-vs-dynamische-typisierung-overengineering-im-kleinen/

1 Comment


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.