72
Java Forum Stuttgart, 04.07.2019 Testen von und mit Infrastruktur “Integration Testing Done Right“ Sandra Parsick [email protected] @SandraParsick

“Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

  • Upload
    dohanh

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

Page 1: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Java Forum Stuttgart, 04.07.2019

Testen von und mit Infrastruktur“Integration Testing Done Right“ 😉

Sandra [email protected]

@SandraParsick

Page 2: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Zu meiner Person● Sandra Parsick

● Freiberuflicher Softwareentwickler und Consultant im Java-Umfeld

● Schwerpunkte:

– Java Enterprise Anwendungen

– Agile Methoden

– Software Craftmanship

– Automatisierung von Entwicklungsprozessen

● Trainings

● Workshops

● Softwerkskammer Ruhrgebiet

● Oracle Groundbreaker Ambassador

● Twitter: @SandraParsick

● Homepage: https://www.sandra-parsick.de

● Blog: http://blog.sandra-parsick.de

● E-Mail: [email protected]

Page 3: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Motivation

Page 4: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 5: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 6: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 7: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 8: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Testen mit Infrastruktur

Page 9: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Status Quo

● Interaktion mit Infrastruktur wird recht spät getestet

– Feedback bei Fehlern recht spät

● Abhängig von einer bestimmten Infrastruktur

– Manchmal auch schon beim Build (Bad smell)

– False negative Fehlerquote recht hoch

– Aufwändiges Setup

– Testausführung langsam

Page 10: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Integration vs Integrated Tests

Integrated TestsA test that will pass or fail based on the correctness of another

system.J.B.Rainsberger

Signs for having Integrated Tests:● We spin up other services in a local testing environment● We test against other services in a shared testing

environment● Changes to your system breaks tests for other systems

from Spotify Blog Post

Page 11: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 12: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Anforderungen

● Build muss unabhängig von anderen Systemen sein

– Minimierung der false negative Fehler

– Entkopplung zwischen den Entwicklern

● Feedback bei Fehlern so schnell wie möglich

● Testausführung beschleunigen

Page 13: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

HTTP Datenbank

Page 14: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

HTTP

Page 15: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Mocking HTTP Calls

● MockServer (http://mock-server.com/ )

● WireMock (http://wiremock.org/ )

Quelle: mock-server.com

Page 16: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

MockServer

● Java und JavaScript API

● Java Rule

● Maven Plugin

● Npm Plugin

● Grunt Plugin

● Standalone (CLI)

● Docker Container

Page 17: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

MockServer

Quelle: mock-server.com

Page 18: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

MockServer

Quelle: mock-server.com

Page 19: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

http://swapi.co/api/starships

Page 20: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 21: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 22: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Don’t mock API you don’t own

Page 23: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Verified FakesTests, die die richtige API aufrufen und verifizieren ob die

Test Doubles richtig sind

Page 24: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

MockServer – Weitere Features

Quelle: mock-server.com

Page 25: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 26: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Eigene HTTP Endpoints

● Jersey → JerseyTest

● Spring MVC → MockMvc

● Framework-unabhängig

– REST Assured (http://rest-assured.io/ )● „Killer“-Feature: JsonPath, XmlPath● Scala Support● Spring MVC Support● Given-when-then Struktur

Page 27: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Rest Assured - JsonPath

http://localhost:8080/lotto

Quelle: Rest Assured Doc

Page 28: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Rest Assured - XMLPath

http://localhost:8080/greetXML

Quelle: Rest Assured Doc

Page 29: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Rest Assured – Spring MVC

Page 30: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Rest Assured – Spring MVC

Page 31: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Unit Tests für Endpoints

Page 32: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Datenbanken

Page 33: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Datenbanken● Embedded Datenbanken

– H2, Derby

– Nicht Produktionsnah

– Nicht alles testbar

● Standalone Datenbanken

– Abhängigkeit zur bestimmten Infrastruktur

● Shared Datenbanken

– Abhängigkeiten zwischen Entwickler

– Hohe false negative Fehlerrate

Page 34: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 35: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 36: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 37: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 38: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Testcontainers● Temporary database containers - spezielle MySQL, PostgreSQL,

Oracle XE und Virtuoso container ● Webdriver containers - Dockerized Chrome oder Firefox browser

für Selenium/Webdriver Operationen mit automatischer Videoaufnahme

● Weitere spezifische Container – Elasticsearch, Kafka, Apache Pulsar, Mockserver, Toxiproxy, Nginx, Hashicorp Vault

● Generic containers – irgendein Docker Container● Docker compose – Wiederverwendung von Docker Compose

YAML Datei● Dockerfile containers – Container direkt von einem Dockerfile

Page 39: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Docker Maven Plugin (DMP)

● fabric8io/docker-maven-plugin (http://dmp.fabric8.io )

● Kann Docker Image bauen

● Aber auch Container starten und stoppen

Page 40: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Maven Phase: Integration-Test● Ausgangspunkt:

– Es gibt Integrationstests gegen embedded oder standalone Datenbank

● Improvement:

– DMP startet Container vor den Tests (pre-integration-test)

– DMP stoppt Contianer nach den Tests (post-integration-test)

Page 41: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Was es noch so gibt

Page 42: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 43: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 44: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Citrus Integration Testing

Page 45: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Resilience Tests● ToxyProxy - framework for simulating

network conditions (http://toxiproxy.io/ )– NEW: Testcontainers Integration

● Chaos Monkey for Spring Boot – Chaos Engineering for Spring Boot Apps (https://codecentric.github.io/chaos-monkey-spring-boot )

Page 46: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Testen von Infrastruktur

Page 47: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 48: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Infrastructure as Code

● Shell Skripte

– Bash, ksh, etc

● Provisionierungswerkzeuge

– Puppet, Chef, Salt und Ansible

– Terraform

● Container

– Dockerfile

Page 49: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Provisionierungswerkzeuge(Beispiel Ansible)

● Codequalität

– Ansible-lint (https://github.com/ansible/ansible-lint)

– yamllint (Yaml allgemein)(https://github.com/adrienverge/yamllint)

● Funktionale Qualtität

– Serverspec (Tool unabh.)(https://serverspec.org/ )

– Testinfra (Tool unabh.)(https://testinfra.readthedocs.io/en/latest/ )

– Goss (Tool unabh.)(https://goss.rocks/ )

Page 51: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Ansible-Lint

Page 52: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

YAML is everywhere● Ansible● Saltstack● Docker Compose● Kubernetes● Goss

Page 53: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

yamllint

Page 54: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

testinfra

Page 55: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

testinfra

Page 57: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Jenkins Pipeline

Page 58: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Geht es nicht einfacher?

Page 59: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Für Ansible: Molecule

Page 60: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Molecule● Spezialisiert für Ansible Roles● Wrapper um andere Werkzeuge, um

komplette Test Szenarien aufzubauen– Driver Provider: Docker (default), Vagrant,

Azure, EC2– Lint Provider: yamllint (default), ansible-lint,

flake8 (for test code)– Verifier framework: TestInfra (default)

Page 61: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Molecule

Page 62: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Molecule

Page 63: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Molecule

Page 64: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Container (Beispiel Docker)● Codequalität

– Dockerlint (https://github.com/RedCoolBeans/dockerlint )

– Haskell Dockerfile Linter – hadolint (https://github.com/hadolint/hadolint)

● Funktionale Qualität

– Testinfra

– Serverspec

– Goss

– Container Structure Tests (https://github.com/GoogleContainerTools/container-structure-test)

Page 65: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig
Page 66: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Hadolint

Page 67: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Container Structure Tests

Page 68: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Container Structure Tests

Vorher: docker build -t sparsick/tomcat9 -f tomcat.df .

Page 69: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Fazit

Page 70: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

[email protected]

@SandraParsickhttps://github.com/sparsick/infra-testing-talk

Page 71: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Literatur● http://coding-is-like-cooking.info/2018/04/pre-tested-int

egration-back-to-the-basis-of-ci/

● http://blog.thecodewhisperer.com/permalink/integrated-tests-are-a-scam

● http://blog.thecodewhisperer.com/permalink/clearing-up-the-integrated-tests-scam

● https://bee42.com/de/blog/The_dark_age_of_container_testing/

● https://labs.spotify.com/2018/01/11/testing-of-microservices/

● https://martinfowler.com/bliki/IntegrationTest.html

● https://codewithoutrules.com/2016/07/31/verified-fakes/

Page 72: “Integration Testing Done Right“ - java-forum-stuttgart.de · Status Quo Interaktion mit Infrastruktur wird recht spät getestet – Feedback bei Fehlern recht spät Abhängig

Literatur● Infrastructure as Code: Managing Servers in the Cloud

von Kief Morris, O‘Reilly Media