Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Skale your test environment! Containerized End-2-End-Testing @Herbstcampus Nürnberg

223 views

Published on

http://www.herbstcampus.de/veranstaltung-5222-containerized-end-2-end-testing.html?id=5222

Bei der Konzeption von End-2-End-Tests ist eines der größten Probleme die Frage, wie die Testausführung möglichst robust, reproduzierbar und skalierbar gestaltet werden kann. Diese Hürde lässt sich mit klassischen Ansätzen nicht überwinden. Einen eleganten Ausweg bieten in Container verpackte Testumgebungen. Dadurch wird es möglich, einen definierten Systemstand reproduzierbar aufzurufen und Tests performant auszuführen.

Es wird zeigt, wie z.B. parallele GUI-Tests in verschiedenen Umgebungen zur Qualitätssicherung beitragen. Die Beispiele sind mit dem Open-Source-Tools Sakuli und Docker realisiert und testen Web- und Rich-Client-Applikationen.

Der Vortrag beinhaltet eine großen Anteil an Live-Demo. Die zugehörige Codebasis wird den Zuhören auch zugänglich gemacht.

Skills
Keine

Lernziele
Ziel ist es, dem Zuhörer aufzuzeigen, wie das Potenzial von Container-Technologien genutzt werden kann, um die Softwarequalität zu erhöhen und den manuellen Testaufwand drastisch zu verringern. Eine abschließende Bewertung der Erfahrungen sowie ein Ausblick auf weitere Einsatzszenarien und Entwicklungsschritte runden den Vortrag ab.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Skale your test environment! Containerized End-2-End-Testing @Herbstcampus Nürnberg

  1. 1. Containerized End­2­End Testing  +  ,   Tobias Schneck ConSol Software GmbH
  2. 2. Test Pyramid Robust Independent Isolated Fast
  3. 3. Characteristics of End­2­End Testing Different types of testing: Regression tests Functional approval tests Parallel tests with GUIs are complex Stateful tests: user logins, sessions, history Setup and cleanup of test data Manual effort > effort for test automation
  4. 4. Virtual Machines vs. Container  (explained on the example of Docker)
  5. 5. Immutable Filesystem Layers (explained on the example of Docker)
  6. 6. Advantages of Container Technology Isolation of environments Repository for versioning and distribution Reproducible application environment Dockerfile, docker­compose.yml Starting containers on­the­fly Optimized for parallel execution Less memory overhead Shared Linux kernel
  7. 7. 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  
  8. 8. What's provided by   ? Category Web tests through HTML selectors Testing native UI content (beside of browser content, like PDF's or plugins) Open Source & Java API Headless execution Test writing assistance (recorder, screenshot finder) Automatable / Test result reporting (CI, DB, monitoring environment)
  9. 9. Area: Browser content   (e.g. HTML pages, single page apps) Object identification by DOM elements Detects when Page/AJAX­Requests are loaded (no waits needed) Can handle with modern web frameworks Recorder functionality Assert functionality Java­API Area: Screen content   (e.g. rich clients, browser plugins) Object identification by image patterns (screenshot snippets) Not restricted to a browser, validates and controls what users would see Flexible region patterns for the screen navigation OCR features (experimental) Implemented on top of java.awt.Robot and openCV Java API
  10. 10.  Nagios   OMD   Incinga  Monitoring Integration
  11. 11. Test definition (Java Script)
  12. 12. 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();  }
  13. 13. Call all Sahi Functions // 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);
  14. 14. Fluent API for 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);
  15. 15. 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();  }
  16. 16. Sakuli End­2­End Testing Container
  17. 17. 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
  18. 18. Bakery Demo Setup
  19. 19. Bakery Demo Setup
  20. 20. 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
  21. 21. What's next? Headless execution ­ Linux: VNC & Docker   Windows: ? Make container OpenShift ready (security, source­2­image) Video recording of the test execution (error documentation) Web UI to handle Sakuli test suites Connect 3rd­party test management tools (HP QC, TestRail, ...) Improve test result presentation in CI tools Selenium as an alternative to Sahi
  22. 22. Links https://github.com/ConSol/sakuli  https://github.com/toschneck/sakuli­ example­bakery­testing https://twitter.com/sakuli_e2e https://twitter.com/consol_de
  23. 23. Thank's Herbstcampus! 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.de info@consol.de www.consol.de

×