Category Archives: Testen bei der Digitalen Transformation

Testen bei der Digitalen Transformation

04Jul/17
Testen Qualität

Testautomatisierung, ihre Tools und ihre Zukunft

Experten sind einig, dass Testautomatisierung die Zukunft beim Testen bestimmen wird. Einige gehen noch weiter und sehen die Perspektive in „machine learning“ (ML) vor, wo Testfälle automatisch sich anpassen, je nach Ergebnisse der historischen Testfälle.

Die IT kann sich von der Produktion abgucken, wie bereits in dem Buch „The Phoenix Buch“ erläutert. Der Trend liegt beim Automatisieren genauso wie bei den Produktion-Geschäftsmodellen. „Automatisiere repetierende Prozesse“ und spare Dir den damit verbundenen Aufwand!

Beim Test wird oftmals der Komponententest, Integrationstest und der Performance Test automatisiert gemäß Studien von dzone. Es wird nicht empfohlen komplett auf den manuellen Test zu verzichten. Sondern bei den sich wiederholenden Testaktivitäten macht eine Automatisierung Sinn. Diese Automatisierung kann schnellen Erfolg bringen. Wohingegen einige UAT Test weiterhin manuell erfolgen sollten, wo die Logik komplex und einzigartig ist. Manuelle Tester muss es immer geben, da man nur die nicht komplexen Testfälle automatisiert. Beispiel: Schauen wird uns einen Einkaufsprozess in einem online Shop an. Waren können gesucht werden und in den Warenkorb eingefügt werden. Doch vor dem finalen Einkauf muss man in einigen Fällen eine Capatcha ausgefüllt werden. Mit Capatcha versucht Google genau gegen automatische Algorithmen entgegen zu wirken. Mit Hilfe von Konfigurationsdateien sollte diese Einstellung auf AUS eingestellt werden.

Mit Testautomatisierung werden Begriffe wie, automatische „deployments“, „continuous integration“ und die damit verbundenen Aktivitäten assoziiert.

Der Ansatz der Testautomatisierung muss am Anfang bei den Entwicklern starten. Die Entwickler müssen bereits bei der Programmierung Testfälle mit einbauen, damit die Qualität von t0 an hoch ist. Am Anfang wird dies zwar als ein großer Aufwand gesehen und der Return on Investment (ROI) wird bei größeren Projekten erfahrungsgemäß positiv sein. Ein aktuell im Trend liegender Entwicklungsansatz ist der „Test Driven Development“ (TDD). Auch „pair programming“ findet mehr Reichweite, wobei zwei Programmierer vor einem Computer sitzend programmieren. Feedback zum Code gibt es sofort, so dass die Qualität der Entwicklung vom ersten Codeansatz hoch ist. Mit diesen Ansätzen gewinnt die Entwicklung im frühen Stadium bereits an Qualität.

Bei der Entwicklung liegt der Trend auch bei einem Behaviour Driven Development (BDD) mit zu berücksichtigen. Hierbei werden die Tests in einer nicht formalen Sprache kommuniziert, damit Entwickler diese dem gewünschten Verhalten entsprechend entwickelt. Besonders auch für den Inhalt von Benutzer-Handbücher können diese Testfälle mitberücksichtigt werden. Auch ein visueller Test muss durchgeführt werden. Und dieser Test darf nicht unterschätzt werden. Anhand von Screenshots sollen Änderungen verglichen werden. Hierfür sind Tools wie PhantomCSS, Backstop JS oder Galen hilfreich.

Wo liegen die Gefahren bei einer Testautomatisierung?

  • „Locator“ ändern sich. Webelemente wie Buttons, Inputfelder oder Links werden an Hand der DOM identifiziert. Dies kann mit Hilfe von IDs, xpath, css-Element identifiziert werden. Jeder dieser Elemente kann sich ändern und der automatische Test würde ein Element nicht finden, um den Test fortzuführen. Der Testfall würde kaputtgehen.
  • Veraltete Validierung bei Inputfelder – Das Skript muss bei Codeänderungen bei Felder ggf. mit angepasst werden.
  • Seite wiederherstellen – Das Timing beim Wiederherstellen von Seiten muss korrekt sein
  • Pop-ups müssen auch getestet werden. Testskript müssen diese erkennen und auf diese reagieren können.

 

Machine Learnng – Die Zukunft

Bei automatischen Testläufen werden jede Menge Daten generiert. Diese werden aktuell kaum gesammelt und ausgewertet. Sobald diese gesammelt und ausgewertet werden, können sich Testfälle anpassen je nach Anpassungsnotwendigkeit. Diese Anpassung ist aktuell noch nicht möglich, doch in naher Zukunft wird auch dieses Testen möglich sein gemäß Testexperten.

Mit Cloud basierten Test kann der Lastetest schnell und unkompliziert erfolgen. Die im Cloud hinterlegten Daten können auch für das „machine learning“ angewendet werden. Testautomatisierung wird aktuell von zahlreichen Unternehmen gelebt und auch viele Anbieter mit Softwarehilfen gibt es nun reichlich auf dem Markt. Jedes Unternehmen muss das für Ihn passende Tool vorsichtig selektieren und implementieren.

 

 

01Jul/17
cucumber Behaviour Driven Development

Behaviour Driven Development – Cucumber

Eine weitere Entwicklungsmethode ist das BDD (Behaviour Driven Development). Bei dieser Methode zur Feature Entwicklung wird das Verhalten von einem Feature beschrieben. Die Testfälle werden auf einer verständlichen Weise für Business Analyst, Entwickler und Tester dokumentiert, damit alle dasselbe Verständnis haben.

Konventionell werden Features vom Entwickler entwickelt. Anschließend werden hierfür Testfälle beschrieben. Um den Entwickler zu entlasten und Missverständnisse zwischen den verschiedenen Schritten eines Entwicklungsprozesses zu vermeiden, findet die BDD immer mehr an Bedeutung.

Kunde möchte ein neues Feature entwickeln:

Der Kunde hat oftmals eine konkrete Vorstellung für sein Feature request. Für eine effektive Umsetzung des Features muss eine eindeutige Kommunikation zwischen dem Auftraggeber und den umsetzenden Parteien vorliegen. Denn selten kommt das Feature request vom Test oder Entwicklungsteam. Die Beschreibung muss auch von einer nicht-technischen Person verstanden werden. Hierfür ist ein Template erforderlich, damit alle Testfälle strukturiert aufgebaut sind. Diese Herangehensweise für eine einfache Kommunikation muss im gesamten Projekt vorliegen.

Cucumber Werkzeuge unterstützen BDD, in dem sie ein Template für das Schreiben von Testfällen zur Verfügung stellt, damit alle Projektbeteiligten unabhängig vom technischen Know-How den Test versteht. Diese Testfälle werden aus der Kundensicht geschrieben und mit dem Produkt Owner abgestimmt, bevor der Entwickler anfängt diese zu programmieren.

Vorteile von Cucumber sind:

  1. Auch das Projektmanagement versteht den Inhalt der Features
  2. Fokus liegt auf den Kunden
  3. Hohe Wiederverwendbarkeit
  4. Schnelle und einfache Einrichtung
  5. Effizientes Werkzeug zum Testen
Cucumber HP ALM Selenium
kostenlos teuer kostenlos
BDD Werkzeug Funktionales Automatisierungs-Werkzeug Funktionales und Performance- Testwerkzeug
Plugin funktioniert schnell Langsames Plugin Langsames Plugin
Sprachen wie Ruby, Java, Scala, Groovy etc. werden unterstützt Nur VB Skript wird unterstützt Java, .Net, und viele weitere Sprachen werden unterstützt
Test-Automatisierung kommen vom Tester und Entwickler Tester schreibt die Testfälle Test-Automatisierung kommen vom Tester und Entwickler
Nur Webanwendung unterstützt Web,Desktop und Client-Server Anwendungen werden untersützt Nur Webanwendung unterstützt

Cucumber Installation:

Gemäß der Anleitung auf der folgenden Seite (Cucumber Installation)  kann Cucumber erfolgreich eingerichtet werden.

Basiswissen Cucumber

In jedem Cucumber Projekt gibt es eine Datei mit dem Namen „features“, wo alle Cucumber Features festgehalten werden. Ein zusätzliches Paket  „step_definition“ muss ebenfalls vorliegen, wo der eigentliche Code zum Ausführen vorliegt.

Cucumber Templates

  • Feature: beschreibt die zu testende Funktion
  • Scenario: beschreibt die Testschritte und das erwartete Ergebnis für einen bestimmten Testfall
  • Given: beschreibt eine Vorbedingung
  • When: beschreibt die auszuführende Aktion
  • Then: beschreibt das erwartete Ergebnis vom Test
  • And: beschreibt zusätzliche Bedingungen

Beispiel:

Feature: Login

Scenario: Erfolgreicher Login mit validen Logindaten

Given: Benutzer ist auf der Homepage

When: Benutzer gibt Name und Passwort ein und klickt auf den Login-Button

Then: Er kann die Folgeseite besuchen.

Gherkin:

Schlüsselwörter, die Gherkin unterstützt:

  • Feature
  • Background
  • Scenario
  • Given
  • When
  • Then
  • And
  • But

 

30Jun/17
maven für test

Maven und Jenkins mit Selenium

Selenium ist geeignet für den automatischen Test über den Browser, doch für den Build Prozess unterstützt Maven Selenium. Apache Maven unterstützt den kompletten Lebenszyklus eines Testprojekts zu verwalten.

Maven wird verwendet um eine Projektstruktur, dependencies, Build und Test Management zu definieren. Aus dem Grund wird sie als ein Software Projekt Management Werkzeug gesehen.

Mit Hilfe von der pom.xml (project object model) Datei können Ressourcen, die für den Code benötigt werden, konfiguriert werden. Maven lädt die im dependency erwähnten Plugins automatisch herunter. Maven verwaltet

  • Build Prozess
  • Dokumentation
  • Berichte
  • Dependencies
  • Release
  • Emaillisten

Drei Punkte beim Lebenszyklus von Maven lauten:

  • Clean: bereinigt existierende Artefakten
  • Default build: Erstellt die Anwendung
  • Site: Dokumentation wird ist erstellt

 

Bei Maven liegen folgenden Build-Phasen vor:

  • Validate
    Compile
    Test
    Package
    Install
    Deploy

Ein Maven Artefakt ist eine JAR Datei, welchen in dem Maven-Repo vorliegt. Jede Artefeact besitzt eine group und artifact ID.

Um eine Testklasse in Maven zu starten, braucht man das Plugin surefire. Darüber hinaus müssen die XML Dateien pom und setting ebenfalls konfiguriert werden.

Wie integriert man einen Test in eclipse mit maven?

Die Test Klassen werden in dem  Testordner in dem entsprechenden Paket eingefügt!

In MVN-Repo kann für die  gewünschten Plugins der entsprechende XML Code herausgefunden werden. Maven lädt die notwendigen Dateien aus dem Repositroy herunter anhand der Information in der pom.xml Datei. Diese müssen in die pom.xml eingefügt werden.

 

 

maven für test

Auf der folgenden Seite:

http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html

wird die Integration von TestNG in Maven näher erläutert

In Pom.xml muss der Hinweis auf Testng.xml vorliegen, damit diese Testklasse ausgeführt werden kann.

Auch TestNG Berichte wird in dem Zielordner unter Source generiert. Ein Bericht fasst die Testergebnisse übersichtlich und transparent zusammen.

Jenkins

Jenkins ist eine führende open soure Software für „continous integration“, welche Browser und Betriebssystem unabhängig verwendet wird. Jenkins überwacht SVN checkout einer Applikation.  Darüber hinaus unterstützt sie bei Versionen zu kontrollieren und den Build Prozess zu überwachen.

Jenkins kann einfach auf Windows per exe installiert werden. Mehrere VM können konfiguriert werden um den Build-Prozess auf verschiedene Maschinen durchzuführen

Warum Jenkins und Selenium?

  • Wenn Selenium Test auf Jenkins durchgeführt werden, dann kann nach jeder Softwareänderung ein automatischer Test ausgelöst werden
  • Ein Test kann zu einer bestimmten Zeit wie ein Wecker voreingestellt werden
  • Die Testberichte und Ausführungshistorie werden gespeichert
  • Jenkins unterstützt Maven beim Build Prozess und einem „continous integration“ Test
  • Fehler können schnell in der Test- oder Staging-Umgebung bereits überprüft werden bevor diese in die Produktion gelangen

Jenkins erzeugt eine Übersicht aller Änderungen in Repositories wie SVN. Um Jenkins erfolgreich zu verwenden bestätigt man ein zugängliches Repository (wie SVN oder GIT) für den Quellcode und ein build-Skript wie z.B. Apache Maven Skript.

Maven Projekt WebDriver Test

Continous integration

Sie sind fertig mit dem Programmieren einer neuen Funktion. Nun muss sichergestellt werden, dass diese neuen Funktionen keine negativen Einflüsse auf die anderen bereit existierenden Funktionen haben. Besonders bei mehreren Entwicklern, ist eine stetige Überprüfung des Entwicklungsstandes notwendig. Mit Hilfe von in LDAP hinterlegten Informationen wird der Entwickler sofort über das Testergebnis informiert.

Wie macht man dies effizient?

In der aktuellen Zeit wo es zahlreiche agile Projekte gibt, findet Jenkins immer häufiger seine Anwendung.

Mit Maven wird Jenkins angewendet. Jenkins ist ein continous integration werkzeug, womit nach jeder Entwicklung mit dem automatischen Test ein Feedback zu der Entwicklung  gegeben werden kann.

Jenkins muss wissen wo maven und java vorliegt. Diese Einstellung erfolgt unter dem „Jenkins verwalten“ und dann unter „System konfigurieren“. Voraussetzung ist dass die Plugins für JDK und Maven bereits vorliegen. Nach diesen Einstellungen kann ein Maven Projekt angelegt werden. Unter „Konfigurieren“ des Projekts können die Einstellungen zum „Build“ durchgeführt werden. Ein Build kann auch zeitgesteuert starten. Hierfür muss man den Abschnitt „Build-Auslöser“ und den Abschnitt „Zeitplan“ nutzen.

Auch das Verzeichnis der pom XML Datei muss hinterlegt werden, damit mit den Informationen aus der pom-Datei beim Ausführen des Projekts berücksichtig werden kann. Nach dem Speichern kann man unter „Jetzt bauen“ das Projekt bauen und das Maven Projekt wird ausgeführt.  Unter der Konsolenansicht auf Jetkins kann man die einzelnen Schritte verflogenen.

Anbei ein Beispiel für die pom.xml Datei. Hierbei werden die Plugins surefire und compiler als dependency eingefügt. Als Testsuite wird testng.xml beschrieben.

21Mai/17

Testdaten aus Exceldatei – Selenium

Exceldaten Testautomatisierung

Testdaten aus Exceldatei

Testfälle müssen durch verschiedene Testdaten getestet werden. Mit Hilfe von POI Apache können die Testdaten aus einer Exceldatei gelesen und in Variablen gespeichert werden.

 

Die Testdaten können in ein Dataprovier eingefügt werden. Damit kann ein Testfall mit mehren Testdaten aus einer Exceldatei durchgeführt werden.
Die Testdaten können in einem zwei dimensionalen Array gespeichert werden. Dafür kann die folgende Methode verwendet werden.

 

Der Output dieser Array kann anschließend als Dataprovider als Annotation einem Testfall hinzugefügt werden.

 

}

11Mai/17
extent report Test

Extent Report – Auswertung vom Test

Extent Report ist eine einfache API, welche ein übersichtliches und benutzerfreundliches Output zur Auswertung der Tests liefert. Die Logs können einfach im Code einbettet werden. Auch nimmt dieses Tool die Systemdetails wie OS, Java Version, Speicher usw. mit in die Auswertung. Die beiden relevanten Objekte für ExtentReports und ExtentTest werden wie folgt initialisiert.

ExtentReports report;

ExtentTest test;

extent report Test
19Apr/17

Test NG – Testen

TEST NG

TestNG ist ein Framework, welches zum Testen von Java-Programmen geeignet sind. Besonders für automatisierte Test einzelner Methoden und Klassen wird dieses Framework genutzt. Mit diesem Framework können Tests parallel, gruppiert und Parameter steuernd durchgeführt werden.

Mit der Assert Funktion können Checkpoints in einem Test eingesetzt werden. Diese Initiative unterstützt die Überprüfung von Testannahmen. Erwartete und eigentliche Werte werden verglichen und ein Ergebnis (true oder false) wird ausgegeben.

Assert statements:

  • assertTrue () oder Assert.assertFalse();

Die erste Frage schlägt den Test fehl und stoppt die Ausführung vom Test, wenn der eigentliche Output false ist.

  • assertEquals()

Sofern die Antwort true ist, wird die Ausführung fortgefahren.

 

Mit den bekannten Assert Methoden werden die Prüfungen eins nach dem anderen durchgeführt. Doch wenn ein Testfall (TF) fehlschlägt kommt es zum Abbruch der Methode. Die weiteren Testfälle nach dem fehlgeschlagenen werden nicht ausgeführt. Damit alle Methoden getestet werden, sollte die Klasse

SoftAssert verwendet werden. Hiermit werden alle Methoden ausgeführt. Die hierfür relevante Methode lautet assertAll().

Bei der Erstellung einer TestNG Klasse können zusätzliche Methoden eingefügt werden (Mit eclipse kann dies bei der Erstellung der Klasse erfolgen), damit diese Methode vor bzw. nach jeder Methode oder Klasse ausgeführt werden kann.  Anbei ein Beispiel:

Testfälle werden in Test-Klassen eingefügt. Es liegen mehrere Testklassen vor, die jeweils eine Funktionalität beschreibt. Beispiel: Wie haben 10 Seiten einer Webseite zu testen. Je Seite wird eine Testklasse erstellt. Jeder dieser Testklasse wird in ein TestSuite aggregiert. Für einen Regressionstest kann es ein TestSuite geben, wo alle Testklassen eingefügt werden.

 

 

 

TestNG ermöglicht mir Hilfer einer XML Datei oder Annotationen Testmethoden und Tests zu gruppieren, zeitliche Abfolge einzustellen. Auch ein Testsuite wird in der Datei eingestellt.

 

Der Test wird von der XML Datei aus initiiert. Es können mehrere <Test> vorliegen, so dass man die Ausführung von einzelnen Methoden bevor und nach bestimmten Testmethoden definieren kann.

@BeforeClass(alwaysRun=true)  à Mit dieser Annotation  wird die Methode immer ausgeführt!

@Test(groups = {„Auto“, „Fahrrad“})  -à Mit diesem Annotation  können Methoden gruppiert werden. In der Konfigurationsdatei ist die Ausführung hinsichtlich der Gruppen nochmal zu spezifizieren. Mit einem define Tag in der XML Datei können auch mehrere Gruppen definiert werden.

Wie erstellt man abhängige Testmethoden? Es gibt Methoden, die abhängig von Ergebnissen anderer Methoden.

Hierfür muss bei der Erstellung der Methode die Annotation @Test (dependsOnMethods={}) eingefügt werden-

 

In dem obigen wird Testmethode 2 nur ausgeführt, wenn die Testmethode 1 ausgeführt wurde

Mit alwaysRun wird gesagt, dass die Methode immer ausgeführt werden soll, auch wenn die testMetod2 nicht erfolgreich ist.

Wie gibt man Parameter bei der Ausführung von Methoden mit? Diese Parameter werden in der XML Datei definiert.

In der Methode muss eine Annotation @Parameters eingefügt werden.

Der Schlüssel ‚Browser‘ wird gelesen und sein Schlüssel wird dann der Methode übergeben.

 

Wie können Testmethoden parallel ausgeführt werden?

Beim Tag suite muss das Argument parallel eingeschlossen werden. Hiermit können auch Klassen parallel ausgeführt werden. Dies definiert man in der Konfigurationsdatei.

Sie möchten eine Testmethode mit mehreren Inputs testen? Je Input eine Methode zu schrieben ist nicht effizient. Sie können aber mehrere Inputs einer Methode mitgeben.

 

 

Mit dem Annotation Dataprovider und dem Namen können einer Methode  Inputvariablen übergeben werden. Auch bei der Testmethode muss selber Name des DataProviders übergeben werden. In dem Fall oben werden die Methoden 3-mal mit den Inputs ausgeführt.

Empfohlen wird, dass DataProvider seine eigene Klasse hat. Die @Test Annotation muss auch den Namen der Klasse mitteilen, damit sie weiß wo er für nach DataProvider zu suchen hat.

ITestResult

Nach jeder Testmethode kennt das Objekt ITestResult das Resultat der letzten Testmethode. Mit diesem Wissen kann man eine beliebige weitere Aktion ausführen. Anbei ein Beispiel, wo der Name der Methode schreibt, wo es zu einem Fehlergekommen ist.

 

 

TestNG – Listener

TestNGListener hört nach Events zu. Wenn ein bestimmtes Even eintritt, kommt es zur Ausführung von definierten Methoden.

  • IInvokedMethodListener
  • Diese Klasse bietet die Implantierung der Methoden
  • afterInvocattion() und beforeInvocation() Diese werden vor und nach jeder Methode ausgeführt. in der Testklasse ausgeführt

 

 

 

ITestListener(){}  ::LISTENS DEPOENDING ON TEST result…success, or start of the test

Eine weitere Klasse ist ITestListener. Hiebei wird vor und nach einer Test-Methode oder Test-Klasse durchzuführenden Methoden beschrieben.

Für Suite gibt es die Klasse ISuiteListener, wo definierte Methodeb (onStart und onFinish) beim Start und Ende des Suites ausgeführt wird.

19Apr/17
software testen IT

Selenium Webdriver

Elemente auf der Webseite finden und mit diesen Aktionen ausführen:
Eindeutige und einzigartige Identifikationswege mit Hilfe des DOM (Document Object Model) müssen bei den Elementen auf der Webseite identifiziert werden, damit man mit diesen, Aktionen wie klicken, Mouse Over, Text senden durchgeführt werden können.

X können in dem Fall id, name, classname, xpath(Syntax eines xpaths: .//TAG[@attribute= value]

), linktext, parital linktext, tag name, selector sein, die sie mit Hilfe von F12 und klicken des Elements identifizieren können. Ein kleiner Tipp ist das Installieren der Addons Firebug und Firepath auf Mozilla Firefox. Diese vereinfachen das Finden der Elemente.
Auch mit CSS Elementen wie ID und Class können Elemente eindeutig identifiziert werden
z.B. driver.findElement(By.cssSelector(selector)c)

Diese Elemente müssen einzigartig auf der Webanwendung / Webseite sein. Der Hinweis „matching node“ onyl! bei Firepath bei der Eingabe des xpath beispielsweise ist ein Hinweis auf eine eindeutige Identifizierung eines Webelements.

Was macht man mit den gefundenen Elementen? Welche Aktionen werden durchgeführt?
 Auf den Elementen wird geklickt
 Eingetragene Werte werden gelöscht
 Auf einem Radiobutton wird geklickt
 Beim Dropdown Menu wird ein Wert selektiert
 Nach unten und nach oben scrollen
 Zwischen Webseiten wird navigiert / gesprungen

Darüber hinaus können Werte von Attributen eines Elements in einem Datentyp gespeichert werden.
WebElement element = driver.findElement(By.id(„name“));
String attributeValue = element.getAttribute(„type“);

Wie wähle ich ein Feld in einem Kalender aus?
Siehe Bild

Auch beim Integrieren eines IFrames gibt es Besonderheiten. Ein IFrame ist wie eine neue Seite zu berücksichtigen.

Wegen Wartbarkeit ist es ratsam den Code übersichtlich zu halten. Hierbei können generelle Methoden helfen.

Screenshots beim Testen
Besonders beim Testen hat eine ausführliche Dokumentation eine hohe Signifikanz. Da darf ein Screenshots nicht fehlen. Doch auch hierfür bietet Selenium eine einfache Möglichkeit an mit Hilfe der Klasse TakeScreenshot.

Implicit wait & Explicit wait

Wichtig ist eine Wartezeit nach dem Finden von Webelementen zu implementieren. Je nach Ladezeit ist es wichtig, dass einige Elemente Zeit brauchen bis sie fertig geladen sind. Wenn eine Wartezeit nicht implementiert ist, dann können Aktionen auf die geplanten Webelemente nicht durchgeführt werden. Es kommt zur Fehlermeldung. Aus dem Grund ist es wichtig diese Wartezeiten (in Sekunden!) einzubauen. Hierbei gibt es zwei verschiedene Wege:
1. Implicit Wait: Falls ein Element nicht sofort verfügbar ist, sagt der WebDriver dem DOM eine gewünschte Zeit zu warten. Bevor ein Fehler (oft ein Exception) geworfen wird, wird die gewünschte Zeit gewartet. Der Defaultwert ist auf 0 Sekunden gesetzt. Ein empfohlener Wert liegt bei 3 Sekunden.
driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

2. Explicit Wait: Mit dieser Wartezeit wird die Ausführung einer Aktion bis eine Bedingung erfüllt ist pausiert / gewartet. Diese Wartezeit kann im Gegensatz zu dem „implicit Wait“ für nur bestimmte Elemente definiert werden. Aus unterschiedlichen Gründen kann das Laden von bestimmten Elementen mehr als 30 Sekunden dauern. In diesen Fällen macht der „implicit Wait“ keinen Sinn. Beispiele für die anknüpfbaren Bedingungen sind
 elementToBeClickable
 presenceOfElementLocated
 titleContains

„elementToBeClickable; presenceofElementLocated; - Beispiele für Elemente

 

Einbinden von JavaSript:
Für das Ausführen von JavaScript Code ist das Einbinden von JavaScript ebenfalls möglich.

JavascriptExecutor jse;
jse = (JavascriptExecutor)driver;
jse.executeScript(„window.scrollBy(0, 600)“);

JUnit ist ein test-framework:
@BeforeClass - VOR DER ersten Testmethode in der aktuellen klasse wird ausgeführt
@AfterClass  nach der letzten Testmethode in der aktuellen klasse wird ausgeführt
@Before  wird vor jeder Methode ausgeführt
@After  nach jeder Methode
@Test dies ist mein Test fall…> inkludier im Bericht
Test Framework:
Ein Test Framework definiert den Rahmen für Testfälle, damit sie den Standards folgen. Dies erhöht die Genauigkeit und die Wartbarkeit des automatisierten Testprozesses.

Das automatische Testen schaut einfach aus. Sie finden Webelemente und führen Aktionen aus. Doch je mehr Testfälle vorliegen desto schwerer wird es diese zu warten. Wenn mehrere Codes für eine Seite gemacht wird dann wird eine kleine Änderung zu Änderung von zahlreichen Codes führen. Es wäre besser wenn in einer Klasse alle Elemente definiert werden. Diesen Gedanken führt das Page Object Model aus.
Page Object Model:
Jede Seite wird als sein Objekt betrachtet. Jede Page Klasse enthält statische Methoden um alle Elemente einer Seite zu wiedergeben. Somit wird eine Seite wartbar und nachhaltig kann sie verbessert werden. Es gibt schließlich eine Methode die auf die Elemente zugreifen und diese Aktionen wie sendkeys(), oder clear() etc. durchführt. Dieses Model verwendet ein Object Repository für die Web UI Elemente.
Page Factory:
Bei Page Factory werden Object repository und Testmethoden getrennt betrachtet. Mit Hilfe der Annotation @ FindBy können Webelemente gefunden werden. Die initElements Methode initialisiert die WebElemente. EineKlasse mit allen Objekt wird erstellt..

Somit können Methoden auf diesen Topf von Elementen zugreifen.
Somit werden Methoden erstellt, welche sprechend sind und einfach können Methoden erstellt werden. Diese sind wartbar. Diese effiziente Codingstrategie verhindert das Duplikat von Code.

Der Code ist übersichtlich und vorallem sprechend und leicht zu ändern.
Vorteile:
Objekte einer Seite sollten von den Tests getrennt werden
• Object repositry ist unabhängig von Testfällen
• Weniger und übersichtlicher Code
• Methoden erhalten realistischere Namen so dass dies leicht verständlich ist für alle Beteiligen.

Prüfen von Links einer Webseite
Wichtig ist auch zu prüfen, ob alle Links einer Seite auch funktionieren. Hierzu kann der folgende Code dienen.
//Mit dieser Methode werden alle Links in eine Liste gespeichert.
Public static List clickableLinks(WebDriver driver) {
List linksToClick = new ArrayList();
List elements = driver.findElements(By.tagName(„a“));
elements.addAll(driver.findElements(By.tagName(„img“)));

// Mit dieser Methode wird der HTTP Code der jeweiligen URL geprüft und eine entsprechende Antwort wird geliefert.

Ein komplettes Projekt wird ein folgende Pakete haben:
PageFactory, Pages und Test.

Mit AjaxELementLocatorFactory wird das langasame Laden in PageFactory identifziert
AjaxELementLocatorFactory factory = new AjaxElementLocatorFactory (driver, 100);

Erst nach 100 Sekunden wenn ein Element nicht sichtbar ist eine Aktion auszuüben würde ein „NoSuchElementException“ geworfen.

19Apr/17

Logging – Testautomatisierung

Log4j.2.x Version

Log4j api kann verwendet werden um die Log-Infrastruktur im Test einzubauen. Mit dieser API können verschiedenen Logging Levels angewendet werden.  Auch ein Logfile kann erstellt werden.

3 wichtige Bestandteile sind:

  1. Logger – ist eine Klasse, um Loginformationen auf verschiedenen Ebenen zu dokumentieren
  2. Appenders – sind Objekte, welche Logger Objekte helfen in verschiedenen Outputs zu loggen. Appenders kann eine Datei, Konsole oder eine Datenbank als ein Zielort für ein Log bestimmen.
  3. Layouts – wie schon der Name sagt, dient die Layout Klasse die Darstellung des Outputs der Loginformationen zu definieren

Log4j prüft die Einstellung im log4j.<Konfiguratoinsdatei wie json oder xml) für die Konfiguration des Pfades.

 

18Mrz/17

Selenium – Testautomatisierung

Selenium ist ein Framework, welches automatischen Softwaretest bei Webanwendungen, anbietet. Diese freie Software wurde unter der Apache 2-0-Lizenz veröffentlicht. Mit Selenium ist das automatische testen bei Webanwendungen. Welche viel Tipparbeit abnehmen bei manuellen Testern abnimmt.

Selenium DIE

Diese Webanwendung  ist für einen schnellen einfachen Einstieg geeignet. Als Firefox Addon kann man sich die Software problemlos (abhängig von Ihrer Firefox Version) installieren. Mit dieser Anwendung ist es möglich Szenarien aufzunehmen und diese in einem Testfall innerhalb der Anwendung  abzuspielen.  Die Testfällle können mittes „verify“ und „assert“ angereichert werden, so dass erfolgreiche und nicht erfolgreiche Testfälle dokumentiert werden.  Einzelne Testfälle lassen sich auch in Testsuite hinzufügen. Diese Bequemlichkeit wird allerdings nur dem Browser Mozilla Firefox zur Verfügung gestellt. So einfach auch das automatische Testen hiermit gemacht wird, ist ein browserunabhängiger Test nicht möglich. Besonders bei großen Projekten hat Selenium IDE schwer wartbar zu sein. Kleinere Änderung an der  Software können zum Nicht-Funktionieren von des aufgenommenen Testfalls führen.

Anschließend gab es e Selenium Remote Control (RC), wobei der Selenium Server von einem Client in verschiedenen Programmiersprachen ferngesteuert wurde. In jedem JavaScript unterstützten Browser hat die Anwendung funktoineirt. Doch ist jeder Browser indiviuell fernzusteuern. Allerdings wurde diese Software mit dem Release von Selenium WebDriver kaum gebraucht.  Bei funkrioneirt der Webdriver als eine Schnitstelle zu den Browsern. Programme werden mit den Webdriver Methoden geschribene. Diese können mit einem Code  ein Testfall oder Testsuite verschiednene Browser getestet werden.

Somit muss nur für den WebDriver Interface programmiert werden

1 x Methode für einen Browserà Firefox Driver, IE Driver, Chrome Driver, Others…

WebDriver ist ein Interface / SST das version 2.0 von Selenium ist.

Jeder Browser hat seine eigene Klasse um die Mehoden von Webdriver zu nutzen. Je Browser muss der Driver heruntergeladen und im Code darauf hingewiesen werden. Damit der Driver auch die korrekte Anwendung ausführt.

  • FirefoxDriver
  • ChromeDriver
  • InternetExplorer Driver
  • Safari Driver
  • EventfiringWebDriver

// instanziieren eines Webdrivers