Deployen op vrijdagmiddag zonder stress Using Testcontainers, Playwright & Azure DevOps
Bas Stoker, 11 april 2024
Slide 2
Slide 3
About me • Fullstack developer bij de NS • 20 jaar ervaring met software development • Enthousiast over toekomst van frontenddevelopment en test-technieken in het bijzonder
Slide 4
Slide 5
Slide 6
Inhoud • Trends in testing • CI/CD en DevOps • Testcontainers • Playwright • Case-study: NS Bijsturing Materieel (BAM) • Live demo systeemtest ⚡ • Tips & Tricks
Slide 7
Slide 8
Continuous Deployment Continuous testing?
• Veel verantwoordelijkheid bij het development-team • Vaak geen dedicated testers meer • Resultaat: Alle testen zijn geautomatiseerd
Slide 9
Slide 10
Slide 11
“Write tests. Not too many. Mostly Integration” • Quote van Kent C. Dodds • Hoger in de testpyramide wordt het vertrouwen in de test hoger • Bestaande aannames dat e2e-tests duur zijn om te onderhouden kloppen niet meer
https://kentcdodds.com/blog/write-tests
Slide 12
“You’re probably mocking too much”
https://clayshentrup.medium.com/tests-dependencies-65f592a46529
Slide 13
Testcontainers Alternatief voor…
• In-memory alternatieven zoals H2 als database • Shell scripts • Docker compose • Zelf vanuit Java Docker-api aanroepen (veel werk)
Slide 14
Testcontainers Testen met echte dependencies
• Docker Containers kennen we al van o.a. Kubernetes • Open Source library, begonnen als Java library • Totale lifecycle van Docker containers: • Startup • Cleanup
Slide 15
Slide 16
Testcontainers
Slide 17
Veel bestaande containers
Slide 18
Testcontainers
Docker
Slide 19
Slide 20
• Zit een supergoed team achter van Microsoft • Support voor MacOS / Linux / Windows • Browsers worden automatisch gemanaged • Sneller en minder aky dan bijv. Selenium
fl
• Handige functies zoals trace, slomo, en video/screenshot opnames
Slide 21
Slide 22
Slide 23
Project: NS nieuwbouw BAM • Realtime bijsturen van al het materieel (Intercity / Sprinters / Internationaal) • Project van vier agile DevOps teams • Microservices-architectuur • Meeste data asynchroon via queues: • GPS-vertragingsdata van treinen • Wijzigingen in de materieelplanning
Slide 24
Slide 25
BAM Client • Verantwoordelijkheid van 1 team • Bestaat uit twee microservices • Backend for frontend (ontvangen MQ-berichten, caching etc…) • Frontend (ReactJS SPA, ontsloten via NGINX web server)
Slide 26
Project: BAM Client
Slide 27
BAM Client Systeemtest • We testen exact de images die ook naar Productie gaan • Con g o.b.v. Env Variables (12 factor app) • Alleen de testcode en de browser draaien niet in Docker • Alleen Docker en een JVM nodig, Playwright installeert de browsers • Lokaal draai je precies dezelfde test als in de CI/CD-pipeline
fi
https://12factor.net/
Slide 28
Slide 29
Slide 30
Slide 31
Demo time
Slide 32
Benefits • Als team geeft deze test als extra vangnet veel vertrouwen • Ook handig om lokaal de app te draaien tijdens development / debugging • Testen van bijv. een Keycloak-upgrade kan in 5 minuten • Genereren van documentatie die altijd up-to-date is met screenshots etc.
Slide 33
Next steps • Opleidingsdoeleinden • Genereren van documentatie die altijd up-to-date is met screenshots etc. • Duurtest toevoegen (bijv. ’s nachts uitvoeren)
Slide 34
Tips & Tricks Playwright • Demo’s op YouTube • playwright.dev
Slide 35
Tips & Tricks Testcontainers • Presentatie’s op Youtube (Devoxx) • https://github.com/testcontainers • Localstack voor AWS services
https://www.youtube.com/watch?v=0kXEwo0XFaY