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 🚫