58
© 2014 andrena objects ag Lars Alvincz, Daniel Knapp | Agilisierung von Testsystemen | OOP 2015, München ‹Nr.› 26.01.2015 Tools in der Testpyramide Wenn eine Größe nicht allen passt… ObjektForum Mannheim 17. Oktober 2016 Daniel Knapp Mustafa Yilmaz

Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2014 andrena objects ag

Lars Alvincz, Daniel Knapp | Agilisierung von Testsystemen | OOP 2015, München‹Nr.› 26.01.2015

Tools in der Testpyramide Wenn eine Größe nicht allen passt…

ObjektForum Mannheim

17. Oktober 2016

Daniel Knapp Mustafa Yilmaz

Page 2: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Motivation

• Wie kann man beim Testen vorgehen? • Welche Arten von Tests sind zu berücksichtigen? • Welche Bestandteile enthält ein Test? • Wie kann man Tests leichtgewichtig implementieren? • Welche Werkzeuge eignen sich für die unterschiedlichen Testtypen?

2

Page 3: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.20163

▪ Effiziente Verteilung der Tests: die Testpyramide

▪ Vorstellung der Beispielapplikation

▪ Vier Teilschritte eines Integrationstests

▪ 1. Initialisierung von Testsystemen

▪ 2. Testdatenbereitstellung

▪ 3. Abhängigkeiten und Kommunikationsschnittstellen

▪ 4. Testlauf und Validieren der Ergebnisse

Agenda

Page 4: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.20164

▪ Effiziente Verteilung der Tests: die Testpyramide

▪ Vorstellung der Beispielapplikation

▪ Vier Teilschritte eines Integrationstests

▪ 1. Initialisierung von Testsystemen

▪ 2. Testdatenbereitstellung

▪ 3. Abhängigkeiten und Kommunikationsschnittstellen

▪ 4. Testlauf und Validieren der Ergebnisse

Agenda

Page 5: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Effiziente Verteilung der Tests: Die Testpyramide

5

Anzahl Testfälle Aufwand, Laufzeit

Page 6: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Effiziente Verteilung der Tests: Die Testpyramide

6

Anzahl Testfälle Aufwand, Laufzeit

Page 7: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

▪ Effiziente Verteilung der Tests: die Testpyramide

▪ Vorstellung der Beispielapplikation

▪ Vier Teilschritte eines Integrationstests

▪ 1. Initialisierung von Testsystemen

▪ 2. Testdatenbereitstellung

▪ 3. Abhängigkeiten und Kommunikationsschnittstellen

▪ 4. Testlauf und Validieren der Ergebnisse

Agenda

7

Page 8: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Beispielapplikation

Java/Javascript-Webapplikation zur Ermittlung eines Kleidungsvorschlags in Form eines Bildes anhand der aktuellen Koordinaten und des aktuellen Wetters.

Eingesetzte Technologien:

• AngularJS

• RESTful Web Services

• Spring Boot

• Mongo DB

• Maven

8

Page 9: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Beispielapplikation Architektur

9

Web-Browser (JavaScript Client)

Clothing Recommendation Web Application

Weather Service Image Service

Location Data Service

Weather Data Service

MongoDB Image Store

Page 10: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Demo

10

Page 11: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

▪ Effiziente Verteilung der Tests: die Testpyramide

▪ Vorstellung der Beispielapplikation

▪ Vier Teilschritte eines Integrationstests

▪ 1. Initialisierung von Testsystemen

▪ 2. Testdatenbereitstellung

▪ 3. Abhängigkeiten und Kommunikationsschnittstellen

▪ 4. Testlauf und Validieren der Ergebnisse

Agenda

11

Page 12: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Teilschritte eines Integrationstests

12

1. Initialisierung des Systems

2. Testdaten- bereitstellung

3. Anpassung Abhängigkeiten und

Schnittstellen

4. Testlauf und Prüfung der Ergebnisse

Page 13: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.201613

▪ Effiziente Verteilung der Tests: die Testpyramide

▪ Vorstellung der Beispielapplikation

▪ Vier Teilschritte eines Integrationstests

▪ 1. Initialisierung von Testsystemen

▪ 2. Testdatenbereitstellung

▪ 3. Abhängigkeiten und Kommunikationsschnittstellen

▪ 4. Testlauf und Validieren der Ergebnisse

Agenda

Page 14: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

1. Teilschritt: Initialisierung

14

Ziel: Das „System under Test“ in einen definierten Zustand bringen, um Tests ausführen zu können

• Einfach zu realisieren auf Unit-Test-Ebene

• Bei Integrationstests werden zentrale Test-Systeme genutzt

• Testläufe und manuelle Benutzung beeinflussen sich gegenseitig • Parallelisierung daher oft nicht möglich • Nutzung des Systems während der Testläufe eingeschränkt • Nach Testläufen ist ggf. eine Bereinigung erforderlich

Page 15: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

• Spring beinhaltet Unterstützung für Integrationstests • Im CDI-Umfeld: Test-Frameworks wie CDI-Unit oder Arquillian

Vorteil:

• Geeignet für das Testen einzelner Komponenten

Nachteile:

• Begrenzte Möglichkeit für Integrationstests (Tests der Persistenzschicht typischerweise gegen In-Memory-Datenbanken)

• Weniger geeignet für End-To-End-Tests

1. Teilschritt: Initialisierung

Komponententests mit Spring / CDI

15

Page 16: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

16

• Als Grundlage wird die Anwendung in ein Artefakt verpackt und in einer Testumgebung installiert

• Im Nachgang werden die Tests gegen diese Umgebung ausgeführt • Herausforderung: Realisierung einer unabhängigen, zuverlässigen

und reproduzierbaren Umgebung • Unterscheidung in drei Kategorien möglich:

• „Klassische“ Server-Systeme • Frameworks wie Spring Boot oder Play • Containerized Applikationen

1. Teilschritt: Initialisierung

End-To-End Tests

Page 17: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

1. Teilschritt: InitialisierungEnd-To-End: „Klassische“ Serversysteme

• Maven-Cargo-Plugin oder Arquillian • Application-Server werden aus dem Testlauf heraus angesteuert • Build-Prozess kann automatisiert Server heranziehen und starten • Vorkonfigurierte Server können in einem Artefakt-Repository

liegen • Maven-Dependency-Plugin kann verwendet werden

• Build-Prozess kann lokal (auf Entwicklungsrechnern) und im Continuous-Integration-System (z.B. Jenkins) verwendet werden

• Kein Einfluss auf Abhängigkeiten und Schnittstellen

17

Page 18: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

1. Teilschritt: Initialisierung

End-To-End:

• Anwendungen laufen nicht in Application Server, sondern enthalten einen eingebetteten Server

• Einfaches Aufsetzen und Starten einer Testumgebung • Anwendung kann in jeder Umgebung wie eine beliebige

Java-Anwendung gestartet werden • java -jar …

• Auch hier: Kein Einfluss auf die externe Umgebung (abhängige Systeme) möglich

18

Page 19: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

1. Teilschritt: Initialisierung

End-To-End: „Containerized“-Applikationen

• Applikationen oder auch Applikationsserver werden in sogenannte Images verpackt

• Start und Testen unabhängig vom eingesetzten Betriebssystem unter gleichen Bedingungen möglich

• Auch bei Legacy-Systemen anwendbar • Die Testumgebung kann im Build-Prozesses mittels

Docker-Maven-Plugin gestartet werden • Es können auch gesamte „Systemlandschaften“ bestehend aus

mehreren Containern gestartet werden

19

Page 20: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Docker

• Build, Ship, Run:

• Verschiedenste Programmiersprachen • Anwendung und Abhängigkeiten in einem Container • Überall lauffähig (Portabilität!)

• Zahlreiche fertige Images können als Grundlage verwendet werden (Docker Hub Repository)

• Docker vs. virtuelle Maschinen: Docker-Container enthalten nicht das gesamte Betriebssystem!

20

Anwendung

AbhängigkeitenDocker Image

Page 21: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Beispielapplikation Architektur

21

Web-Browser (JavaScript Client)

Clothing Recommendation Web Application

Weather Service Image Service

Location Data Service

Weather Data Service

MongoDB Image Store

Docker Container

Docker Container Docker Container

Docker Container

Page 22: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Demo

22

Page 23: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.201623

▪ Effiziente Verteilung der Tests: die Testpyramide

▪ Vorstellung der Beispielapplikation

▪ Vier Teilschritte eines Integrationstests

▪ 1. Initialisierung von Testsystemen

▪ 2. Testdatenbereitstellung

▪ 3. Abhängigkeiten und Kommunikationsschnittstellen

▪ 4. Testlauf und Validieren der Ergebnisse

Agenda

Page 24: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

24

Ziel:

• Reproduzierbare Ausgangssituation für Tests erzeugen

• Automatisierte Verifikation der Testergebnisse basierend auf explizit definierten Annahmen

• Testdaten und zugehörige Datenstrukturen in das System einspeisen

2. Teilschritt: Testdatenbereitstellung

Testdatenbereitstellung

Page 25: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

25

Werkzeuge:

Relationale Datenbanken: Struktur und Daten

• Maven-SQL-Plug-In, Flyway, Liquibase

Ähnliche Werkzeuge existieren auch bei nicht-relationalen Datenbanken (bspw. NoSql): Daten

• mongeez, mongobee

2. Teilschritt: Testdatenbereitstellung

Testdatenbereitstellung

Page 26: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

2. Teilschritt: Testdatenbereitstellung

Wahl der Datenspeicherinstanz

Ziel: Seiteneffekte durch andere Tests/Klienten vermeiden

Unterscheidung dreier Ansätze:

• Produktionsnahe (zentrale) Datenbanken

• Leichtgewichtige In-Memory-Datenbanken

• Containerized Datenbanken

26

Page 27: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

2. Teilschritt: Testdatenbereitstellung

Produktionsnahe (zentrale) Datenbanken

Vorteil:

• Produktionsnahes Verhalten

• ggf. geringer Setup-Aufwand • ggf. bereits mit sinnvollen Daten bestückt

Nachteile:

• Müssen zur Laufzeit gestartet werden bzw. verfügbar sein

• Entwickler können nicht unabhängig voneinander testen

• Daten werden durch Tests verändert • Testsetup nicht zwingend stabil

27

Page 28: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

2. Teilschritt: Testdatenbereitstellung

In-Memory-Datenbanken

Vorteil: • Keine Installation erforderlich • Schnelle und einfache Initialisierung von In-Memory-Datenbanken • Einfache Testdaten-Initialisierung, keine Bereinigung erforderlich • Wiederholbares Testsetup

• Parallele Testläufe

Nachteile: • In-Memory-Datenbanken verhalten sich ggf. anders als produktiv

eingesetzte Datenbanken

28

Page 29: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

2. Teilschritt: Testdatenbereitstellung

Containerized-Datenbanken

Was tun, falls keine In-Memory-Variante verfügbar?

• Container als Alternative

• Vorteile der beiden erstgenannten Ansätze können vereint werden indem Datenbanken ebenfalls in Container verpackt werden

29

Page 30: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Demo

30

Page 31: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.201631

▪ Effiziente Verteilung der Tests: die Testpyramide

▪ Vorstellung der Beispielapplikation

▪ Vier Teilschritte eines Integrationstests

▪ 1. Initialisierung von Testsystemen

▪ 2. Testdatenbereitstellung

▪ 3. Abhängigkeiten und Kommunikationsschnittstellen

▪ 4. Testlauf und Validieren der Ergebnisse

Agenda

Page 32: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

3. Teilschritt Abhängigkeiten und Schnittstellen

Kommuniziert das zu testende System mit externen Systemen oder Anwendungen, so ist es nicht immer möglich das Gesamtsystem in einen testbaren Zustand zu bringen.

Einzelne Subsysteme oder Kollaborateure müssen daher durch geeignete Attrappen ersetzt werden:

• Stabiles Testsetup

• Eigene Komponente kann kontrolliert getestet werden —> auch Ausnahme und Fehlersituationen

• ABER: Implizite Annahmen über transient abhängige Systeme

32

Page 33: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

3. TeilschrittVerwendung von Attrappen

• Programmatischer Ansatz: • Abhängigkeiten werden durch explizit für Testzwecke

implementierte Komponenten ersetzt • Geeignet für einfache Szenarien und Systeme, die in der

Entstehung sind • Bei Legacy-Systemen nicht in jedem Fall möglich

• Capture and Replay Ansatz: • Antworten von Kollaborateuren werden im Betrieb

aufgezeichnet und während des Testlaufs „abgespielt“ • Auch teilweise geeignet bei Legacy-Systemen

33

Page 34: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Beispielapplikation Architektur

34

Web-Browser (JavaScript Client)

Clothing Recommendation Web Application

Weather Service Image Service

Location Data Service

Weather Data Service

MongoDB Image StoreAttrappe

Page 35: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Demo

35

Page 36: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

3. Teilschritt

Testen des Kommunikationsverhaltens

• Integrative Tests, bei denen das zu testende System als Provider einer Schnittstelle fungiert, benötigen während des Testlaufs Werkzeuge mit denen Aufrufer einfach simuliert werden können

• Im Umfeld von RESTful Webservices kann beispielsweise REST-assured verwendet werden

• Bei SOAP-Webservices können aus der Schnittstellenbeschreibung generierte Test-Clients für den Testlauf genutzt werden

36

Page 37: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

• Java-Framework zum Testen und Validieren von REST Services • Unterstützung für JSON und XML (XPath)

• Fluent-Interface-Notation: get(„/book/1“).then().assertThat().body(„book.name", equalTo(„REST“)); given().parameters("firstName", "John", "lastName", „Doe“). when().post("/greetMe"). then().body(hasXPath(„/greeting/firstName[text()='John']"));

37

Page 38: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Beispielapplikation Architektur

38

Web-Browser (JavaScript Client)

Clothing Recommendation Web Application

Weather Service Image Service

Location Data Service

Weather Data Service

MongoDB Image Store

REST-assured

Page 39: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Demo

39

Page 40: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

3. Teilschritt

Testen des Kommunikationsverhaltens

• Verifikation mit Hilfe von Kontrakten, ermöglicht einfaches - unabhängiges - Testen des Clients sowie des Servers

• Schnittstelle wird anhand einer Spezifikationsdatei beschrieben • Während des Build-Prozesses können Client und Server anhand der

Spezifikationsdatei mit Daten versorgt und geprüft werden • Im Microservice-Umfeld wird dazu häufig das Werkzeug Pact

verwendet

40

Page 41: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Pact

• Spezifikation für „Consumer driven contract“-Testing

• JSON-basierte Pact-Dateien als Definition eines Contracts zwischen Client und Server

• Pact-Implementierungen erlauben Client- und Servertests • Implementierungen in diversen Sprachen verfügbar

41

Consumer 1

Consumer 2Provider Pact

Page 42: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Beispielapplikation Architektur

42

Web-Browser (JavaScript Client)

Clothing Recommendation Web Application

Weather Service Image Service

Location Data Service

Weather Data Service

MongoDB Image Store

Pact

Page 43: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Demo

43

Page 44: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.201644

▪ Effiziente Verteilung der Tests: die Testpyramide

▪ Vorstellung der Beispielapplikation

▪ Vier Teilschritte eines Integrationstests

▪ 1. Initialisierung von Testsystemen

▪ 2. Testdatenbereitstellung

▪ 3. Abhängigkeiten und Kommunikationsschnittstellen

▪ 4. Testlauf und Validieren der Ergebnisse

Agenda

Page 45: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

4. Teilschritt

Funktionale Tests

• Oftmals wird für Integrationstests, Oberflächentests und Systemtests ein und dasselbe Werkzeug verwendet

• Aus Entwicklersicht können somit mit wenig Aufwand unterschiedlichste Tests entstehen

• Aus Fachbereichssicht leidet hierbei häufig die Transparenz • Testinhalte sind für außenstehende nicht mehr ohne Entwickler-

Unterstützung einsehbar • Eine Anpassung und Erweiterung der Tests ist ohne Hilfe von

Entwicklern nicht möglich

45

Page 46: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

4. Teilschritt

Funktionale Tests

• Werkzeuge wie FitNesse und Cucumber ermöglichen es Fachbereichen Tests in domänen-spezifischer Sprache zu formulieren

• „ausführbare“ Anforderungen entstehen • Einfaches Testen und Auffinden von Spezifikationslücken möglich • Anforderungen abstrahieren von konkreter technologischer

Implementierung

46

Page 47: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Web-Browser Selenium Grid

Beispielapplikation Architektur

47

Clothing Recommendation Web Application

Weather Service Image Service

Location Data Service

Weather Data Service

MongoDB Image Store

Docker Container

Docker Container Docker Container

Docker Container

Docker Container

Web Driver

Page 48: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Demo

48

Page 49: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Rückblende: Motivation

• Wie kann man beim Testen vorgehen? • Welche Arten von Tests sind zu berücksichtigen? • Welche Bestandteile enthält ein Test? • Wie kann man Tests leichtgewichtig implementieren? • Welche Werkzeuge eignen sich für die unterschiedlichen Testtypen?

49

Page 50: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Teilschritte eines Integrationstests

50

1. Initialisierung des Systems

2. Testdaten- bereitstellung

3. Anpassung Abhängigkeiten und

Schnittstellen

4. Testlauf und Prüfung der Ergebnisse

Page 51: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

1. Initialisierung des Testsystems

51

Spring, CDI-Unit, Arquillian, Maven-

Cargo-Plugin, Docker, Spring Boot

2. Testdaten- bereitstellung

3. Anpassung Abhängigkeiten und

Schnittstellen

4. Testlauf und Prüfung der Ergebnisse

Page 52: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

2. Testdatenbereitstellung

52

Spring, CDI-Unit, Arquillian, Maven-

Cargo-Plugin, Docker, Spring Boot

Docker, Flyway, Liquibase,

In-Memory-DB vs. Containerized-DB

3. Anpassung Abhängigkeiten und

Schnittstellen

4. Testlauf und Prüfung der Ergebnisse

Page 53: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

3. Abhängigkeiten und Schnittstellen

53

Spring, CDI-Unit, Arquillian, Maven-

Cargo-Plugin, Docker, Spring Boot

Docker, Flyway, Liquibase,

In-Memory-DB vs. Containerized-DB

Attrappen, Mocks, Pact, REST-assured, Docker

4. Testlauf und Prüfung der Ergebnisse

Page 54: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

4. Funktionale Tests

54

Spring, CDI-Unit, Arquillian, Maven-

Cargo-Plugin, Docker, Spring Boot

Docker, Flyway, Liquibase,

In-Memory-DB vs. Containerized-DB

Attrappen, Mocks, Pact, REST-assured, Docker

Selenium, Cucumber, FitNesse, Docker

Page 55: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

55

Spring, CDI-Unit, Arquillian, Maven-

Cargo-Plugin, Docker, Spring Boot

Docker, Flyway, Liquibase,

In-Memory-DB vs. Containerized-DB

Attrappen, Mocks, Pact, REST-assured, Docker

Selenium, Cucumber, FitNesse, Docker

Continuous Integration

Page 56: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

56

Spring, CDI-Unit, Arquillian, Maven-

Cargo-Plugin, Docker, Spring Boot

Docker, Flyway, Liquibase,

In-Memory-DB vs. Containerized-DB

Attrappen, Mocks, Pact, REST-assured, Docker

Selenium, Cucumber, FitNesse, Docker

Continuous Integration

Werkzeugkasten für agiles Testen

Page 57: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Fazit• Testtypen bewusst machen! • Werkzeugauswahl sollte sich nach Testtyp richten • Testparallelisierung muss gewährleistet werden

• Alle Schritte sollten automatisiert werden (CI !)

57

Page 58: Tools in der Testpyramide - andrena objects...17.10.2016 ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz ‹Nr.› • Spring beinhaltet Unterstützung

© 2016 andrena objects ag

ObjektForum Mannheim, Tools in der Testpyramide, Daniel Knapp, Mustafa Yilmaz17.10.2016

‹Nr.›

Links

58

https://github.com/andrena/testing-tools-demo.git