Automatisiertes Testen von Webanwendungen mit Selenium und

Werbung
Automatisiertes Testen von
Webanwendungen mit Selenium
und Watij
Sebastian Westkamp
Seminar – Ausgewählte Themen des Softwareengineering
Agenda
Motivation
Selenium
Watij
Bewertung sowie Vergleich von Selenium und Watij
1
Agenda
Motivation
Selenium
Watij
Bewertung sowie Vergleich von Selenium und Watij
2
Motivation
Webanwendungen sind komplexe und vollwertige
Softwaresysteme
Qualität der Anwendungen ist sehr wichtig
Die wichtigste Qualitätssicherungsmaßnahme ist das
Testen
Das Testen nimmt zwischen 25% und 50% der gesamten
Entwicklungsarbeit und –kosten in Anspruch
Tools sollen helfen ein effektives und effizientes Testen
zu gewährleisten; ohne Werkzeugunterstützung ist ein
Testen nicht mehr möglich
3
Agenda
Motivation
Selenium
Selenium Core
Selenium IDE
Selenium Remote Control
Watij
Bewertung sowie Vergleich von Selenium und Watij
4
Selenium
Werkzeug für das Testen von Webanwendungen
Steuerung des Browsers mittels JavaScript
Unterschiedlicher JavaScript-Code für verschiedene
Browser vorhanden
Selenium wurde von ThoughtWorks entwickelt, ist
heute Open-Source und unter Apache 2.0 lizenziert
Selenium gibt es in mehreren Varianten
Selenium Core
Selenium IDE
Selenium Remote Control
5
Agenda
Motivation
Selenium
Selenium Core
Selenium IDE
Selenium Remote Control
Watij
Bewertung sowie Vergleich von Selenium und Watij
6
Selenium Core
Muss auf dem Webserver der zu testenden
Webanwendung installiert werden
Erstellung von Testfällen mittels der Sprache Selenese
Testfälle können in Test-Suites zusammengefasst
werden
Zum Ausführen werden die Testfälle auf den Webserver
kopiert
Ausführung mittels Aufruf des TestRunners über den
Browser auf der Client-Seite
Einbettung der Test-Engine in die Webseite mittels
JavaScript und iFrames
7
TestRunner Oberfläche
8
Selenese
Testfälle sind Tabellen in HTML-Dokumenten
HTML-Tabelle mit 3 Spalten und n Zeilen
Die erste Spalte enthält das Kommando, die beiden
folgenden die Argumente
Zeilen mit weniger als 3 Spalten werden ignoriert und
können als Kommentar verwendet werden
Selenese besteht aus:
Aktionen
Zusicherungen
Element Lokatoren
Variablen
9
Selenese
Aktionen manipulieren den Zustand einer
Webanwendung (click, open, type), Suffix „AndWait“
Nach Ausführung von Aktionen untersuchen
Zusicherungen den Zustand einer Webanwendung
Element Lokatoren:
id=
name=
identifier=
dom=JavaScript-Ausdruck
xpath=XPath-Ausdruck
link=Text
css=Css-Selector-Syntax
10
Selenese
Variablen: Speichern von Werten und deren Einsatz in
den Actions
Möglichkeit eigene Aktionen, Zusicherungen und
Lokatoren zu schreiben
JavaScript-Code muss hierzu in der user-extensions.js
hinterlegt werden
Mögliche Erweiterung: Hinzufügen der Steuerung von
Flash-Objekten
11
Beispiel-Testfall
12
Beispiel-Testfall
13
Beispiel-Testfall
14
Beispiel-Testfall
15
Beispiel-Testfall
16
Beispiel-Testfall
17
Beispiel-Testfall in Selenese
Wird noch hinzugefügt
18
Grenzen von Selenium Core
Muss auf dem Webserver der Webanwendung installiert
sein; Testfälle müssen hierhin kopiert werden
Sicherheitsbeschränkungen von JavaScript
Same Origin Policy verbietet es, dass Dokumente und
Skripte, die aus einer Quelle stammen, Eigenschaften
eines Dokumentes aus einer anderen Quelle auslesen
oder verändern
Quelle wird bestimmt durch die Parameter:
Domainname, Port und Protokoll
Weiteres Problem: Hochladen von Dateien
Umgehungsmöglichkeiten
19
Agenda
Motivation
Selenium
Selenium Core
Selenium IDE
Selenium Remote Control
Watij
Bewertung sowie Vergleich von Selenium und Watij
20
Selenium IDE
Firefox Plugin
Erlaubt das Aufnehmen, Editieren und Debuggen von
Tests
Aufnahme der Tests durch Benutzen des Firefox
Automatische Generierung des Selenese-Quellcodes
Speicherung des Testfalles als HTML-Datei in Selenese
oder Exportierung in die Sprachen: Java, C#, Perl, PHP,
Python, Ruby
Aufgenommene Testfälle können schrittweise oder
mittels Breakpoints durchlaufen werden
21
Selenium IDE Oberfläche
22
Selenium IDE
Durch Verwendung von chrome können die
Sicherheitsrestriktionen von JavaScript umgangen
werden
Selenium IDE ist durch die Sprache Selenese
beschränkt:
Keine Unterstützung von Schleifen
Kein Zugriff auf Dateien, die nicht über den Browser erreichbar sind
23
Agenda
Motivation
Selenium
Selenium Core
Selenium IDE
Selenium Remote Control
Watij
Bewertung sowie Vergleich von Selenium und Watij
24
Selenium Remote Control
Besteht aus 2 Teilen:
Selenium Server
Selenium Client-Treiber
Selenium Server kann Browser kontrollieren, sie starten,
stoppen und den Proxy einstellen; ist in Java
geschrieben
Interaktiver Modus
25
Funktionsweise
26
Selenium RC Oberfläche
27
Browser Launcher
Verschiedene Arten:
Standard: firefox, iexplore, safari, opera
custom
Experimentelle: chrome, iehta
28
Testbeispiel in Java
private Selenium selenium;
public void setUp() {
selenium = new DefaultSelenium("localhost", 4444, "*firefox",
"http://localhost");
selenium.start();
}
public void testMerkmal() throws Exception {
selenium.open("/herbie/");
selenium.type("loginName", "admin");
selenium.type("password", "admin");
selenium.click("//input[@value='Submit']");
selenium.waitForPageToLoad("30000");
assertTrue(selenium.isTextPresent("Herzlich Willkommen auf der HerbiePlattform"));
selenium.click("link=Serviceverwaltung");
selenium.waitForPageToLoad("30000");
selenium.click("link=Merkmal neu anlegen");
selenium.waitForPageToLoad("30000");
assertTrue(selenium.isTextPresent("Neues Merkmal anlegen"));
29
Testbeispiel in Java
selenium.select("scaling", "label=qualitativ");
selenium.waitForPageToLoad("30000");
selenium.type("createCharacName", "Qualitätsstufe");
selenium.click("selectedScaleId");
selenium.selectFrame("charTree");
selenium.click("//img");
selenium.waitForPageToLoad("30000");
selenium.click("link=Qualität");
selenium.selectFrame("relative=up");
selenium.click("document.phoenixAdminServiceForm.elements[10]");
selenium.waitForPageToLoad("30000");
assertTrue(selenium.isTextPresent("Qualitätsstufe"));
selenium.click("qualValueToDelete[2]");
selenium.click("//input[@value='Zuweisung löschen']");
selenium.waitForPageToLoad("30000");
assertTrue(selenium.isTextPresent("Merkmalszuweisung wurde erfolgreich
gelöscht"));
selenium.click("link=Abmelden");
selenium.waitForPageToLoad("30000");
assertTrue(selenium.isTextPresent("Sie wurden erfolgreich vom System
abgemeldet"));
}
30
Agenda
Motivation
Selenium
Watij
Bewertung sowie Vergleich von Selenium und Watij
31
Watij
Web Application Testing in Java
API, mit dessen Hilfe der Internet Explorer kontrolliert
und automatisiert werden kann, um Webanwendungen
zu testen
Ursprung: Watir
Watij bedient sich der Java COM-Bridge Jacob
Verschiedene Möglichkeiten um Elemente zu finden:
Symbole (name, id, value, src)
Finder
XPath
Vorkonfigurierte BeanShell enthalten
32
BeanShell
33
Testbeispiel
private IE ie;
public void setUp() throws Exception{
ie = new IE();
ie.start("http://localhost/herbie");
}
public void testMerkmal() throws Exception {
ie.textField(name, "loginName").set("admin");
ie.textField(name, "password").set("admin");
ie.button("Submit").click();
assertTrue(ie.containsText("Herzlich Willkommen auf der Herbie-Plattform"));
ie.link("Serviceverwaltung").click();
ie.link("Merkmal neu anlegen").click();
assertTrue(ie.containsText("Neues Merkmal anlegen"));
ie.selectList(name, "scaling").selectValue("qualitativ");
ie.textField(name, "createCharacName").set("Qualitätsstufe");
ie.radio(name, "selectedScaleId").set();
34
Testbeispiel
Frame iFrame = ie.frames().get(0);
iFrame.images().get(0).click();
iFrame.link("/Quali/").click();
ie.button("Merkmal speichern").click();
ie.checkbox(name, "qualValueToDelete[2]").set();
ie.button("Zuweisung").click();
assertTrue(ie.containsText("Merkmalszuweisung wurde erfolgreich"));
ie.link("Abmelden").click();
assertTrue(ie.containsText("Sie wurden erfolgreich vom System abgemeldet"));
}
35
Agenda
Motivation
Selenium
Watij
Bewertung sowie Vergleich von Selenium und Watij
36
Selenium Übersicht
37
Browser Unterstützung
Selenium
IDE
Nur FF
Selenium
RC
Viele
Selenium Selenium
Core
Core HTA
Alle
Nur IE
Installation auf dem Webserver
Unterstützt HTTPS/ SSL
Unterstützt mehrere Domains
Benötigt Java
Testergebnis-Speicherung
Unterstützte Sprachen
Nein
Ja
Ja
Nein
Nein
Selenese
Nein
Ja
Ja
Ja
Ja
Viele
Ja
Ja
Nein
Nein
Nein
Selenese
Nein
Ja
Ja
Nein
Ja
Selenese
Selenium
Verwendung von XPath zur Elementlokalisierung
Unterschiedliche XPath-Implementierungen in Browsern
Notwendigkeit des waitForPageToLoad-Kommandos
Unterstützung von Uploads, Downloads und JavaScriptConfirmations ergibt geteiltes Bild
Rudimentäres Logging
Einfache Erweiterbarkeit mittels user-extensions.js
Sicherheitsrestriktionen behindern und erschweren den
Einstieg
38
Watij
Elemente einer Seite sind als Objekte ansprechbar
Sprachabhängigkeit bei Dialogen und beim Finden von
Elementen
Effizienteres Programmieren mittels ie.attach
Die „Seite-geladen-Erkennung“ funktioniert nicht
reibungslos
Schlechte API-Dokumentation
Einfacher Einstieg
39
Gemeinsamkeiten
Beide Tools sind Open-Source und damit in der
Anschaffung kostenlos
Rote Balken traten vor allem beim Nichtfinden von
HTML-Elementen auf
Beide Tools haben noch Fehler und Schwierigkeiten in
der Bedienung
Weiterentwicklungen: Reality QA und FireWatir
40
Fazit
Selenium testet die Webanwendung und besonders die
Browserkompatibilität sowie Plattformabhängigkeit
Watij testet die Webanwendung mit Hilfe des
meistgenutzten Browsers auf dem meistgenutzten
Betriebssystem für Endnutzer
41
Ende
Vielen Dank für die Aufmerksamkeit!
Fragen?
42
Herunterladen