4
PENTASYS-Blickpunkte Webanwendungen automatisiert testen Webanwendungen automatisiert testen Selenium & JUnit – ein perfektes Tandem Bei der Entwicklung von Webanwendungen muss neben der Logik im Backend die Benutzerober- fläche getestet werden. Häufig geschieht dies durch manuelle Tests. Mit Hilfe von sogenannten Capture&Replay Tools kann man diese Aufgabe automatisieren. Selenium ist eine Open Source-Test- umgebung, die neben der Capture&Replay-Funktionalität ein API für unterschiedliche Programmier- sprachen wie Java, C# und Ruby bereitstellt. Somit lassen sich Tests für Webanwendungen auch programmieren. Nutzt man darüber hinaus ein Unittest-Framework wie JUnit unter Java, ergibt dies eine mächtige Kombination für die Testautomatisierung. Selenium ist ein System zum Test von Webseiten und -anwendungen. Die Entwicklung begann im Jahr 2004 bei der Firma ThoughtWorks. Ein Mitarbeiter entwi- ckelte ein System für den automatischen Test der inter- nen Zeiterfassung. Schnell verbreitete es sich innerhalb der Firma und bald wurde entschieden, Selenium unter OpenSource-Lizenz auch außerhalb von ThoughtWorks bereitzustellen. Seitdem wird es von der Community weiterentwickelt. Selenium ist plattformunabhängig und läuft unter Windows, Unix/Linux uns MacOS. Es besteht aus einer Reihe von Komponenten, mit denen es möglich ist, beliebig komplexe Tests von Webanwendungen zu automatisieren. Die Komponenten sind: Selenium WebDriver Selenium WebDriver stellt die Schnittstelle zu den verschiedenen Browsern dar. Selenium WebDriver nimmt Befehle entgegen und schickt diese an den Brow- ser. Umgesetzt ist dies durch den browserspezifischen Treiber, welcher die Befehle an den Browser schickt und die Ergebnisse empfängt. Die meisten Browsertrei- ber starten die Browseranwendung und greifen auf die laufende Instanz zu (z. B. Firefox und Internet Explorer). Abbildung 1: Selenium Remote Control (Quelle: www.seleniumhq.org)

Webanwendungen automatisiert testen - pentasys.de · Selenium & JUnit – ein perfektes Tandem ... programmieren. Nutzt man darüber hinaus ein UnittestFramework wie JUnit unter Java,

  • Upload
    vonhi

  • View
    223

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Webanwendungen automatisiert testen - pentasys.de · Selenium & JUnit – ein perfektes Tandem ... programmieren. Nutzt man darüber hinaus ein UnittestFramework wie JUnit unter Java,

PENTASYS-Blickpunkte

Web

anw

end

un

gen

au

tom

atis

iert

tes

ten

Webanwendungen automatisiert testenSelenium & JUnit – ein perfektes Tandem

Bei der Entwicklung von Webanwendungen muss neben der Logik im Backend die Benutzer ober­fläche getestet werden. Häufig geschieht dies durch manuelle Tests. Mit Hilfe von sogenannten Capture&Replay Tools kann man diese Aufgabe automatisieren. Selenium ist eine Open Source­Test­umgebung, die neben der Capture&Replay­Funktionalität ein API für unterschiedliche Program mier­sprachen wie Java, C# und Ruby bereitstellt. Somit lassen sich Tests für Webanwendungen auch programmieren. Nutzt man darüber hinaus ein Unittest­Framework wie JUnit unter Java, ergibt dies eine mächtige Kombination für die Testautomatisierung.

Selenium ist ein System zum Test von Webseiten und ­anwendungen. Die Entwicklung begann im Jahr 2004 bei der Firma ThoughtWorks. Ein Mitarbeiter entwi­ckelte ein Sys tem für den automatischen Test der inter­nen Zeiterfassung. Schnell ver brei tete es sich innerhalb der Fir ma und bald wurde entschieden, Se le ni um unter OpenSource­Lizenz auch außerhalb von ThoughtWorks be reit zustellen. Seitdem wird es von der Community weiterentwickelt.

Selenium ist plattformunabhängig und läuft unter Win dows, Unix/Linux uns MacOS. Es besteht aus einer Reihe von Komponenten, mit denen es möglich ist, beliebig komplexe Tests von Webanwendungen zu auto matisieren. Die Komponenten sind:

Selenium WebDriver

Selenium WebDriver stellt die Schnittstelle zu den verschiedenen Browsern dar. Selenium WebDriver nimmt Befehle entgegen und schickt diese an den Brow­ser. Umgesetzt ist dies durch den browser spezifischen

Treiber, welcher die Befehle an den Brow ser schickt und die Ergebnisse emp fängt. Die meisten Browsertrei­ber starten die Browseranwendung und greifen auf die laufende Instanz zu (z. B. Firefox und Internet Explorer).

Abbildung 1: Selenium Remote Control (Quelle: www.seleniumhq.org)

Page 2: Webanwendungen automatisiert testen - pentasys.de · Selenium & JUnit – ein perfektes Tandem ... programmieren. Nutzt man darüber hinaus ein UnittestFramework wie JUnit unter Java,

2 PENTASYS­Blickpunkte

Mit WebDriver werden bei der Test durchführung die jeweiligen Brow ser quasi „ferngesteuert“, was eine Automatisierung erst möglich macht.

Selenium Remote Control

Selenium Remote Control ist ein Ser ver, der Befehle von den Testprogram­men entgegennimmt, diese aus führt und die Testergebnisse zu rück liefert. Dabei werden unterschiedliche Programmiersprachen un ter stützt. Die Abbildung 1 stellt die Funktionsweise dar.

In Selenium 2 wurde Remote Control von WebDriver abgelöst, wird aber weiterhin unterstützt, da noch nicht alle Features in Selenium 2 verfügbar sind.

Selenium Grid

Mit Selenium Grid lässt sich ein Server cluster aufbauen, das es er mög­licht, bei Tests Webbrowserinstanzen auf anderen, entfernten Rech nern zu nutzen. In diesem Clus ter agiert ein Server als Hub. Tests rufen die verschiedenen Browserinstanzen über diesen Hub auf. Dieser hat eine Liste von Servern, die den Zugriff auf die Browser­In stan zen (WebDriver nodes) er mög lichen und lässt die Tests die se In stan zen nutzen.

Selenium Grid ermöglicht den parallelen Test auf mehreren, verteilten Rech­nern gleichzeitig. Darüber hinaus kann man somit verschiedene Browser­versionen und ­konfigurationen zentral verwalten und muss dies nicht an jedem Einzeltest festhalten.

Selenium IDE

Die Selenium IDE ist eine komplette Entwicklungsumgebung für Selenium. Sie wurde als Plug­In für den Fire fox­Browser realisiert. Mit ihrer Hilfe ist es möglich, Tests aufzuzeichnen, zu bearbeiten, zu debuggen und natürlich ablaufen zu las sen. Wie in anderen Testsystemen auch lassen sich einzelne Testfälle zu Testsuiten zusammenfassen.

Die Testfälle bestehen da bei aus einer Abfolge von ein zel nen Kommandos, die zu sam men ein Testskript er ge ben. Die Kommandos wer den auch als „Selenese“ be zeich net.

Abbildung 2: Selenium IDE.

Page 3: Webanwendungen automatisiert testen - pentasys.de · Selenium & JUnit – ein perfektes Tandem ... programmieren. Nutzt man darüber hinaus ein UnittestFramework wie JUnit unter Java,

PENTASYS­Blickpunkte 3

JUnit

Zu JUnit braucht man eigentlich gar nichts mehr sagen, ist es doch mittler­weile das State­of­the­Art Unit­Testframework in der Java­Entwicklung. Mit JUnit lassen sich speziell kleine Softwareeinheiten – Units – testen. Diese Unit­Tests werden ebenfalls in Java programmiert und lassen sich damit automatisiert durchführen, zum Beispiel im Build­Prozess oder im Kontext Continuous Integration. Mehrere einzelne Unittests lassen sich zu Test­ suiten zusammenfassen. Vorgehensmodelle wie die testgetriebene Ent­ wicklung (Test driven development, TDD) sind durch Unit­Testframeworks erst richtig effizient einsetzbar.

Zusammen sind sie stark

Mit der Kombination aus Selenium und JUnit erhält man ein flexibles, leistungsfähiges Testsystem für den automatisierten Oberflächentest von Webanwendungen. Die Selenium IDE macht die Arbeit dafür sehr leicht. Sie bietet eine Exportfunktionalität ins JUnit­Format an. Das Ergebnis des Exports ist der aufgezeichnete Testfall als JUnit TestCase.

Das Vorgehen ist denkbar einfach: Mit Hilfe der Selenium IDE werden die Testfälle aufgezeichnet und ggf. gespeichert. Nun werden die Testfälle mittels der Exportfunktionalität in das JUnit­Format exportiert – es wird also eine Java­Klas se erzeugt. Diese kann man nun in seiner Java­IDE öffnen und weiterbearbeiten. Parametrisierung, Schleifen, Alerts, Logging – al le Mög lichkeiten von Java im Allge mei nen und JUnit im Speziel len ste hen einem offen.

Für den Export aus der Seleni um IDE nach Java lassen sich verschieden Optionen und Templates hinter legen. Somit kann man den Export an seine Bedürfnisse an pas sen und Standard aufgaben wie das Initialisieren von externen Res sour cen mit einbinden.

Abbildung 3: Export aus der Selenium IDE Abbildung 4: Selenium IDE Optionen für den JUnit­ Export

Page 4: Webanwendungen automatisiert testen - pentasys.de · Selenium & JUnit – ein perfektes Tandem ... programmieren. Nutzt man darüber hinaus ein UnittestFramework wie JUnit unter Java,

Web

anw

end

un

gen

au

tom

atis

iert

tes

ten

PENTASYS AGRüdesheimer Straße 980686 MünchenTel.: + 49 89 5 79 52 0

PENTASYS AG, Geschäftsstelle FrankfurtSolmsstraße 4160486 Frankfurt am MainTel.: + 49 69 70 79 83 9 0

PENTASYS AG, Geschäftsstelle KölnDülkenstraße 951143 KölnTel.: + 49 22 03 93 54 87 6

PENTASYS SAS, Geschäftsstelle Paris1, Passage du Génie75012 ParisTel.: + 33 (0)1 76 36 02 90

redaktion@blickpunkte.dewww.pentasys.dewww.pentasys.frwww.pentasys.co.uk

© 2013 P

EN

TAS

YS

AG

. Stand Juni 2013

Die Blickpunkte sind ein kostenloser Newsletter der PENTASYS AG.

Die ISO­9001/2008 zertifizierte PENTASYS AG gehört zu den am schnellsten wach sen den deutschen IT­Systemintegratoren. 1995 gegründet, beschäftigt das Un ter nehmen heute 350 IT­Professionals. Die Unternehmensstrategie ist auf kom pro misslose Qualität und strikte Orientierung am Mehrwert für die Kunden aus ge rich tet. Hochqualifizierte und überdurchschnittlich motivierte Mitarbeiter so wie ein bewährtes Projektvorgehensmodell schaffen die Voraussetzungen hier­für. Zum Leistungsspektrum gehören Consulting, Projektmanagement, Mach bar­keits analyse, Architekturkonzeption, Realisierung und Test von IT­Systemen aus einer Hand.

Sämtliche Inhalte des Newsletters, auch Konzepte und Design, sind urheber recht­lich geschützt. Das Copyright/Urheberrecht liegt bei der PENTASYS AG.

Testsuiten

Die einzelnen Testfälle kann man wie in JUnit gewohnt zu Testsuiten zusam­menfassen und somit komplexe Szenarien abbilden. Durch die Verwen­dung von JUnit lassen sich Webtests beispielsweise auch in Continuous Integration­Systeme einbinden. Damit lassen sich kontinuierliche Oberflä­chentests automatisch durchführen. Da Selenium ein API für verschiedene Programmiersprachen anbietet, funktioniert das hier vorgestellte Vorgehen auch mit C# und NUnit, Ruby und Test::Unit bzw. RSpec sowie Python und unittest.

Abbildung 5: Aus Selenium exportierter JUnit Testcase

@Before

public void setUp() throws Exception {

driver = new FirefoxDriver();

baseUrl = „http://www.google.de/“;

driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);

}

@Test

public void testSelenium() throws Exception {

driver.get(baseUrl + „/“);

driver.findElement(By.id(„gbqfq“)).clear();

driver.findElement(By.id(„gbqfq“)).sendKeys(„selenium“);

driver.findElement(By.id(„gbqfb“)).click();

driver.findElement(By.linkText(„Selenium - Web Browser Automation“)).click();

}

@After

public void tearDown() throws Exception {

driver.quit();

String verificationErrorString = verificationErrors.toString();

if (!““.equals(verificationErrorString)) {

fail(verificationErrorString);

}

}

Über den Autor

Manfred Schlaucher ist als Projektleiter für PENTASYS tätig. Seine fachlichen Schwerpunkte liegen bei Architek­tur, Projektvorgehen und Projektmanagement. Als Certified Scrum Master und PMP ist er sowohl in klassischen, als auch agilen Projekten zuhause.