Voor de opdracht bij de Rabobank werken we sinds een tijdje aan de migratie naar, en de inrichting van, de Continuous Integration / Continuous Delivery pipeline (CI/CD). De laatste paar weken voornamelijk op het gebied van uitbreiden van de pipeline, met het automatisch starten van de geautomatiseerde regressietesten. In deze blog vertel ik hier graag iets meer over. Tevens ook over hoe we binnen de afdeling waar ik werk de geautomatiseerde testen hebben opgezet.
Complex systeem
Het systeem op de afdeling betreft een groot Cobol backend systeem wat draait op het z/OS platform (IBM Mainframe). De meeste testen worden hier dan ook uitgevoerd door middel van batch transacties die we kunnen starten via terminal emulatie. Daarnaast zijn er diverse connecties (services) met front-end systemen die getest worden. Hiervoor worden grotendeels stubs en drivers gebruikt, die worden opgesteld in de IBM tool Rational Integration Tester® (RIT). Er zijn ook nog diverse Web services die met behulp van SoapUI worden getest.
Model Based Testen
Voor het opstellen van de testgevallen die we gebruiken voor alle hierboven beschreven testen maken we zoveel mogelijk gebruik van ‘Model Based Testen’. Dit betekent dat we de functionele requirements omzetten naar een testmodel. Van daaruit genereren we automatisch de diverse testgevallen op basis van multiple condition coverage. Deze test coverage zorgt ervoor dat elke combinatie van twee opéénvolgende testpaden uit het testmodel minimaal één keer wordt getest. De gegenereerde testgevallen worden vervolgens geautomatiseerd met behulp van de tooling Unified Functional Testing® (UFT). Inmiddels hebben we al een groot aantal UFT regressietestscripts opgesteld die we regelmatig handmatig starten om te zien of de ongewijzigde code nog steeds werkt na aanpassingen elders in de code.
CI/CD en automatisch testen
Nadat begin 2019 de CI/CD pipeline was opgezet voor ontwikkeling, testen en deployment was één van de volgende doelen om de UFT regressietestscripts automatisch te starten nadat er een deployment op een bepaalde omgeving (Ontwikkel, Test en Acceptatie) plaatsvindt. De CI/CD pipeline die inmiddels 11 omgevingen ondersteunt, wordt ondersteund door de IBM tooling Rational Team Concert® (RTC) en Unified Code Deployment® (UCD). Naast de wens om de UFT regressietestscripts automatisch te starten na deployment op een bepaalde omgeving, was een ander doel om ook een aantal UFT regressietestscripts te runnen op een vast en terugkerend moment. Hieronder een korte uitleg hoe we deze beide soorten van uitvoeren regressietest, hebben opgezet.
Voor het automatisch starten van de UFT scripts na een deployment, nemen we in de UFT testscripts een dependency matrix op. In deze dependency matrix geven we per testgeval de dependency aan met een manifest (overzicht wat, wanneer en op welke omgeving is deployed). Dit manifest wordt automatisch gegenereerd nadat er een deployment op een bepaalde omgeving plaatsvindt. Verder geven we in een XML file aan welk UFT testscript gerund moet worden op welke omgeving. Hieronder een voorbeeld van zo’n XML file (ExecutionInfo.xml) van omgeving X.

Zodra er nu een deployment plaatsvindt op omgeving X, wordt er automatisch een manifest gegenereerd. Tevens is er de check of er een UFT testscript is opgenomen in de ExecutionInfo.xml van omgeving X. Als dat het geval is kijken we naar of er een match is tussen het manifest (resource name) en de testcases in de dependency matrix in het UFT script. Als er een match is, zal de betreffende testcase uitgevoerd worden. Dit gehele proces wordt aangestuurd door een Jenkins job. Hieronder een voorbeeld van een manifest.

Nadat het UFT script is uitgevoerd, volgt er automatisch een email met daarin de execution summary. Met als bijlage de inhoudelijke resultaten van de uitgevoerde test. De verantwoordelijke tester ontvangt deze email, die de resultaten vervolgens kan beoordelen en waar nodig actie kan nemen.
Voor het automatisch starten van de UFT regressietesten op een vast en terugkerend moment, hebben we een aparte Jenkins Job geschreven. Hierin geven we met behulp van een zogenaamde CRON syntax aan wanneer deze UFT Regressietests gestart moeten worden. In de ExecutionInfo.xml van de betreffende omgeving kunnen we vervolgens aangeven welk(e) UFT script(s) gestart moeten worden op dat aangegeven tijdstip. Met deze Jenkins Job worden nu inmiddels elke avond een groot aantal regressietests uitgevoerd.

Conclusie
We hebben de CI/CD pipeline uitgebreid met het automatisch starten van de geautomatiseerde regressietesten. Hiermee hebben we als één van de eersten binnen de bank uitvoering gegeven aan het concept van Shift-left Testing en (deels) ook aan Continuous Testing.

Silvio Cacace, Senior Testconsultant
Heb jij nu ook zin om in een veelzijdige testopdracht te duiken? Kijk dan hier voor alle Newspark vacatures.