I denna sektion går vi kortfattat igenom vad testautomatisering är och vilken nytta man kan ha av automatiska tester.
Testautomatisering kan innebära en effektivisering av nuvarande testprocess. Genom att bryta ner tidskrävande, manuella arbetsuppgifter till kod kan du skapa ett större förtroende för din applikation. Ett förtroende som innebär att du vågar släppa ny kod till produktion kontinuerligt. Testautomatisering innebär att förändringar i din applikation kan verifieras redan innan de släpps vidare till en testmiljö.
Hur går man då tillväga för att lyckas med sin satsning på automatiska tester? Det finns många svar på denna fråga, men på SetPace anser vi att det finns två framgångsfaktorer. Den första innebär du skall behandla din testkod med samma respekt som din applikationskod. Genom att skriva ren-, objektorienterad-, dynamiskt utbyggbar- och trådsäker-kod skapar du förutsättningar för en lyckad förvaltning av ditt testramverk. Den andra framgångsfaktorn handlar om att inte uppfinna hjulet på nytt. Oftast finns det ett Open-source ramverk med en community av utvecklare som är testat och beprövat, både i form av enhetstester samt av andra företag.
Något som går hand i hand med testautomatisering är Continuous Delivery (CD) och Continuous Integration (CI). CI innebär att man kontinuerligt släpper ny kod till en master branch så att denna kan testas i ett tidigt skede. CD innebär att hela releaseprocessen är automatiserad och att applikationen alltid är testad, redo att släppas till produktion. Automatiska tester spelar en nyckelroll i CI/CD. Pålitliga och snabba automatiska tester skapar möjlighet att kunna produktionssätta ny kod, ofta.
Den gemensamma nämnaren i alla lyckade automatiseringsprojekt är inte enbart verktygen utan det ramverk som klistrar ihop alla verktyg. Med ett välskrivet ramverk kan man enkelt byta ut verktyg när det kommer bättre alternativ.
Det finns många fördelar med ett välskrivet ramverk. Nedan följer några konkreta exempel:
Tid
Att skriva nya, och att underhålla befintliga tester tar minimalt med tid. Även körtiderna minskas med optimering och parallell exekvering.
Stabilitet
Fel i testet eller testmiljön är en vanlig orsak till att ett automatiskt test fallerar. Denna felkälla minimeras eftersom gemensam kod bryts ut och fokus läggs på att kontrollera de vanligaste orsakerna till fel.
Testdata
Testdatahantering är en viktig del av ett testautomatiseringsramverk. Man kan exempelvis testdataladda Istället för att varje test förbereder testdata genom klicka igenom långa flöden i gränssnittet. Man kan även exponera api:er där de vanligaste typen av testdata görs tillgänglig. Att mocka bort externa beroenden gör det också lättare att hantera sin testdata.
Felsökning
Man ska inte behöva köra om ett test för att veta varför det fallerade. Med bra loggning och tydliga feltexter vet man varför tester fallerade enbart genom att titta i loggen.
Rapportering
Att kontinuerligt synliggöra hur applikationen mår ger ökat självförtroende åt utvecklingsteamen. Tydlig rapportering innebär även ökat fokus på fallerande tester. Med ett ramverk har ni möjlighet att välja hur mycket historik samt vilken information ni vill synliggöra.
Genom att implementera rätt tester på rätt nivå ökar du dina chanser att lyckas med dina automatiska tester.
Enhetstester (längst ned i pyramiden) skall utgöra den största delen av dina tester. Dessa tester går snabbt att exekvera och är pålitliga då de är isolerade. Ett exempel på enhetstest är ett test av en metod i en klass.
Även API-tester bör utgöra en stor del av dina automatiska tester. Även dessa går snabbt att exekvera och det krävs inget gränssnitt för att konsumera dessa. Exempel på API:er är Rest- och SOAP-tjänster.
Överst i pyramiden hittar man sina gränssnittstester. Detta bör utgöra den minsta delen av dina tester. Testerna tar lång tid att exekvera och det finns mycket integration undertill som kan göra dina tester instabila.
Testerna som tillhör de olika nivåerna bör komplettera varandra. Exempelvis ska du i dina gränssnittstester testa det som är specifikt för gränssnittet, medan tester mot ett tredjeparts-api kan implementeras i den tjänst (REST exempelvis) som anropar API:et.
Genom att dela upp dina tester i dessa tre nivåer ökar du även chansen att snabbare identifiera felkällan. Upptäcks felet i en REST-tjänst så vet du att felet ej ligger i gränssnittet.
Idag finns det en mängd verktyg för testautomatisering att välja bland. Nedan går vi igenom några av de mest populära verktygen/ramverken. Efter varje rubrik har vi skrivit om verktyget är gratis samt om det kräver programmeringskunskap eller inte.
Selenium (programmeringskunskap: Ja)
Selenium är ett verktyg/ramverk för att automatisera webbapplikationer. Det finns två varianter av Selenium, Selenium IDE och Selenium WebDriver. Selenium IDE är ett plugin till webbläsaren som kan spela in de kommandon du utför i webbläsaren, för att sedan kunna återupprepa dessa kommandon. Ett så kallat Capture/Playback tool. Selenium WebDriver består av ett API (application programming interface) som kan anropas från flertalet programmeringsspråk såsom Java, C#, Python, JavaScript. Selenium WebDriver är Open Source och har stöd för alla stora webbläsare och operativsystem.
Protractor (programmeringskunskap: Ja)
Protractor kan vara ett lämpligt alternativ om du skall automatisera en webbapplikation skriven i AngularJS. Protractor är en wrapper (skriven ovanpå) runt Selenium WebDriver. Ramverket är lämplig för AngularJS-appar bland annat då det hanterar synkorinsering av webbelement på ett bra sätt. Ramverket är Open Source och det byggdes av ett team hos Google. Det är också en ersättning för det existerande AngularJS E2E-testramverket, kallat ”Angular Scenario Runner”.
TestComplete (programmeringskunskap: Nej)
TestComplete tillåter dig automatisera webbapplikationer utan något krav på programmeringskunskap från användaren. Verktyget är utvecklat av SmartBear, företaget som ligger bakom SoapUI. Verktyget är ett Capture/playback tool. Detta innebär att du spelar in de kommandon du utför så att verktyget sedan skall kunna återupprepa det du gjorde. Verktyget har stöd för automatisering av Webb-, Mobil- och Desktop-applikationer. Verktyget tillkommer med en licenskostnad.
Cypress (programmeringskunskap: Ja)
Cypress är ett smidigt ramverk att använda medan eran webbapplikation utvecklas. Ramverket utvecklades av Brian Mann, som ville lösa några problem (opålitliga och långsamma) utvecklare vanligen stöter på när de skriver integrationstester. Cypress är ett fristående ramverk, utan några beroenden till Selenium WebDriver. De bibliotek som används för att skriva verifieringspunkter är Mocha och Chai. I skrivande stund finns det en gratisversion av verktyget, där ett fåtal användare kan nyttja ramverket. Det finns även flertalet betalversioner av verktyget som innebär att flertalet användare kan nyttja verktyget.
TestCafé (programmeringskunskap: Ja)
TestCafé är ett ramverk som tillåter dig automatisera webbapplikationer i JavaScript eller TypeScript. Testerna kan exekveras på Windows, MacOS och Linux i all de stora webbläsarna (Chrome, Firefox, IE, Edge, Safari etc.). Det går snabbt att komma igång med att skriva tester i verktyget och det är smidigt att debugga sina tester med. TestCafé kan utföra flertalet uppgifter såsom att starta webbläsaren, driva testerna, samla testresultat och generera testrapporter. Ramverket finns både i en gratisversion samt en betalversion. TestCafe väntar automatiskt på XHR-förfrågningar (XMLHttpRequest), sidladdningar och sidanimeringar, så du behöver inte ta hand om det i din kod.
Ranorex (programmeringskunskap: Nej)
Ranorex är ett Capture/Playback verktyg som kan spela in de kommandon du utför. Du kan sedan redigera och återuppspela dessa kommandon. Verktyget stödjer automatisering av Desktop-, Webb- och Mobilbaserade-applikationer (native och hybrida). Ranorex har stöd för exekvering i alla stora webbläsare (IE, Edge, Safari, Chrome). Verktyget har även inbyggt stöd för rapportering. Ranorex kommer med en licenskostnad.
Watir (programmeringskunskap: Ja)
Watir är en akronym för Web application testing in Ruby och är precis som namnet förtäljer, ett ramverk för automatisering av mobila applikationer. Watir är implementerat som en modul för programspråket Ruby och använder till exempel Firefox på Windows för att simulera en användares surfande på webbplatsen. Det klickar på länkar, fyller i fält och skickar formulär för att sedan kontrollera texter och HTML i det resulterande svaret. Watir är Open Source och gratis att använda.
Appium (programmeringskunskap: Ja)
Appium är ett ramverk för att automatisera mobila applikationer. Liksom Selenium, så driver också Appium iOS- och Android-Appar med WebDriver-protokollet. Appium består av ett API och en server. API:et kan anropas från de flesta programmeringsspråken. Appium stödjer automatisering av Native-, Hybrida- och mobila Webb-appar. Api:et är Open Source vilket innebär att det är gratis att använda.
Robotium (programmeringskunskap: Ja)
Robotium är ett ramverk för automatisering av Mobila Anroid-applikationer. Ramverket har stöd för Native-, och Hybrida-applikationer. Robotium består av ett API som exponerar olika sätt att interagera med en applikation. Robotium-testerna kan exekveras i Android-emulatorn samt på en riktig Android-enhet. Ramverket är Open Source och gratis att använda.
Espresso (programmeringskunskap: Ja)
Det är Anroid själva som ligger bakom Espresso-ramverket. Espresso tillhandahåller ett API för att skriva UI-tester som kan simulera interaktioner från användare. En fördel med Espresso är att ramverket har inbyggd synkronisering av den mobila applikationen. Detta innebär att du inte behöver hantera dessa synkroniseringer i din testkod.
Calabash (programmeringskunskap: Ja)
Calabash är ett ramverk som låter dig automatisera mobila applikationer. Ramverket stödjer både automatisering av Anroid- och iOS-appar. Ramverket är Open Source och gratis att använda. Calabash består av ett API som låter dig interagera med Mobila Native- och Hybrid-appar via kod. Ramverket är utvecklat och underhålls av företaget Xamarin. De tillhandahåller även ett moln av devicer (mot en kostnad) där dina Calabash-tester kan exekveras.
Winium (programmeringskunskap: Ja)
Winium är ett ramverk för automatisering av windows baserade desktop-applikationer. Ramverket är smidigt att använda för dem som är bekanta med Selenium. Testerna kan skrivas i de programmeringsspråk som är kompatibla med Selenium, såsom Java, C# och JavaScript. Ramverket är Open Source och gratis att använda.
AutoIT (programmeringskunskap: Ja)
AutoIT är ett skriptspråk som används för att automatisera windows baserade desktop-applikationer. Språket har en syntax som liknar språket BASIC. Språket använder en kombination av simulerade tangenttryckningar och musrörelser för att automatisera uppgifter på ett sätt som inte är möjligt eller tillförlitligt med andra språk. Från början var syftet med språket att automatisera installationer av program, men idag är språket ett fullvärdigt skriptspråk med stöd för till exempel byggande av avancerade GUI och anrop till funktioner i dll-filer.
TestStack.White (programmeringskunskap: Ja)
White används för att automatisera en användares interaktion med en desktop applikation.
White stöder en mängd automatiseringstekniker: Silverlight, WPF, WinForms, Win32 och SWT i Java. Det är möjligt att skriva tester i alla språk som stöds av .NET. White tillhandahåller ett objektorienterat API som döljer komplexiteten hos Microsofts UI-automation bibliotek.
Sikuli
Sikuli tillåter dig automatisera allt du kan se på en skärm. Detta sker med hjälp av en bild som källa till det element du skall interagera med. Sikuli kan användas i kombination med Selenium om du i ett flöde behöver interagera med något utanför webbläsaren.
Eyes Applitools (programmeringskunskap: Ja)
Funktionell testning av webbapplikationer med ramverk som Selenium WebDriver och Protractor kan verifiera att din applikation (Webb och Mobil) beter sig som förväntat, rent funktionsmässigt. Att data, navigation, länkar och validering etc är korrekta. Det du missar med dessa tester är att verifiera hur din applikation ser ut. Ett ramverk som ligger långt fram inom visuell testning är Eyes som utvecklas av företaget Applitools. Eyes består av ett API (application programming interface) och ett gränssnitt. API:t gör att du kan integrera testerna med exempelvis Appium och Selenium. I gränssnittet kan du se ditt testresultat. Eyes Applitools kostar pengar att använda.
Galen (programmeringskunskap: Ja)
Galen är ett ramverk som tillåter dig verifiera hur din applikation ser ut i ett responsivt läge. Ramverket öppnar en sida i given webbläsare, ändrar sidan till given storlek och verifierar därefter layouten med Galen Specs. Ramverket är baserat på Selenium vilket tillåter dig göra vad du behöver i webbläsaren, såsom att klicka, skriva, injicera javascript på klientsidan etc. Galen Specs är det språk som du definierar hur sidan ska se ut för olika enheter. Språket är ganska avancerat och låter dig uttrycka en fullständig layout på din webbplats med minimal text. Galen är Open Source och gratis att använda.
SoapUI / ReadyApi (programmeringskunskap: Nej)
SoapUI och ReadyApi är verktyg för automatisering av API:er, såsom Rest och Soap. SoapUI är gratisversionen medan RedyApi är betalversionen. Verktygen tillåter dig konsumera exempelvis en Soap-tjänst, för att sedan kunna validera innehållet i responsen. Ett testfall i SoapUI består av så kallade “Test Steps”. Ett testfall kan exempelvis bestå av stegen “Hämta testdata från databas”, “Exekvera tjänst SkapaKund”, “Verifiera att kund skapats”. I betalversionen får du mer hjälp än i gratisversionen. Exempelvis får du i gratisversionen skriva Xpath för att hämta ut data från ett respons, medan i betalversionen så genereras Xpath åt dig.
Postman (programmeringskunskap: Nej)
Postman är ett plugin till Google Chrome som låter dig testa och automatisera Soap samt Rest-tjänster. Verktyget är främst populärt att testa Rest-tjänster med. Verktyget är gratis att använda, dock finns det även varianter av verktyget som kostar pengar.
Citrus (programmeringskunskap: Ja och Nej)
Citrus är ett ramverk för automatisering av bland annat JMS (Java Message Service) REST- och SOAP-tjänster. Testerna kan skrivas i Java eller Scala. Ramverket tillåter dig att på ett smidigt sätt konsumera och validera HTTP, JMS, TCP/IP, REST, SOAP, XML och JSON. Testerna skrivs enligt fluent programmering vilket gör dina tester lätta att läsa. Testerna kan skrivas i XML och då krävs ingen programmeringskunskap, vanligast är dock att man använder Java. Citrus är Open Source och gratis att använda.
Cucumber (programmeringskunskap: Ja och Nej)
Cucumber låter dig skriva tester enligt Behaviour-driven Development (BDD) mönstret. Kortfattat innebär detta att du strukturerar dina tester enligt Given (givet att…), When (när jag…), Then (då skall… ske). Något som är centralt för Cucumber är dess språkparser som heter Gherkin. Denna gör det möjligt att skriva dina tester på ett språk som personer utan programmeringskunskap kan förstå. Språket mappas sedan mot själva implementationen av testet (koden). Cucumber möjliggör således att testare utan kunskap om programmering kan skriva tester, förutsatt att någon programmerat själva implementationen. Ramverket är Open Source och gratis att använda.
Robot Framework (programmeringskunskap: Ja och Nej)
Robot Framework är ett ramverk som likt cucumber använder sig av en Key-word driven syntax. Ett set med nyckelord utgör testet och mappas sedan mot själva implementationskoden. På detta sätt blir det lättare att läsa och förstå vad ett test gör. Ramverket har stöd för att utveckla dina tester i Java och Python. Användare av ramverket kan skapa nyckelord på högre nivå och behöver på så sätt inte kunna programmera (förutsatt att någon utvecklat själva implementationen). Robot Framework är Open Source och gratis att använda.
SpecFlow (programmeringskunskap: Ja och Nej)
SpecFlow är Cucumber för .net. Specflow låter dig skriva tester enligt Given, When, Then-syntaxen. Kortfattat innebär specflow att du kan skriva tester på engelska (eller svenska) som sedan mappas mot .net-kod. Ramverket är Open Source och gratis att använda.
Serenity (programmeringskunskap: Ja och Nej)
Serenity är ett Open Source bibliotek till Java som tillåter dig skriva tester enligt Given, When, Then-syntaxen. Serenity för det möjligt att skriva tester på engelska (eller svenska) för att sedan mappa detta mot implementationskod. Serenity kan även användas för att mappa dina testfall mot kraven. Ramverket kommer även med rapport där du kan exponera testresultatet efter varje testkörning.
GraphWalker
GraphWalker är ett modelbaserat testramverk. Modellerna tas fram i verkyget yEd och GraphWalker läser modellerna för att generera olika vägar ett test kan ta. Ramverket är Open Source och gratis att använda.
Fitnesse
FitNesse är ett verktyg för att specificera och verifiera an applikations acceptans-kriterier (krav). Det fungerar som en brygga mellan olika intressenter (discipliner) i en mjukvaruleveransprocess. Det är Fitnesse wiki-server som gör det enkelt att dokumentera programvaran. Det går att kontrollera dokumentationen mot programvaran, så att dokumentationen fortfarande är uppdaterad.
Nedan ger vi exempel på ett antal referenslösningar. Detta är exempel på något som kan fungera i er organisation. Det finns dock fler faktorer än nuvarande tech-stack att ta hänsyn till vid implementation av testautomatisering. Dessa faktorer handlar om vem det är som ska förvalta ramverket, kan de som ska skriva tester i organisationen programmering, vilka mål vill uppnås med testautomatiseringen.
Webbapp – .net, MS SQL Server, REST, SOAP, React JS
Företag 1 är en webbhandelsplattform skriven i .net. React JS används som bibliotek till gränssnittet. Integrationslagret består av en del SOAP-tjänster men det mesta är REST. Företaget har även pratat om att införa testdataladdning.
Programmeringsspråk
C#, JavaScript
Testramverk
Xunit
Continuous Integration
TFS
Rest
RetSharp
SOAP
Visual Studios inbyggda
Testdataladdning
Entity Framework
Front-end
Selenium
Webbapp & mobilapp – Java, Spring Boot, Oracle DB, REST, React JS
Företag 2 är ett spel-applikation skriven i Java. React JS används som bibliotek till gränssnittet. Integrationslagret består av REST-tjänster. Företaget har även funderat över att införa testdataladding.
Programmeringsspråk + Ramverk
Java + Spring, JavaScript
Testramverk
TestNG
Testdataladdning
Hibernate
Continuous Integration
Jenkins Pipeline as code
Rest
rest-assured
Front-end Webbapp
Selenium
Front-end Mobilapp
Appium
Webbapp – Java, WebLogic, Oracle DB, SOAP, Angular
Företag 3 är en bankapplikation skriven i Java. Angular JS används som bibliotek till gränssnittet. Integrationslagret består av SOAP-tjänster. Företaget har som mål att testare utan programmeringskunskap skall kunna skriva automatiserade tester.
Programmeringsspråk + Ramverk
Java + Spring, JavaScript
Testramverk
TestNG
BDD
Cucumber
Continuous Integration
Jenkins Pipeline as code
SOAP
SoapUI
Front-end
Protractor