mandag den 4. april 2011

Automatisk testafvikling med Hudson

Nogen gange skaber det værdi at kunne optage en række testcases I Selenium IDE for herefter at få dem afviklet regelmæssigt for at se om noget funktionalitet fejler. Et scenario hvor det er meget relevant er ved at lave en automatiseret regressions test som afvikles regelmæssigt mens det testede software undergår re-faktorering.
Jeg vil I denne artikel beskrive hvordan dette kan sættes op ved at anvende forskellige open source produkter. Den samlede regning for dette setup skulle derfor kun være den hardvare man dedikere til setup’et samt den tid det tager.

Hudson
Hudson er et continuous integration værktøj som bruges til at udføre builds af software pakker en efter et forud defineret skema eller efter behov afvejet ved f.eks at forespørge et SCM.
Hudson er open source og kan derfor bruges uden yderligere omsvøb eller omkostninger.

Downloads
Inden vi kommer for godt i gang, bliver vi lige nød til at downloade lidt software. Vi skal bruge Selenium Server, Hudson samt et plugin til Hudson som gør vi kan afvikle Selenium Html scripts nemt.

Vi starter med Selenium server. Den kan hentes herfra: http://seleniumhq.org/download/. Du skal downloade Selenum Server som tidligere var kendt som Selenium RC. Da jeg downloadede til denne artikel var det version 2.0b3 der var på mode, men en efterfølgende version er også OK.

Det næste er Hudson CI. Den kan hentes herfra: http://hudson-ci.org/. På forsiden nederst til venstre er der et link til at downloade seneste version. Jeg hentede version 1.398, men igen er en senere version OK.
Vi skal ikke downloade Seleniumhq plugin’et til hudson, det gør den nemlig selv.

Hvis du ikke har Java installeret, så bliver du nød til at få det nu. Du kan finde ud af om du har det installeret og du kan hente en installer hvis du ikke har det installeret her: http://www.java.com. Hvis du ikke har java, så installer det med det samme.

En lille detalje der skal nævnes: Mens jeg skriver denne artikel er der ikke understøttelse af Firefox 4 af hverken Selenium IDE eller Selenium Server, hvis du har opgraderet, bliver du nød til at nedgradere igen eller afvente Selenium komponenterne understøtter Firefox 4.

Opsætning
Der er en del opsætning der skal laves. Jeg syntes det er nemmest hvis man samler det hele i en folder så det vil jeg anbefale at gøre. Min folder ligger her: /Users/thomas/hudson men den kunne også hede c:\hudson hvis man arbejder på Windows. Det er der vigtigt er ikke hvor folderen er placeret, men det er vigtigt at den bruger der laver opsætningen også er den bruger der afvikler den. Grunden til dette er at Hudson laver en .hudson mappe I brugerens hjemmemappe og denne mappe vil ikke være tilgængelig for andre brugere. Det betyder naturligvis også at flere brugere på samme system kan have hver sin opsætning hvilket kan være ret smart. Der er også måder at omgå dette sådan at Hudson lægger sin konfiguration et andet og delt sted, men for at sikre den simplest mulig afvikling bruger vi default indstillingerene her.

Kopier de to download’ede filer til din hudson mappe. Lav en undermappe der hedder ”tests” eller noget lignende til at indeholde de Html testscipts du vil afvikle via Hudson.
For at konfigurere Hudson, skal den startes. Der er for dette artikels vedkommende ingen vej uden om kommando prompten, så lad os starte den op nu og komme I gang: Hvis du er på et Unix system leder du efter ”kommandoprompten" eller ”Terminal” hedder den også nogen gange. Hvis du er på Windows, kan du vælge Start -> kør og I tekstfeltet skrive cmd.exe. Det vil starte kommandoprompten, den kan også findes I Start menuen hvis man leder længe nok.

Vi skal nu navigere til vores hudson mappe, for mit vedkommende gøre det sådan: cd hudson - da jeg åbner min terminal, står jeg allerede I min hjemmemappe, og hudson mappe ligger lige under den, så det var simpelt. Den komplette kommando er: cd /Users/thomas/hudson. På Windows er det sikkert: cd \hudson - Dette forudsætter at hudson mappen ligger på samme drev som din brugerprofil, I langt de fleste tilfælde gør den det så det antager vi den gør.
For at starte hudson skrives nu følgende: java -jar hudson-1.398.war - Dette vil starte Hudson serveren, og du kan navigere til http://localhost:8080/ for at se resultatet.
Vi skal nu have installeret Seleniumhq plugin'et. Klik på Bestyr Hudson linket i venstre side. Vælg Pluginhåndtering i liste med administrationsopgaver (puslespilsbrikken). Klik på "Tilgængelige" fanen. Her ses en liste af de plugins der er tilgængelige. Vi skal finde Seleniumhq plugin'et.

Hvis der ikke er nogen plugins tilgængelige, skal du på samme side navigere til Advanceret fanen for at opdatere listen med plugins. Det er kun et tryk med en knap :-).
Marker pluginet og naviger til bunden af siden og klik Installer.

Du vil herefter få en statusside for installationen af plugin'et. Når der står Seleniumhq plugin Success er vi færdige.
Inden vi kan begynde at anvende dette plugin skal vi genstarte Hudson. Find vinduet med kommandoprompten frem og tryk <ctrl>+C for at stoppe Hudson. Skriv kommandoen for at starte Hudson igen (i de fleste kommandoprompter kan man bruge pil-op til at skrive sidste kommando igen).

Klik på Tilbage til oversigtssiden og derefter igen på Bestyr Hudson. I listen med administrationsopgaver klikkes her på Konfigurer systemet.
Rul ned til Selenium Remote Control sektionen og skriv stien til den Selenum jar fil vi download'ede før. I mit tilfælde er det /Users/thomas/hudson/selenium-server-standalone-2.0b3.jar
Rul ned til bunden og klik på Gem knappen for at gemme konfigurationen.

Nu er basis konfigurationen overstået og vi er klar til at begynde at definere projekter til at afvikle Selenium tests automatiseret.

Selenium tests
Du skal bruge mindst en testcase der virker for at komme videre i teksten. Kan du huske mappen tests som du skulle oprette i starten? - Den skal vi til at bruge nu. Hvis du kopiere de tests du vil have afviklet ind i den mappe, og så starter Selenium IDE og loader testene i den. Det er naturligvis en forudsætning at de tests du vil afvikle er mod samme host for at de kan grupperes.

Jeg har en testcase som løber igennem testeholdet.dk, men hvad den gør er ikke vigtigt, bare gør hvad du gerne vil.
Det der imidlertid er vigtigt er at du laver en testsuite som du gemmer, uanset om der kun er en test. Denne testsuite skal du gemme sammen med dine testcases i test mappen. Du ved godt hvordan du laver en testsuite ikk? - hvis ikke så lad mig lige ridse det hurtigt her: Du åbner / tilføjer dine testcase(s) til Selenium IDE sådan de er i listen i venstre, herefter gemmer du din testsuite via File menuen, og som sagt skal du gemme dem i tests mappen.

For lige at se det virker er det en god ide at afvikle sin testcase via Selenium IDE.

Konfiguration af test i Hudson
For at konfigurere testafviklingen skal Hudson naturligvis være startet og du navigere til http://localhost:8080 for at forbinde til Hudsons brugergrænseflade.
Ser nogen lunde sådan ud:
Klik på linket Nyt job eller opret nyt job for at komme igang. Skriv et sigende navn i Job navn feltet, f.eks Selenium test, og vælg Byg et free-style projekt. Klik OK.
Så kommer du til projektets konfigurationsside. Øverst står det navn som du har givet projektet og lige neden under har du mulighed for at for at angive en beskrivelse af projektet. Nu er dette et eksempel så jeg vil springe let hen over det, i den virkelige verden vil jeg derimod anbefale at du tager dig tiden til at lave en fyldestgørende beskrivelse af hvad du ønsker at teste i dette job.

I kildekodestyring (SCM) vælger du ingen.
Du kan vælge ikke at have nogen bygstartere andre end dig selv, men hvis dette setup skal give mening skal der være en eller anden form for tidsplan det skal følge. Sæt derfor hak i Byg periodisk og giv den følgende tidsplan: 0 */2 * * *
Denne tidsplan kræver lidt forklaring, det er sådan at Hudson bruger Cron's måde at angive en tidsplan. Dokumentationen utroligt godt beskrevet på denne Wikipedia side, så jeg vil henvise her i stedet for selv at forsøge at forklare :-) -> http://en.wikipedia.org/wiki/Cron. Men det tidsplanen gør i store træk er at køre hver anden time.
Under Byg, klik på Tilføj byggetrin knappen og vælg Selenium htmlSuite Run.
Dette vil tilføje en sektion til Byg hvor du har mulighed for at definere parametrene for afviklingen af din Selenium HTML testsuite. Udfyld med følgende data:
Browser, indtast *firefox for at anvende Firefox browseren, jeg vælger denne for jeg er sikker på at du har den installeret.
Start URL er det som Base URL i Seenium IDE, for mit vedkommende er det http://www.testeholdet.dk.
Suite file er den testsuite du lavede i Selenium test sektion tidligere. For mit vedkommende er det /Users/thomas/hudson/tests/suite.html.
Result File er den rapport som plugin'et laver, jeg plejer at kalde den for report.html, men det er valgfrit hvad du vil kalde den, dog skal den have .html efternavnet.
I other kan du definere yderligere parametre til selenium servern. Dette er dog ikke nødvendigt i vores tilfælde.

I Post-byg Handlinger skal sætte hak i Publish Selenium Report, og i Test report HTMLs skal du skrive *.html. Dette er for at publicere den rapport som SeleniumHQ plugin'et laver under afviklingen.
Klik på Gem nederst på siden og du har nu gemt dit test job i Hudson.
Da der er defineret en tidsplan, vil Hudson gå i gang med at afvikle testen i henhold til tidsplanen, og hvis du ikke er den tålmodige type, så kan du bare klikke Byg nu.

Her er et screenshot af mit Selenium Test projekt der har kørt et par gange:
Som du kan se fejlede byg nummer fire, men de resterende gik fint.

Ingen kommentarer:

Send en kommentar