Vad har vi då lyckats implementera för detta projektet?
Målet har varit att driftsätta varje förslag på förändring som kommer till Gerrit. Inledningsvis var ambitionen hög och vi ville göra en komplett installation, konfigurering av systemet, genomförande av tester och en avinstallation. Vi insåg efter ett tag att detta blev för mycket för oss samtidigt som vissa kompromisser troligen var rimliga att göra ur ett ROI perspektiv. Att gå hela vägen hade tillfört mycket lite ur ett kvalitetsperspektiv jämfört med den lösning vi implementerade som har vissa begränsningar. Vi installerade t ex inte en databas för varje test utan det fanns en databas installerade som användes varje gång. För att inte olika körningar av Jenkins skulle interferera så valde vi att varje nod i jenkinsnätverket endast kör ett jobb i taget. Implementationen innehåller också en webserver som vi hanterade på samma sätt som databasen.
För att kunna implementera detta krävdes det att utvecklarna anpassade sig till hur vi planerade att testa. Till exempel behövde man skriva ett SQL-skript som konfigurerade databasen med tabeller etc samt sedan också såg till att rätt information lagrades så att tester kunde genomföras. Att automatiskt kunna städa databasen var också nödvändigt stöd. Eftersom vi arbetade tillsammans med detta fanns det säkert andra saker som också gjordes av utvecklarna eftersom de såg dessa behov själva när de visste hur testerna med jenkins genomfördes.
För att installera en ny version av serverdelen i webserbern, Tomcat 7.x, använde vi en Deploy Plugin. I den anger man man vilken war-fil den skall ta och så sköter den allt åt en. Vidare använde vi Maven för själva bygget och för att köra nödvändiga skript för databasen etc.
Men det verktyg som hjälpte oss mest för att genomföra detta var Selenium. Genom möjligheten att först spela in testfallen och sedan generera javakod gjorde vi det möjligt att köra användarinteraktionstestfallen parallellt med JUnit testerna i jenkins. Utvecklarna fick direkt se om någon av deras ändringar medförde problem i andra delar av implementationen. I alla fall kunde man se att stora delar av implementationen fortfarande fungerade.
Vi hade också nytta av dessa Seleniumtestfall i andra sammanhang. Eftersom vi integrerat med Facebook var det viktigt att detta fungerade bra. Vi fick vissa anmärkningar från kunder om att integratinen inte fungerade som den skulle. Genom att sätta upp jenkins till att köra en del tester 4 ggr per timme kunde vi samla in lite fakta om hur stabilt vår implementation var. Det visade sig att det fungerade bättre än kanske många trodde. Troligen bestod problemen som användarna upplevde i att de användare som körde satt på instabila nätverkskopplingar och inte fick kontakt med Facebook. Här borde vi kanske gett användaren bättre feedback, i from av tydliga meddelanden, än vad som var fallet.
Vid användande av Selenium bör man vara observant på vilka begränsningar som finns i verktyget och vilken ambitionsnivå man har. Det är lätt att man råkar ut för ett stort underhåll av testfallen då vissa webläsare är besvärliga att använda. Jag rekommenderar därför er att fokusera funktionalitetstestningen till en webläsare. Att köra dessa tester på flera webläsare och då framförallt IE blir troligen en för stor börda. På de övriga webläsarna får man hitta en kompromiss och kanske köra enklare testfall automatiskt för att se att det i alla fall kommer igång och sedan använda sig av manuell testning av dem vilket rekommenderas även för den webläsare som används för funktionstestningen. Det behövs att någon tittar på utseende för att automatisera det lär kosta mer än det smakar. Möjligheten att hela tiden ta stickprov och säkerställa att de värsta buggarna inte kommer in i produkten är värt mycket men att ta det steg till och göra en total kvalitetskontroll vid varje ändring av koden kommer inte att betala sig för de allra flesta projekten.
Efter installationen var klar använde vi Post Build Task pluginen till att köra Seleniumtestfallen
Tack till Tobias och Joel som praktiserade på Purple Scout förra våren och genomförde mycket av arbetet.