Automatické testování

Z Freenetis Wiki
Přejít na: navigace, hledání

Automatické testování slouží jako zpětná kontrola provedených akcí vývojáře.

Architektura testů

Testy jsou zcela automatizované (programátor nemusí testy programovat, ale jen dodávat data k jejich testovaní) a automaticky přizpůsobitelně změnám ve zdrojových kódech.

Testy umožňují kontrolovat modely, helpery a controllery, ostatní části systému jsou kontrolovány pouze na jejich syntaktickou správnost.

Testy oproti unit testům neporovnávají výsledné hodnoty daných funkcí ale pouze ověřují zda-li neskončil běh chybou.

Testy jsou podporovány na *unix operačních systémech.

Načtení informací o zdrojových kódech

Načtení informací o zdrojových kódech probíhá automaticky pomocí skriptu, který prochází všechny testované subjekty a získává z nich data nutná k volání rutin subjektů. Tyto data jsou ukládána do XML dokumentu (/application/vendors/unit_tester/unit_testing_config.xml).

Instalace testů

Instalace potřebných knihoven:

sudo apt-get install curl perl libxml-writer-perl libxml-dom-perl

Přidělení práv:

cd /var/www/freenetis
chmod +x ./application/vendors/unit_tester/tester.sh

Spuštění testů

Upozornění: Testy spouštějte pouze na lokálním vývojovém serveru!

cd /var/www/freenetis/application/vendors/unit_tester
./tester.sh <URL> <LOGIN_NAME> <PASSWORD>

Doba běhu všech testů na Intel Core i5 2.53GHz s Ubuntu 11.04 je cca 4 minuty.

Příklad s argumenty:

./tester.sh -o http://localhost/freenetis admin 123456

Argumenty testovacího skriptu

$ ./tester.sh --help
Script for testing FreeNetIS
USAGE: tester.sh [options] URL username password

Options:
 -o, --open-browser     Opens browser with models or helpers errors
                        automatically, after error detection.
 -s, --skip-syntax      Skip syntax check of all files
 -m, --skip-models      Skip test of models
 -h, --skip-helpers     Skip test of helpers
 -c, --skip-controllers Skip test of controllers

Úprava testovaných informací

Automaticky vygenerované testovací hodnoty nejsou pro testování dostatečné, proto je vhodné doplnit některé další hodnoty.

Postupy uvedu na příkladu modelu, v konfiguračním souboru nalezněte příslušný subjekt (dle názvu tagu a atributu jména).

Model po automatickém vygenerování:

<model name="test">
    <method name="testovaci_funkce" autogenerate="on">
        <attributes>
            <attribute name="user_id" default_value="" />
            <attribute name="filter_values" default_value="array()" />
        </attributes>
        <values>
            <input>
                <param value="" />
                <param value="array()" />
            </input>
        </values>
    </method>
</model>

Velmi důležitý je atribut metody autogenerate, pokud provedete změny v metodě a nenastavíte jej na hodnotu off změny se při spuštění testování zahodí.

Pokud si nepřejete aby metoda byla testována vůbec (časté u metod, které jsou závislé na objektech, nebo vkládají data do databáze), lze toho docílit takto:

<model name="test">
    <method name="testovaci_funkce" autogenerate="off">
        <attributes>
            <attribute name="user_id" default_value="" />
            <attribute name="filter_values" default_value="array()" />
        </attributes>
        <values>
        </values>
    </method>
</model>

Ideální testovací data (snažíme se vkládat i nesmyslné a prázné hodnoty) pro náš testovací model mohou vypadat takto:

<model name="test">
    <method name="testovaci_funkce" autogenerate="off">
        <attributes>
            <attribute name="user_id" default_value="" />
            <attribute name="filter_values" default_value="array()" />
        </attributes>
        <values>
            <input>
                <param value="" />
                <param value="" />
            </input>
            <input>
                <param value="" />
                <param value="array()" />
            </input>
            <input>
                <param value="1" />
                <param value="array('id' => '1')" />
            </input>
            <input>
                <param value="abd'se$#@`" />
                <param value="abd'se$#@`" />
            </input>
            <input>
                <param value="1" />
                <param value="array('id' => '1sef%se@š`', 'Ijnfsief' => 'se2', 'sef$a;!')" />
            </input>
        </values>
    </method>
</model>


Poznámka: V celém návodu je uvažována cesta k freenetisu odvozená z Instalace Freenetis