27
Containerized End2End Testing + , Tobias Schneck ConSol Software GmbH

Containerized End-2-End Testing - JUG Saxony Day

Embed Size (px)

Citation preview

Containerized End­2­End Testing

+

, Tobias Schneck ConSol Software GmbH

Agenda

1. Einordnung End­2­End Tests2. Nutzen Container­Technologie3. Überblick Sakuli Framework4. DEMO5. Ausblick

Testpyramide

RobustUnabhängigIsoliertSchnell

Besonderheiten bei End­2­End Tests

Unterschiedliche Testarten:RegressionstestsFunktionale Abnahmetests

Parallele Tests mit GUIs sind komplex!Stateful Tests: User­Logins, Sessions, verlaufsbasierte DatenSetup und Cleanup von Testdaten

Manueller Aufwand > Aufwand für Automatisierung

2. NutzenContainer­Technologie

Vorteile der Container­Technologie

Isolation von UmgebungenRepository für Versionierung und VerteilungReproduzierbarer Aufbau von UmgebungenDockerfile, docker­compose.yml

Start von Containern on­the­flyOptimiert für ParallelisierungGeteilter 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­forwardingdocker 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=vncpassworddocker run ­it ­p 5911:5901 ­p 6911:6901 consol/ubuntu­xfce­vncdocker run ­it ­p 5912:5901 ­p 6912:6901 consol/centos­xfce­vnc

3. ÜberblickSakuli Framework

Was bietet ?

KategorieWeb 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­ElementeErkennt, wenn Seiten/AJAX­Requestsfertig geladen sind (keine waits)Guter Umgang mit modernen Web­FrameworksRecorder­ / Selektoren­UI­AssistentAssert Funktionen

Aktionsbereich: Bildschirm ­Inhalte (z.B. Rich­Clients, Browser­Plugins)Objekt­Adressierung über Image­Patterns (Mini­Screenshots)Off­Browser­Testing, sieht und steuertdas, was der User siehtFlexible Region­Patterns für dieNavigation innerhalb des BildschirmsOCR­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 containerdocker run ­it ­p 5911:5901 ­p 6911:6901 consol/sakuli­ubuntu­xfcedocker 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/dockerdocker­compose up

Bakery Demogit clone https://github.com/toschneck/sakuli­example­bakery­testing.git

# start jenkinsjenkins/deploy_jenkins.sh# start OMD montioringomd­nagios/deploy_omd.sh

# start the build of the application imagesbakery­app/app­deployment­docker­compose/deploy_app.sh

#start testssakuli­tests/execute_all.sh#start tests for monitoringsakuli­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 FehlerdokumentationWeb­UI für die Test­Suite­Verwaltung und ReportingExterne Test­Management­Systeme anbinden (HP QC, TestRail, ...)Darstellung von Testergebnissen in CI­Tools verbessernSelenium als Alternative zu Sahi ermöglichen

Danke JUG Saxony Day!

Tobias Schneck

ConSol Software GmbHFranziskanerstraße 38D­81669 MünchenTel: +49­89­45841­100Fax: +49­89­45841­111

tobias.schneck@consol. toschneck

[email protected]

ConSol