2011. július 19., kedd

FitNesse, a wiki alapú tesztkeretrendszer

A FitNesse egy acceptance tesztelési keretrendszer, melynek célja hogy a teszteket készítő fejlesztők és a területi szakértők közti szakadékot megszüntesse, azáltal hogy a szakértők számára is elérhetővé teszi a tesztek kezelését és végrehajtását.

Működésileg egy saját web-szerveren futó wiki site, amely strukturált és könnyen olvasható formában teszi elérhetővé a teszteket. A teszteket wikis formázással megadott táblázatok reprezentálják, melyekhez egy-egy Fixture java osztály tartozik. A Fixture osztályok teremtik meg a kapcsolatot a wikis táblázatok és a java tesztkód között. A táblázatok input adatokat és a várt output adatot tartalmazzák, valamint a Fixture kód elérhetőségét. A FitNesse egyszerű felépítése és koncepciói nagyban hozzájárulnak a kiváló használhatóságához, melyek lehetővé teszik széleskörű alkalmazását!

FitNesse telepítése és a menüstruktúra ismertetése

A FitNesse telepítése és indítása nagyon egyszerű! Töltsük le a legfrisebb fitnesse.jar-t a FitNesse hivatalos oldaláról, majd másoljuk be abba a könyvtárba ahova telepíteni szeretnénk, végül adjuk ki a java -jar fitnesse.jar -p 6666 parancsot. Amennyiben a 80-as port már foglalt, a –p opcióval jelölhetünk ki egy szabad portot. A parancs futtatása után létrejön a FitNesseRoot nevű könyvtár a sablon wiki oldalakkal feltöltve, melyet a http://localhost:6666/ címen tekinthetünk meg.


Rövid áttekintés a baloldali menük funkcióiról:
  • Edit: Az aktuális - jobb oldalon megjelenő - wiki oldal tartalmának szerkesztése.
  • Properties: Az aktuális wiki oldal tulajdonságainak szerkesztése.
    • Page Type: Az oldal típusának meghatározása, ami lehet egyszerű wiki oldal, teszt oldal vagy suite oldal.
    • Actions: A baloldalt megjelenő akció funkcionalitású menüelemek meghatározása.
    • Navigation: A baloldalt megjelenő navigációt biztosító menüelemek kiválasztása.
    • Securtiy: Biztonsági megszorítások az aktuális wiki oldalra vonatkozólag.
  • Refactor: Az aktuális wiki oldal törlése, átnevezése vagy új helyre mozgatása.
  • Where Used: Az aktuális wiki oldal más oldalakon történő hivatkozásait mutatja.
  • Search: Kifejezés keresése a wiki oldalakon.
  • Files: A fájlrendszerbeli könyvtárstruktúra áttekintése és böngészése.
  • Versions: Az aktuális wiki oldal módosítás utáni verzióinak megtekintése és visszaállási lehetőség egy korábbi verzióra. (rollback)
  • Recent Changes: A legutóbbi változások teljes wiki struktúrát tekintve.
  • User Guide: Általános ismertető a FitNesse keretrendszerről.
  • Test History: Az elindított tesztek sikerességéről kaphatunk információkat.
  • Suite: A suite oldalak esetén megjelenő menüelem, amivel a suite alatt lévő teszteseteket futtathatjuk a wiki oldalon keresztül.
  • Test: Az adott oldalhoz tartozó teszteset futtatása a wiki oldalról indítva.

FitNesse Suite létrehozása és konfigurálása

Az ExampleTestSuite oldal létrehozásához kattintsunk a cím melletti ”add child” linkre majd adjuk meg az oldal típusát és nevét, végül kattintsunk az add gombra.


Ahhoz hogy a felvett oldalt használni tudjuk válasszuk ki az Edit menüt, majd a megjelenő wiki szerkesztő felületen írjuk be az oldal nevét, esetleg töröljük a számunkra szükségtelen részeket az oldalról.


A mentés után megjelenő oldalon az ExampleTestSuite[?]-re kattintva létrehozhatjuk magát a wiki oldalt. Ha az újonnan létrehozott oldal baloldali menüjében nem jelent volna meg a Suite menüelem, akkor a Properties menü alatt módosítsuk a megfelelőre.


Az ExampleTestSuite oldalon kerül definiálásra a classpath valamint két Fitnesse változó a define kulcsszó megadásával. A classpath sorokkal a szükséges könyvtárak és a Fixture kódot tartalmazó class ill. jar helyét adhatjuk meg, a define kulcsszóval pedig a teszteseteknél is használni kívánt változókat definiálhatjuk. Azáltal, hogy a classpath és a define értékeket az ExampleTestSuite-nál adjuk meg, a hierarchiában alatta lévő suite-okra és tesztekre (pl.: ExampleTest) is tovább öröklődnek, bár az alsóbb szinteken szükség szerint felüldefiniálhatók.



FitNesse teszt létrehozása és futtatása

A következőkben egy egyszerű String összefűzési funkció tesztelését fogom ismertetni a ColumnFixture felhasználásával.

Az ExampleTestSuite véglegesítése után, a suite alá vegyünk fel egy ExampleTest oldalt az ”add child” linkre kattintással úgy hogy az oldal típusa test legyen, majd hozzuk létre a tesztesethez tartozó táblázatot. A táblázat első sorában definiáljuk a Fixture osztályt (MyFitnesseTest), valamint a felhasználni kívánt változókat melyek a Fixture osztályban a getArgs() metódussal érhetők el. A táblázat második sora az oszlop neveket tartalmazza (username, password), melyeket a Fixture osztályban publikus mezőként kell megadni, valamint a tesztmetódust. (testConcatenation). A táblázat további sorai a bemeneti adatokat és a kimenet elvárt eredményeit tartalmazzák, melyek egy-egy teszt lefutásnak felelnek meg.

 


A teszthez tartozó Fixture osztály kódja az alábbi forráskódrészleten látható:
package fitnesse.example;

import fit.ColumnFixture;

public class MyFitnesseTest extends ColumnFixture{

    public String username;
    public String password;
    
    public String testConcatenation(){
        
        System.out.println(username);
        System.out.println(password);
        System.out.println("myVariable1: "+getArgs()[0]);
        System.out.println("myVariable2: "+getArgs()[1]);
        
        return new StringBuilder()
                    .append(username)
                    .append(password)
                    .append(getArgs()[0])
                    .append(getArgs()[1]).toString();
    }
}

Az elkészült tesztet az ExampleTestSuite oldalon látható suite gombra klikkelve vagy az ExampleTest oldal test gombjára kattintva indíthatjuk el, melynek eredményét egyből megtekinthetjük az oldalon.


FitNesse oldalstruktúra kialakítása

A tesztek végrehajtását teszt oldalanként vagy suite-onként van lehetőségünk elindítani. Egy suite, teszteket és további suite-okat tartalmazhat. A wiki oldal struktúrát úgy érdemes kialakítani, hogy készítünk egy gyökér suite oldalt ahova további suite oldalakat veszünk fel, majd az alsóbb szintekre helyezzük a tesztoldalakat. Ez a kialakítás azért hasznos, mert a suite-ok csoportba fogják a teszteket így a tesztek futtatását is ezen csoportok alapján hajthatjuk végre. A suite-os csoportosítás további előnye, hogy a classpath ill. változó deklarációk is öröklődnek a hierarchiában lentebb található suite-okra és tesztekre, így azokat elég csak a felsőbb szinten megadni. Persze egy alsóbb szinten deklarált változó mindig erősebb hatókörrel bír, így névegyezés esetén az alsóbb szintű fog érvényre jutni.


Zárszó

A wiki-s táblázat alapú tesztek az olvashatóságot és a karbantarthatóságot tekintve is előnyösebbek a programozott tesztekkel szemben, igaz a kiegészítő kódok elkészítésére időt kell szánni.

A cikk folytatása hamarosan következik...!

Nincsenek megjegyzések:

Megjegyzés küldése

Megjegyzés: Megjegyzéseket csak a blog tagjai írhatnak a blogba.