Continuous Testing Days, Mai 2021, online: Vortrag von Mario-Leander Reimer (@LeanderReimer, Principal Software Architect bei QAware)
== Please download slides if blurred! ==
Abstract: Viele Teams straucheln immer noch dabei regelmäßig gut getestete Produktinkremente zu liefern. Normalerweise mit der gleichen alten Ausrede: speziell die (nicht)-funktionale Tests seien zu aufwändig und zu teuer umzusetzen. Doch genau das Gegenteil ist der Fall!
3. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
3
"Software Is Eating the World.“
Marc Andreessen, 20th August 2011
9. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
9
Continuous delivery (CD) is a software engineering
approach in which teams produce software in short cycles,
ensuring that the software can be reliably released at any
time .… It aims at building, testing, and releasing software
with greater speed and frequency.
10. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
10
Continuous
Delivery
Low Risk
Releases
Less
Rework
Fast Time
to Market
Better
Products
Lower
Costs
Happier
Teams
Happier
Users
Loosely Coupled Architectures
Maintainable Code
Empowered Teams
Continuous Security from Day 1
Test
Automation
Continuous
Integration
GitOps
Deployment
Automation
Monitoring and Alerting
Input Output
11. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
11
Continuous
Delivery
Low Risk
Releases
Less
Rework
Fast Time
to Market
Better
Products
Lower
Costs
Happier
Teams
Happier
Users
Loosely Coupled Architectures
Maintainable Code
Empowered Teams
Continuous Security from Day 1
Test
Automation
Continuous
Integration
GitOps
Deployment
Automation
Monitoring and Alerting
12. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
12
Continuous
Delivery
Low Risk
Releases
Less
Rework
Fast Time
to Market
Better
Products
Lower
Costs
Happier
Teams
Happier
Users
Loosely Coupled Architectures
Maintainable Code
Empowered Teams
Continuous Security from Day 1
Test
Automation
Continuous
Integration
GitOps
Deployment
Automation
Monitoring and Alerting
13. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
Eine singuläre, lineare CI/CD Pipeline ist nicht optimal:
verzögertes Feedback mit langen Build-Deploy Zyklen.
13
Check-In Build Test Integrate
Deploy to
Production
Automated
Acceptance Tests
Manual
Auto Auto Auto Auto?
Acceptance
Security
Performance
Diese Tests werden häu
fi
g rausgeschoben und erst gegen Sprint-Ende ausgeführt.
Und welche zuerst? Ist Funktionalität wichtiger als Security oder Performance?
14. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
Eine Microservice Architektur mit vielen Down-Stream
Abhängigkeiten ist komplex und schwierig zu testen.
14
Cluster
Microservice
A
Microservice
B
External
System B
TEAM A TEAM B UNKNOWN
Microservice
C
TEAM C
External
System A
15. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
Die Lösung: alle (nicht)-funktionalen Tests einer Microservice
Architektur laufen kontinuierlich auf der selben Umgebung.
15
Check-In Build Integrate
Auto Auto Auto
Smoke
Tests
Quality
Acceptance
Security
Performance
Auto Auto?
Check &
Report
Continuous
Runs inside
the cluster
Test
Deploy to
Production
16. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
Architecture Fitness Functions validieren kontinuierlich
die (nicht)-funktionalen Eigenschaften des Systems.
16
https://www.thoughtworks.com/de/radar/techniques/architectural-
fi
tness-function
17. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
Beispiele für Architecture Fitness Functions
17
https://www.thoughtworks.com/de/insights/articles/
fi
tness-function-driven-development
describe "Performance" do
it "completes a transaction under 2 seconds" do
expect(k6.check_transaction_round_trip_time()).to < 2
end
it "has less than 10% error rate for 10000 transactions" do
expect(k6.check_error_rate_for_transactions(10000)).to < .1
end
end
describe "Security" do
describe “Static Analysis” do
it "should not have plaintext secrets in codebase" do
expect(code.has_secrets_in_codebase()).to_not be(true)
end
end
describe “Dynamic Analysis” do
it "should not have any of the OWASP Top 10" do
expect(zap.has_owasp_top_10_vulnerabilities()).to be(false)
end
end
end
18. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
18
Code & Demos
https://github.com/qaware/continuous-k6k8s
https://github.com/qaware/continuous-zapk8s
https://github.com/qaware/continuous-atdd
19. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
Load Testing for Engineering Teams
• Made for Developers. Das k6 API und die CLI sind einfach zu nutzen.
• Out-of-the-box Docker Support. Kann ganz einfach als Container
ausgeführt werden.
• Geeignet für Smoke Tests, Load Tests, Stress Tests und Soak Tests.
• Unterstützt REST, GraphQL, gRPC und Websockets.
• Ergebnis Visualisierung via DataDog, CloudWatch, In
fl
uxDB+Grafana,
New Relic und viele weitere.
• Gute, ausführliche Dokumentation und hilfreiche Community.
19
20. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
OWASP Zed Attack Proxy (ZED)
• Weiter verbreiteter und bekannter Open Source Webapp Scanner
• ZAP bietet ein mächtiges API für Security Scanning Automatisierung
• Intercepting Proxy, Active und Passive scanner, HTTP Spider, Brute
Force Scanner, Port Scanner, OpenAPI v3, Web Sockets.
• ZAP's Docker Images bietet einen einfache Weg ZAP auszuführen,
speziell in CI/CD Umgebungen: Baseline + Full API Scan, Web UI.
• Ausführliche Dokumentation. Internationale Community.
20
21. // Continuous Testing Day // Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s // @LeanderReimer #cloudnativenerd #qaware
Very Groovy Browser Automation
• Cross Browser Automation: Chrome, Firefox, Safari, Selenium Hub, …
• Mächtige, einfach zu erlernende Groovy based DSL. Einfache Content
Navigation und Zugriff inspiriert von jQuery.
• Built-in Support des Page Object Pattern für wart bare und stabile UI Tests.
• Unterstützung für Synchronität und dynamischen Content.
• Unterstützung und Integration von zahlreichen Test Frameworks: Spock,
Unit, TestNG und Cucumber
• Gute und einfache Build Tool Integration für Maven und Gradle
21