SlideShare ist ein Scribd-Unternehmen logo
1 von 70
Downloaden Sie, um offline zu lesen
Mögen die Tests mir
dir sein
Mögen die Tests mir
dir sein
(a.k.a. dämlicher Titel^2)
@codepitbull
2 Jahre in 45 Minuten
Release all 2 Wochen
Release all 2 Wochen
CD-Fähigkeit für Testing / Bug-
Fixes
Release all 2 Wochen
CD-Fähigkeit für Testing / Bug-
Fixes
OnPrem-Releasing
2018
2018
2018
2018
2018
2018
2018
2018
2018
FUNFUNFUN!!11!
DEV

- Unit-Tests

- Integration Tests
QA

- Regressionstests
- Beratung der Teams
DEV

- Unit-Tests

- Integration Tests
QA

- Regressionstests
- Beratung der Teams
SRE

- Infra-Automatisierung

- Health Checks + SLOs
DEV

- Unit-Tests

- Integration Tests
QA

- Regressionstests
- Beratung der Teams
SRE

- Infra-Automatisierung

- Health Checks + SLOs
DEV

- Unit-Tests

- Integration Tests
Tests sind …
Tests sind …
Dokumentation
Tests sind …
Dokumentation
Sicherheitsnetz
Tests sind …
Dokumentation
Sicherheitsnetz
Niemals fertig
Was sind Integrationstests?
Was sind Integrationstests?
Tests mit Infrastruktur
https://www.baeldung.com/maven-integration-test
Dev-Jenkins
Dev-Jenkins
IT-Jenkins
Dev-Jenkins
IT-Jenkins
Hugh-commercial-DB-Jenkins
Integrationstests sind …
Integrationstests sind …
Schwer zu bauen
Integrationstests sind …
Schwer zu bauen
Schwer zu pflegen
Integrationstests sind …
Schwer zu bauen
Schwer zu pflegen
Teuer in der Ausführung
Integrationstests sind …
Schwer zu bauen
Schwer zu pflegen
Teuer in der Ausführung
Eigentlich nicht notwendig …
public class CockroachContainer extends GenericContainer<CockroachContainer> {
private static final String IMAGE_NAME = "cockroachdb/cockroach:v19.1.0";
private static final int PORT = 26257;
private final String databaseName;
public CockroachContainer(String databaseName) {
super(new ImageFromDockerfile()
.withDockerfileFromBuilder(builder -> builder.from(IMAGE_NAME)
.cmd("start", "--insecure")
.build()));
withExposedPorts(PORT);
this.databaseName = databaseName;
}
public String getUsername() {
return "maxroach";
}
public String getPassword() {
return "";
}
public String getJdbcUrl() {
return "jdbc:postgresql://" + this.getContainerIpAddress() + ":" + this.getMappedPort(PORT) + "/" + this.databaseName;
}
@Override
public void start() {
super.start();
try {
ExecResult sql = execInContainer("/cockroach/cockroach", "sql", "--insecure", "--execute=CREATE DATABASE "
+ databaseName + ";CREATE USER IF NOT EXISTS maxroach;GRANT ALL ON DATABASE „
+ databaseName + " TO maxroach;CREATE TABLE " + databaseName + ".schema_migrations (version INT NOT NULL,dirty BOOL NOT NULL);");
System.out.println(sql.getStderr());
System.out.println(sql.getStdout());
initialize();
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
}
public void executeSql(String sql) throws IOException, InterruptedException {
ExecResult execResult = execInContainer("/cockroach/cockroach", "sql", "--insecure", "--database", databaseName, "--execute=" + sql);
System.out.println(execResult.getStdout());
System.out.println(execResult.getStderr());
if (execResult.getStderr().contains("Failed running")) {
fail("Failed to run SQL '" + sql + "':n" + execResult.getStderr());
}
}
private void initialize() {
try{
InitScriptLocation initScripts = new InitScriptLocation("../instanactl/migrations/cockroachdb/" + databaseName + "/init", true);
for (InitScriptLocation.Script script : initScripts.listFiles()) {
System.out.println("Executing init script: " + script.getFileName());
executeSql(script.readContent());
}
InitScriptLocation migrationScripts = new InitScriptLocation("../instanactl/migrations/cockroachdb/" + databaseName + "/migrations", true);
for (InitScriptLocation.Script script : migrationScripts.listFiles()) {
System.out.println("Executing migration: " + script.getFileName());
executeSql(script.readContent());
}
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
}
@Container
static CockroachContainer cockroachContainer = new CockroachContainer("butlerdb");
Sollte ein parametrisierter Test sein …
@RegisterExtension
JunitGuiceAdapter junitGuiceAdapter = JunitGuiceAdapter.builder()
.withZookeeper()
.withClickhouse()
.withModule(new ClickHouseModuleExt())
.withModule(new AppDataReaderModule())
.withModule(new AppDataReaderTestModule())
.build();
Muahahah!
2020
2020
2020
2020
56 Minuten 

16 CPU / 64 GB RAM
QA

- Regressionstests
- Beratung der Teams
SRE

- Infra-Automatisierung

- Health Checks + SLOs
DEV

- Unit-Tests

- Integration Tests
Split by @Tag
Mögen die Tests mit dir sein
Mögen die Tests mit dir sein

Weitere ähnliche Inhalte

Ähnlich wie Mögen die Tests mit dir sein

Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!gedoplan
 
Integration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineIntegration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineOPEN KNOWLEDGE GmbH
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
JEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine EinführungJEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine Einführunggedoplan
 
Microprofile-Anwendungen mit Quarkus
Microprofile-Anwendungen mit Quarkus Microprofile-Anwendungen mit Quarkus
Microprofile-Anwendungen mit Quarkus gedoplan
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
Legacy Code refaktorisieren
Legacy Code refaktorisierenLegacy Code refaktorisieren
Legacy Code refaktorisierenHendrik Lösch
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...Marc Müller
 
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon DickmeißReal Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon DickmeißOPITZ CONSULTING Deutschland
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!OPEN KNOWLEDGE GmbH
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit antroskakori
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Ralf Sigmund
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauenjohofer
 
Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Torsten Kleiber
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Joachim Baumann
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebAndreas Schmidt
 
Schnell, schneller, Quarkus!!
Schnell, schneller, Quarkus!!Schnell, schneller, Quarkus!!
Schnell, schneller, Quarkus!!gedoplan
 
Lightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPALightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPAmh0708
 
Architektur und Code im Einklang [DeveloperCamp 2017]
Architektur und Code im Einklang [DeveloperCamp 2017]Architektur und Code im Einklang [DeveloperCamp 2017]
Architektur und Code im Einklang [DeveloperCamp 2017]Markus Harrer
 

Ähnlich wie Mögen die Tests mit dir sein (20)

Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!Testen im EE-Umfeld – Seien Sie feige!
Testen im EE-Umfeld – Seien Sie feige!
 
Integration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-PipelineIntegration von Security-Checks in die CI-Pipeline
Integration von Security-Checks in die CI-Pipeline
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
JEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine EinführungJEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine Einführung
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Microprofile-Anwendungen mit Quarkus
Microprofile-Anwendungen mit Quarkus Microprofile-Anwendungen mit Quarkus
Microprofile-Anwendungen mit Quarkus
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
Legacy Code refaktorisieren
Legacy Code refaktorisierenLegacy Code refaktorisieren
Legacy Code refaktorisieren
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
 
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon DickmeißReal Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
Real Application Testing - DOAG SIG Database 2010 - Simon Dickmeiß
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit ant
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 
Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im BetriebContinuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
Continuous Lifecycle 2013: Testgetriebenes Arbeiten im Betrieb
 
Schnell, schneller, Quarkus!!
Schnell, schneller, Quarkus!!Schnell, schneller, Quarkus!!
Schnell, schneller, Quarkus!!
 
Lightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPALightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPA
 
Architektur und Code im Einklang [DeveloperCamp 2017]
Architektur und Code im Einklang [DeveloperCamp 2017]Architektur und Code im Einklang [DeveloperCamp 2017]
Architektur und Code im Einklang [DeveloperCamp 2017]
 

Mehr von codepitbull

Vert.x kubernetes
Vert.x kubernetesVert.x kubernetes
Vert.x kubernetescodepitbull
 
DDD and reactive frameworks
DDD and reactive frameworksDDD and reactive frameworks
DDD and reactive frameworkscodepitbull
 
Fast data und IoT
Fast data  und IoTFast data  und IoT
Fast data und IoTcodepitbull
 
Reactive Microservices mit Vert.x 3
Reactive Microservices mit Vert.x 3Reactive Microservices mit Vert.x 3
Reactive Microservices mit Vert.x 3codepitbull
 
Continuous load testing
Continuous load testingContinuous load testing
Continuous load testingcodepitbull
 
Reactive streams
Reactive streamsReactive streams
Reactive streamscodepitbull
 
Eventsourcing ftw
Eventsourcing ftwEventsourcing ftw
Eventsourcing ftwcodepitbull
 
Vertx for worlddomination
Vertx for worlddominationVertx for worlddomination
Vertx for worlddominationcodepitbull
 

Mehr von codepitbull (12)

Homeoffice
HomeofficeHomeoffice
Homeoffice
 
Vert.x kubernetes
Vert.x kubernetesVert.x kubernetes
Vert.x kubernetes
 
DDD and reactive frameworks
DDD and reactive frameworksDDD and reactive frameworks
DDD and reactive frameworks
 
Fast data und IoT
Fast data  und IoTFast data  und IoT
Fast data und IoT
 
Reactive Microservices mit Vert.x 3
Reactive Microservices mit Vert.x 3Reactive Microservices mit Vert.x 3
Reactive Microservices mit Vert.x 3
 
Continuous load testing
Continuous load testingContinuous load testing
Continuous load testing
 
Reactive streams
Reactive streamsReactive streams
Reactive streams
 
Eventsourcing ftw
Eventsourcing ftwEventsourcing ftw
Eventsourcing ftw
 
Wicket 6
Wicket 6Wicket 6
Wicket 6
 
MongoDB
MongoDBMongoDB
MongoDB
 
Vertx for worlddomination
Vertx for worlddominationVertx for worlddomination
Vertx for worlddomination
 
Event loop
Event loopEvent loop
Event loop
 

Mögen die Tests mit dir sein