A presentation at DevTalents TechDays in in Utrecht, Netherlands by Bas Stoker
Deployen op vrijdagmiddag zonder stress Using Testcontainers, Playwright & Azure DevOps Bas Stoker, 11 april 2024
About me • Fullstack developer bij de NS • 20 jaar ervaring met software development • Enthousiast over toekomst van frontenddevelopment en test-technieken in het bijzonder
Inhoud • Trends in testing • CI/CD en DevOps • Testcontainers • Playwright • Case-study: NS Bijsturing Materieel (BAM) • Live demo systeemtest ⚡ • Tips & Tricks
Continuous Deployment Continuous testing? • Veel verantwoordelijkheid bij het development-team • Vaak geen dedicated testers meer • Resultaat: Alle testen zijn geautomatiseerd
“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
“You’re probably mocking too much” https://clayshentrup.medium.com/tests-dependencies-65f592a46529
Testcontainers Alternatief voor… • In-memory alternatieven zoals H2 als database • Shell scripts • Docker compose • Zelf vanuit Java Docker-api aanroepen (veel werk)
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
Testcontainers
Veel bestaande containers
Testcontainers Docker
• 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
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
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)
Project: BAM Client
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/
Demo time
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.
Next steps • Opleidingsdoeleinden • Genereren van documentatie die altijd up-to-date is met screenshots etc. • Duurtest toevoegen (bijv. ’s nachts uitvoeren)
Tips & Tricks Playwright • Demo’s op YouTube • playwright.dev
Tips & Tricks Testcontainers • Presentatie’s op Youtube (Devoxx) • https://github.com/testcontainers • Localstack voor AWS services https://www.youtube.com/watch?v=0kXEwo0XFaY
Azure DevOps Pipelines
Azure DevOps Pipelines
Vragen?
Controlling Your Environment Makes You Happy
Coverage 🚫
Na deze presentatie weet je het antwoord hierop van ons frontend-team bij de NS. Leer hoe wij Testcontainers, Playwright en Azure Devops hebben ingezet om dit te bereiken.