XML testen / Selenium

Selenium

Selenium

➪ Selenium ist ein Testframework, das in erster Linie für das automatisierte Testen von HTML-Seiten verwendet wird.

Nehmen Sie der Einfachheit halber an, eine Quelldatei beliebiger Form wurde in ein XML-Dokument "output.xml" konvertiert. Nun soll mit einem detaillierten Soll-Ist-Vergleich von Einzelwerten geprüft werden, ob die Transformation korrekt gearbeitet hat.

Durchaus sinnvoll, aber für meine Zwecke nicht hinreichend ist eine XML-Validierung nach DTD oder XML-Schema, die lediglich Element- oder Attributnamen und Strukturen prüfen. Auch eine erweiterte Typprüfung in XML-Schema mit exakt definierten Patterns garantiert keine Korrektheit im Detail.

Als Ausweg bietet sich ein Verfahren an, ein Beispiel-XML-Dokument (nennen Sie es "expectedresults.xml") zu definieren, das ein vollständiges Abbild der erwarteten "output.xml" darstellt.

Theoretisch könnte ein Soll-Ist-Vergleich in einfachster Form durch einen simplen Dateivergleich geschehen. Mit einem geeigneten Tool vergleicht man zwei Dateien direkt miteinander und reportet die Unterschiede. Sind jedoch unterschiedliche Ergebnisse zu erwarten (etwa wenn nur ein Teil der Fälle geprüft werden soll oder wenn die Tests teilweise auf regulären Ausdrücken basieren), dann ist dieses Verfahren nicht ausreichend.

Flexibler ist es, die XPath-Pfade sämtlicher Elemente und Attribute von "expectedresults.xml" in Testcases aufzulisten, die in einem geeigneten Testframework ausgeführt werden können. Dieses Testframework kann daraufhin "output.xml" detailliert untersuchen, ob der Textinhalt der jeweiligen Elemente/Attribute mit den vorgegebenen Werten der Testcases übereinstimmt.

pic/seleniumtest.jpg

Hier bietet sich Selenium an, auch wenn dessen Haupteinsatzzweck eher in der Detailprüfung von HTML-Dateien besteht. Als XML-Testframework eignet es sich nur bedingt. Ich habe gefunden, dass nicht alle XPath-Statements zuverlässig ausgeführt werden: Für weitergehende Tests mit spezielleren XPath-Funktionen muss tiefer recherchiert werden. Hier steht Material u.a. in der Selenium-Help-Documentation zur Verfügung.

Dennoch ist Selenium ein guter Einstieg für das Verständnis von automatisiertem Testen. Die Selenium-IDE ist ein Firefox-Add-on, das auf HTML und JavaScript beruht. Im einfachsten Fall lassen sich Testfälle aufzeichnen und im Browser abspielen. Selenium überzeugt mit einem einfachen Export der Testcases in Java, Python und C#.NET. Daneben stehen Erweiterungen zur Verfügung, um auf die serverseitige Programmierung in Java, C#, PHP und anderen bis hin zum Zugriff auf die serverseitige Datenbank zuzugreifen. Damit ist Selenium für größere Webanwendungen bzw. für Änderungen im clientseitigen Design ein flexibles Testinstrument.

Selenium erlaubt das Erstellen komplexer Testfälle durch simples Recording, das sich hinterher wieder auf Knopfdruck abspielen lässt. Jeder Testfall kann in einer eigenen Datei gespeichert werden. Die Anweisungen werden sequenziell abgearbeitet. Fehler werden umgehend reportet. Die Testfälle sind dabei atomar: Jeder Wert wird einzeln geprüft. Durch Command, XPath und Value wird exakt beschrieben, was getestet wird.

Ein sehr kurz gefasstes, vereinfachtes HTML-Selenium-Script könnte so aussehen:


<?xml version="1.0" encoding="utf-8"?>
<html xml:lang="en" lang="en" 
      xmlns="http://www.w3.org/1999/xhtml">
 <head 
   profile="http://selenium-ide.openqa.org/profiles/test-case">
  <meta http-equiv="Content-Type" 
        content="text/html; charset=UTF-8" />
  <meta name="author" content="Wilfried Grupe" />
  <meta name="description" 
        content="This file contains 
                 all XPaths of each element 
                 or attibute in C:/wg/Orte.xml" />
  <link rel="selenium.base" 
        href="file:///C:/wg/Orte.xml" />
  <title>Test for C:/wg/Orte.xml</title>
 </head>
 <body>
  <table cellpadding="1" cellspacing="1" border="1">
   <thead>
    <tr>
     <td rowspan="1" 
         colspan="3">Test for C:/wg/Orte.xml</td>
    </tr>
   </thead>
   <tbody>
    <tr>
     <td>open</td>
     <td>file:///C:/wg/Orte.xml</td>
     <td />
    </tr>
    <tr>
     <td>verifyValue</td>
     <td>/Orte/Ort[1]/@id</td>
     <td>1</td>
    </tr>
    <tr>
     <td>verifyText</td>
     <td>/Orte/Ort[1]/Mensch[1]/name[1]/text()</td>
     <td>Holzflos</td>
    </tr>
    <tr>
     <td>verifyText</td>
     <td>/Orte/Ort[1]/Mensch[1]/vorname[1]/text()</td>
     <td>Hugo</td>
    </tr>
    <tr>
     <td>verifyText</td>
     <td>/Orte/Ort[1]/Mensch[1]/Gehalt[1]/text()</td>
     <td>234.56</td>
    </tr>
   </tbody>
  </table>
 </body>
</html>

Selenium bietet ideale Möglichkeiten, die einzelnen Testcases per Rechtsmaus-Click: "Add Test case" in eine Testsuite zusammenzuführen und sie über "File: Save TestSuite" als solche abzuspeichern. Das Resultat ist ein neues Dokument, das Sie bei nächster Gelegenheit laden und sofort wieder ausführen können.

Die eigentliche Schwierigkeit besteht nun darin, eine hinreichende Anzahl qualitativ unterschiedlicher Testszenarien zu entwickeln. "Qualitativ unterschiedlich" heisst dabei, dass Tests mit identischem Charakter (also Wiederholungen) überflüssig sind. Es macht wenig Sinn, zehnmal denselben Testfall (wenn auch mit unterschiedlichen Werten) durchzuspielen und dann zu behaupten, man habe ausreichend getestet.

Die sorgfältige Planung und Auswahl der Tests hängt weitgehend von der Erfahrung des jeweiligen Testentwicklers ab. Beauftragt man mehrere Tester, so erhält man ggf. mehrere unterschiedliche Ergebnisse. Daher ist es auch schwierig, allgemein verbindlich festzulegen, wie viele qualitativ unterschiedliche Testszenarien nötig sind, um sicher zu sein, dass die Software ausreichend getestet wurde.

Wesentlich ist daher, dass hinter der Auswahl der Testcases eine sinnvolle Systematik bzw. Strategie steht. Was das konkret bedeutet, hängt vom jeweiligen Einzelfall ab. Hier sind Kreativität und Erfahrung gefragt.

wg / 5. April 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/selenium.html