Implementierung eines Werkzeugs zur Kombination von Testfällen mit Eingabedaten
Betreuer: Dipl.-Wirt.-Inf. Michael Linschulte
Projektteam: Axel Balke
Benedikt Krüger
Christian Menke
Heinrich Drobin
Jahn Heymann
Magnus Kortenjann
Simon Waloschek
Inhaltsverzeichnis 2
Inhalt
• Einleitung• Realisierung• Test der Implementierung• Fallstudie• Fazit & Ausblick
Projektgruppe 4
3
Projektdefinition
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Selenium
HTMLTestcase Template
Testdatengenerator „ETES“
Testcase generator
tool
HTML
TC1
XML
Testdaten
HTML
TC2HTML
TC3
manuelle Bearbeitung
HTMLTestcase
HTML
TC..
4
Projektdefinition
Html<tr>
<td>select</td><td>arrival</td><td>label=01.11.2010</td>
</tr><tr>
<td>select</td><td>departure</td><td>label=07.11.2010</td>
</tr><tr>
<td>click</td><td>btn_submit</td><td></td>
</tr>
Xml
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
<DTable RefID="PID=3" Name="Suchmaske" ID="5"> <Actions No="0"> <Action Valid="true">btn_cancel</Action> <Action Valid="false" Error="Fehler">btn_submit</Action> <Data No="0"> <Feld Name=„Arrival“>label=01.11.2010</Feld> <Feld Name=„Departure">label=07.11.2010</Feld> </Data> <Data No="1"> <Feld Name=„Arrival“>label=01.02.2010</Feld> <Feld Name=„Departure">label=07.03.2010</Feld> </Data> ... </Actions></DTable>
<tr><td>select</td><td>arrival</td><td>$XML[Arrival]</td>
</tr><tr>
<td>select</td><td>departure</td><td>$XML[Departure].</td>
</tr><tr>
<td>click</td><td>$XML[btn_action]</td><td></td>
</tr>
<tr><td>select</td><td>arrival</td><td>$XML[Arrival]</td>
</tr><tr>
<td>select</td><td>departure</td><td>$XML[Departure].</td>
</tr><tr>
<td>click</td><td>$XML[btn_action]</td><td></td>
</tr><tr>
<td>assertAlert</td><td>Fehler</ td><td></td>
</tr>
<tr><td>select</td><td>arrival</td><td>$XML[Arrival]</td>
</tr><tr>
<td>select</td><td>departure</td><td>$XML[Departure].</td>
</tr><tr>
<td>click</td><td>$XML[btn_action]</td><td></td>
</tr>
5
Designentscheidungen
• als Framework• Programmaufbau
DOMSAXThreadOberfläche
GUI ReaderThread
QXmlSimpleReader
XMLHandler TestController TestCaseWriter
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
6
Die GUI
1. Pfadangaben2. Fortschrittsbalken3. Startet die
Bearbeitung4. Beendet das
Programm5. Eingabefeld für
Errortyp6. Statistik7. Debug Ausgabe
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
7
ReaderThread
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
DOMSAXThreadOberfläche
GUI ReaderThread
QXmlSimpleReader
XMLHandler TestController TestCaseWriter
8
ReaderThread
• Selbständiger Prozess• Über Signals & Slots mit der GUI verbunden– Qt System (ähnlich Events)
• Stellt Methoden bereit– Debug– Statistik– Fortschritt– Status
• Initialisiert XML Handler & QXmlSimpleReaderProjektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
9
XML Handler
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
DOMSAXThreadOberfläche
GUI ReaderThread
QXmlSimpleReader
XMLHandler TestController TestCaseWriter
10
XML Handler
• Eventhandler für QXmlSimpleReader– Liest XML-Datei elementweise ein
• Baut XML-Teilbaum auf• Beim Ende eines Actions-Block– Überprüfen des erstellten Teilbaums– Übergabe an TestController– Löschen des Blocks
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
11
TestController
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
DOMSAXThreadOberfläche
GUI ReaderThread
QXmlSimpleReader
XMLHandler TestController TestCaseWriter
12
Klasse TestController
• Aufgaben des TestControllers– HTML Template als QDomDocument einlesen– Teilbäume vom XML Handler für die Klasse
TestCase kombinieren
• Wichtige Funktionen des TestControllers– setTemplate liest das HTML Template ein– setActions erstellt Testfälle
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
13
Klasse TestController
Funktionsweise:XML-Reader TestController
TestCase 1
TestCase 2
TestCase 3<DTable RefID="PID=3" Name="Suchmaske" ID="5"> <Actions No="0"> <Action Valid="true">action1</Action> <Action Valid="false" Error="Fehler">action2</Action> <Data No="0"> <Feld Name="Key1">Value1</Feld> <Feld Name="Key2">Value2</Feld> </Data> <Data No="1"> ... </Data> ... </Actions></DTable>
<?xml version='1.0' encoding='UTF-8'?><Testcase No="0"> <Action>action 1</Action> <Data No="0"> <Feld Name="Key1">Value1</Feld> <Feld Name="Key2">Value2</Feld> </Data></Testcase>
<?xml version='1.0' encoding='UTF-8'?><Testcase No="0"> <Action>action 1</Action> <Data No=„1"> … </Data></Testcase>
<?xml version='1.0' encoding='UTF-8'?><Testcase No="0"> <Action Valid="false" Error="Fehler">action2</Action> <Data No="0"> <Feld Name="Key1">Value1</Feld> <Feld Name="Key2">Value2</Feld> </Data></Testcase>
…
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
14
Testcasewriter
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
DOMSAXThreadOberfläche
GUI ReaderThread
QXmlSimpleReader
XMLHandler TestController TestCaseWriter
15
Klasse Testcasewriter
• Aufgabe des Testcasewriters– XML Daten in HTML Template einfügen– HTML Testfälle im Ausgangsordner abspeichern
• Aufbau des Testcasewriters– Konstruktor erzeugt neuen Testfall– Zwei private Unterfunktionen• replaceData (QDomNodeList pList)• getXMLData (QString pFieldName)
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
16
Klasse Testcasewriter
Für alle Elemente in der Liste
Liste erstellen Liste durchlaufen
Enthält Element Text mit $XML[…]
Enthält Element Kinder
$XML Feld Ersetzen
ja
ja
nein
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
17
Testumgebung
• Unittests: Test von einzelnen Methoden im Programmcode
→ White Box Test, hier nicht realisierbar
• Anwendung von Black Box Test
• Code-Coverage: Messung des Abdeckungsgrades des Codes
→ Kein wirklicher Test, sondern nur Maß für die Güte des Tests
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
18
Code Coverage
• Überwachung der Ausführung pro Zeile (Anweisungsüberdeckung; C0 Test)– Finden von nicht ausgeführtem Code
• 100%ige Überdeckung bedeutet nicht Fehlerfreiheit
• Fehlende Überdeckung bedeutet unzureichende Tests
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
19
Code Coverage
Methode: Überdeckungsgrad:
main.cpp 100.00%
mainwindow.cpp 94,44%
readerthread.cpp 88,64%
testcasewriter.cpp 93,59%
testcontroller.cpp 98,11%
xmlhandler.cpp 98,33%
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
14 Testfälle wurden aufgestellt und durchgeführt
20
Code Coverage
• Die Testfälle wurden soweit modifiziert, dass Errors auftreten und somit die Abfangmethoden ebenfalls durchgeführt werden müssen
• Beispiel eines nicht ausgeführten Codefragments: #####: 76:void ReaderThread::statusTxt(QString statusTxt) -: 77:{ #####: 78: emit writeStatus(statusTxt); #####: 79:}
• Inkorrekte Pfadangaben werden beim Template nicht abgefangen.
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
21
Fallstudie in Iselta
• Nutzen des Tools beim Testen von Webseiten mittels „Selenium“
• Alle Testfälle werden im optimalen Fall positiv abgeschlossen
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
22
Fallstudie - Szenario 1
Buchungsdaten – Formular in Iselta
gültige Eingaben• Zeichenketten• Zeichenketten nach
speziellem Schema• Zahlen
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
23
Fallstudie - Szenario 1
Demonstration
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
24
Fallstudie - Szenario 1
Ergebnis des ersten Szenarios in Selenium
fehlerhafte Eingabe
nicht aufgetretene
Fehlermeldung
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
25
Fallstudie - Szenario 1
• Alle negativ abgeschlossen Tests haben die gleiche Ursache:
Zeichenketten, welche nur Sonderzeichen beinhalten werden als valide Eigennamen von Iselta akzeptiert
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
26
Fallstudie - Szenario 2
Hoteldaten – Formular in Iselta
gültige Eingaben• Zeichenketten• Ganze Zahlen• Kommazahlen
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
27
Fallstudie - Szenario 2
Hoteldaten – Formular in Iselta
fehlerhafte Eingabe
nicht aufgetretene
Fehlermeldung
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
28
Fallstudie - Szenario 2
• Alle negativ abgeschlossen Tests haben wieder die gleiche Ursache:
Zeichenketten, welche nur Sonderzeichen beinhalten werden als valide Bezeichnungen (bzw. Eigennamen) von Iselta akzeptiert
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
29
Fallstudie - Fazit
• Iselta prüft bei beiden getesteten Szenarien Zeichenketten nicht auf semantische Korrektheit
• Das Tool kann Testfälle generieren, welche Fehler entdecken und lokalisieren können
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
30
Fazit & Ausblick
• Tool erleichtert das Erstellen von Testfällen• Problem: Nur für eine Formularseite– Lösung: Erweiterte Platzhalter z.B.
$XML.<Nr>[<Variable>]
Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Ende 31
Vielen Dank für Ihre Aufmerksamkeit!
Projektgruppe 4
Top Related