Agenda
1. Einordnung End­2­End Tests
2. Nutzen Container­Technologie
3. Überblick Sakuli Framework
4. DEMO
5. Ausblick
Testpyramide
Robust
Unabhängig
Isoliert
Schnell
Besonderheiten bei End­2­End Tests
Unterschiedliche Testarten:
Regressionstests
Funktionale Abnahmetests
Parallele Tests mit GUIs sind komplex!
Stateful Tests: User­Logins, Sessions, verlaufsbasierte Daten
Setup und Cleanup von Testdaten
Manueller Aufwand > Aufwand für Automatisierung
2. Nutzen
Container­Technologie
Vorteile der Container­Technologie
Isolation von Umgebungen
Repository für Versionierung und Verteilung
Reproduzierbarer Aufbau von Umgebungen
Dockerfile, docker­compose.yml
Start von Containern on­the­fly
Optimiert für Parallelisierung
Geteilter Linux Kernel (Speicherplatz, CPU, RAM)
Cloud­ready (Kubernetes, OpenShift, Mesos)
Virtuelle Maschinen vs. Container 
(am Beispiel Docker)
Containerized GUIs
### start the docker container via x­forwarding
docker run ­it ­e DISPLAY=$DISPLAY ­v /tmp/.X11­unix:/tmp/.X11­unix:rw rasch/inkscape
### start the docker container with VNC interface
# connect via URL: http://localhost:6911/vnc_auto.html?password=vncpassword
docker run ­it ­p 5911:5901 ­p 6911:6901 consol/ubuntu­xfce­vnc
docker run ­it ­p 5912:5901 ­p 6912:6901 consol/centos­xfce­vnc
 
3. Überblick
Sakuli Framework
Was bietet   ?
Kategorie
Web Tests via HTML­Selektoren
Testen von nativen GUI Inhalten
(nicht HTML­Inhalte, z. B. PDF's oder Plugins)
Open Source & Java API
Headless­Execution
Unterstützung bei Testerstellung
(Recorder, Screenshot­Finder)
Automatisierbarkeit & Ergebnis­Aufbereitung
(CI, DB, Monitoring Systeme)
Aktionsbereich: Browser­Inhalte 
(HTML­Seiten, Single­Page­Apps)
Objekt­Adressierung über 
DOM­Elemente
Erkennt, wenn Seiten/AJAX­Requests
fertig geladen sind (keine waits)
Guter Umgang mit modernen Web­
Frameworks
Recorder­ / Selektoren­UI­Assistent
Assert Funktionen
Aktionsbereich: Bildschirm ­Inhalte 
(z.B. Rich­Clients, Browser­Plugins)
Objekt­Adressierung über 
Image­Patterns (Mini­Screenshots)
Off­Browser­Testing, sieht und steuert
das, was der User sieht
Flexible Region­Patterns für die
Navigation innerhalb des Bildschirms
OCR­Features (experimental)
Nutzt java.awt.Robot und openCV
 Nagios   OMD   Incinga
 Monitoring Integration
Test Definition (Java Script)
Test Case Structure
// testcase.js
/*************************************
* Initialization
*************************************/
_dynamicInclude($includeFolder);
var testCase = new TestCase(60, 70);
var env = new Environment();
var appNotepad = new Application("gedit");
var region = new Region();
/******************************
* Description of the test case
******************************/
try {
    //...
/************************************************
* Exception handling and shutdown of test case
**********************************************/
} catch (e) {
    testCase.handleException(e);
} finally {
    testCase.saveResult();
}
Unterstützung für alle Sahi­Funktionen
// testacase.js
/************************
* Call Sahi Functions
***********************/
_navigateTo("http://sahi.example.com/_s_/dyn/Driver_initialized");
_highlight(_link("SSL Manager"));
_isVisible(_link("SSL Manager"));
_highlight(_link("Logs"))
_click(_link("Logs"))
testCase.endOfStep("Test Sahi landing page", 5);
Fluent API für UI­Testing
// testacase.js
/*** open calculator app ***/
var calculatorApp = new Application("galculator")
    .open();
testCase.endOfStep("Open Calculator", 3);
/*** calculate 525 + 100 ***/
var calculatorRegion = calculatorApp.getRegion();
calculatorRegion.type("525")
    .find("plus.png")
    .click()
    .type("100")
    .find("calculate")
    .click();
testCase.endOfStep("calculate 525 +100", 20);
Custom Functions
// e.g. excluded into a separate common.js
/**********
* Combine click and highlight
*********/
function clickHighlight($selector) {
    _highlight($selector);
    _click($selector);
}
/***************
* Open PDF in native viewer
**************/
var PDF_EDITOR_NAME = "masterpdfeditor3";
function openPdfFile(pdfFileLocation) {
    return new Application(PDF_EDITOR_NAME + ' "' + pdfFileLocation + '"').open();
}
Sakuli End­2­End­Testing Container
4. DEMO
Demo ­ Sakuli Container
# start the docker container
docker run ­it ­p 5911:5901 ­p 6911:6901 consol/sakuli­ubuntu­xfce
docker run ­it ­p 5912:5901 ­p 6912:6901 consol/sakuli­centos­xfce
# start in parallel via docker­compose
# use docker­compos.yml from https://github.com/ConSol/sakuli/tree/master/docker
docker­compose up
Bakery Demo Setup
Bakery Demo Setup
Bakery Demo
git clone https://github.com/toschneck/sakuli­example­bakery­testing.git
# start jenkins
jenkins/deploy_jenkins.sh
# start OMD montioring
omd­nagios/deploy_omd.sh
# start the build of the application images
bakery­app/app­deployment­docker­compose/deploy_app.sh
#start tests
sakuli­tests/execute_all.sh
#start tests for monitoring
sakuli­tests/execute_all_4_monitoring.sh
4. Ausblick
What's next?
Headless­Execution ­ Linux: VNC & Docker   Windows: ?
Cloud­ready container für OpenShift (security, source­2­image)
Video­Aufzeichnung der Testabläufe zur Fehlerdokumentation
Web­UI für die Test­Suite­Verwaltung und Reporting
Externe Test­Management­Systeme anbinden 
(HP QC, TestRail, ...)
Darstellung von Testergebnissen in CI­Tools verbessern
Selenium als Alternative zu Sahi ermöglichen
Links
ConSol/sakuli 
Consol/sakuli­examples 
toschneck/sakuli­example­bakery­testing
 sakuli@consol.de 
Danke Software­QS­Tag!
Tobias Schneck
ConSol Software GmbH
Franziskanerstraße 38
D­81669 München
Tel: +49­89­45841­100
Fax: +49­89­45841­111
tobias.schneck@consol.
  toschneck
info@consol.de
www.consol.de
  ConSol

Containerized End-2-End-Testing - Software-QS-Tag (deutsch)