Skapa persistent testdata

En fråga som ploppar upp med jämna mellanrum är hur man bäst skapar testdata för sina automatiska tester. Om vi begränsar diskussionen till persistent data så finns det två huvudfalanger; populera datan med egna testscript eller genom att använda systemets gränssnitt.

Den första varianten betyder i praktiken (oftast) att skapa testspecifika anrop till databasen för att populera datan. Att generera testdatan m.h.a. systemets gränssnitt betyder att testet ropar på någon inneboende metod i systemet och låter systemet skapa datan. Denna metod kan antingen vara publik eller intern.

Så vad är för/nackdelar med dessa två varianter?

Att skapa egna script för testdatagenerering innebär att dessa måste underhållas när systemet förändras. Det kan höja förvaltningskostnaden för testerna. Vidare ökar komplexiteten då kan det finnas fel i själva testscripten.

Å andra sidan, om man använder interna systemmetoder för att skapa datan finns risk att man skapar datan felaktigt – det är inte syftet med den interna metoden. Publika systemmetoder bör representera verkligheten, men om vi har defekter i systemet kan vi inte generara testdatan och därmed inte heller utföra våra tester. Vi kan hamna i en situation där alla tester går sönder pga att en systemfunktionalitet inte fungerar.

Vad bör vi överväga när vi väljer strategi? Låt oss titta på ytterligheter för när respektive metod fungerar bäst.

Ponera ett befintligt system med små förändringar där testerna exekveras sällan (några ggr per release). Om vi här nyttjar en strategi med testscript så bör underhållet av testscripten vara minimalt. När testerna väl exekveras så vill man inte riskera att en stor del av testerna fallrar pga att man inte kan sätta upp förutsättningarna. Då får man ett meningslöst resultat.

Motsatsen är ett system med stora förändringar. Om testerna exekveras ofta (flera ggr per dag) fångar man snabbt upp eventuella problem med att systemet inte kan generera testdatan. Här ter sig nyttjande av gränssnitt som mer fördelaktigt. Det förutsätter naturligtvis att man snabbt rättar upp problemen.

Hypotesen blir därmed; om ditt system är under utveckling (eller på andra sätt utsatt för stora förändringar), exekvera dina automatiska tester ofta och nyttja systemets gränssnitt för att generera din testdata.

I slutändan gäller det dock att vara pragmatisk och inte låta religös övertygelse styra.