This document discusses Testkube, a Kubernetes-native testing framework that allows running tests directly in clusters without needing to wrap tests in docker images. Testkube provides modular architectures for adding new test types and executors. It avoids vendor lock-in and makes it possible to decouple test execution from build processes. Architectural fitness functions are also discussed as a way to continuously validate non-functional requirements of systems.
3. Perfect and Complete Continuous Delivery is not so easy!
QAware | 3
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
5. Monolithic, linear CI/CD pipelines are suboptimal and will
result in delayed feedback and long release cycles.
QAware | 5
Usually delayed until the end of sprint or the release.
Which one first? Functionality vs. Performance vs. Security?
6.
7. A microservice architecture with many downstream
dependencies is complex and really hard to test.
QAware | 7
Cluster
Microservice
A
Microservice
B
Microservice
C
External
System X
External
System Y
Team A Team C Team B Unknown
8. Why not run (non)-functional tests against a
cloud-native microservice architecture
continuously or triggered on the cluster itself?
10. Core Principles and Concepts of a Product Assembly Line
QAware | 10
■ Separation of Concerns
– Do one thing, and do one thing well.
– Separate and explicitly model distinct development lifecycle phases: Build, CI, Deploy, E2E Test, …
■ Choreography over Orchestration
– Codified or configured downstream dependencies in the pipelines and triggers must be avoided.
– Loose coupling. Tests and Suites do not need knowledge about components or environments
– The product assembly line (PAL) is event-driven: time-based, commit based, deployment-based,
release-based, on-demand
■ GitOps Principles
– All individual and E2E product tests as well as required components are GitOps managed. Auditable.
Versioned. Easy Time Travel (e.g. revert to previous version)
– Current Test BOM (Bill of Material) can be determined via individual state repositories
■ Holistic Quality
– Single source of (quality) truth. All relevant quality attributes are aggregated.
11. Conceptual PAL Architecture
QAware | 11
Packages
Package
publish
update
Run
deploy
watch
Deploy
watch
Dev GitOps
Build
push
Checkout Build Test Quality Package
Dev
Test (E2E, NFA)
trigger
test
Tests
12. Hello Testkube.
Your friendly cloud-native testing framework for Kubernetes
QAware | 12
■ Testkube natively integrates test orchestration and execution into Kubernetes and your CI/CD or
GitOps pipeline
■ Avoids vendor lock-in for test orchestration and execution in CI/CD pipelines
■ Makes it possible to decouple test execution from build processes; test engineers should be able to
run specific tests whenever needed
■ Makes it easy to run any kind of tests - functional, load/performance, security, compliance, etc. in
your clusters, without having to wrap them in docker-images or providing network access
■ Provides a modular architecture for adding new types of tests and executors
■ https://github.com/kubeshop/testkube
13. Demo Architecture and Testkube Concepts
QAware | 13
default
testkube
Deployment
Testkube Dashboard
Webhook
Receiver
Testkube API Server
CRDs
CI/CD
System
Dev
Executors
Test
Test
Suite
Deployment
trigger
flux-system
run
Mongo
DB
NATS
Minio
S3
CLI
start
store
watch
Test
Trigger
SUT
Monitoring
System
15. Architectural fitness functions continuously validate the
(non)-functional requirements aka -illities of a system.
QAware | 15
https://www.thoughtworks.com/de/radar/techniques/architectural-fitness-function
16. Some Architectural Fitness Function Examples
QAware | 16
https://www.thoughtworks.com/de/insights/articles/fitness-function-driven-development
describe "Performance" do
it "completes a transaction in 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
17. Conceptual PAL Architecture
QAware | 17
Packages
Package
publish
update
Run
deploy
watch
Deploy
watch
Dev GitOps
Build
push
Checkout Build Test Quality Package
Dev
Test (E2E, NFA)
trigger
test
Tests
Quality
Cockpit
report
PO
report
Build Status
Code Quality
Test Results
fitness
test
promote ?