Automatické testování: Porovnání verzí
| Řádek 76: | Řádek 76: | ||
</model> | </model> | ||
| − | Velmi důležitý je atribut metody '''autogenerate''', pokud provedete změny v | + | 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="on"> | ||
| + | <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]]'' | ''Poznámka: V celém návodu je uvažována cesta k freenetisu odvozená z [[Instalace Freenetis]]'' | ||
Verze z 16. 6. 2011, 07:22
Automatické testování slouží jako zpětná kontrola provedených akcí vývojáře.
Obsah
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="on">
<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