Automatické testování
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:
v Ubuntu/Debianu:
sudo apt-get install curl perl libxml-writer-perl libxml-dom-perl
ve Fedoře:
sudo yum install curl perl perl-XML-Writer perl-XML-DOM
Přidělení práv:
cd /var/www/freenetis chmod +x ./application/vendors/unit_tester/tester.sh
Zamezení posílání e-mailů/SMS apod.:
Do config.php přidejte:
$config['unit_tester'] = TRUE;
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>
poznámka: 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 -e, --enable-stats Turn on statistics and benchmarks
Úprava testovaných informací
Automaticky vygenerované testovací hodnoty nejsou pro testování dostatečné, proto je vhodné doplnit některé další hodnoty.
Postupy uvedeme 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í.
Tag input lze chápat jako jednu sadu testovaných hodnot dané metody.
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>
Dodatečné vlastnosti pro controllery
Pro controllery lze posílat i data pomocí POST a GET HTTP akce, stačí do vstupního parametrů testu přidat parametry ve tvaru:
<param name="post_name" type="post" value="hodnota" /> <param name="get_name" type="get" value="hodnota" />
Po-editační testovaní validity dokumentu
Po každé editaci konfiguračního souboru je vhodné zkontrolovat jeho validitu pomocí dodaného DTD (/application/vendors/unit_tester/unit_testing_config.xml), jelikož samotný test počítá s validní konfigurací!
V IDE Netbeans kontrolu validity provedete pomocí označení konfiguračního souboru a následného vyvolání jeho kontextového menu a položky Validate XML.
Statistiky a benchmarky
Součástí testů jsou i nástroje pro benchmarky modelů a controllerů. Lze je zapnout pomocí parametru -e
.
Výsledky benchmarků u modelů je zobrazováno ve výstupním HTML souboru společně s testy.
Výsledky u controllerů jsou ukládány do souboru curl/cstats
, který má čtyři sloupce oddělené tabulátorem.
- První slopec obsahuje informaci o době provádění controlleru v sekundách.
- Druhý sloupec obsahuje spotřebu paměti v MB pro dané provádění.
- Třetí sloupec je URL požadavku.
- Čtvrtý obsahuje hodnoty HTTP POST odeslané controlleru.
Příklad výpsání 10 požadávků s největší spotřebou paměti:
cat curl/cstats | cut -f 1,2,3 | sort -n -r -k 2,2 | head -n 10
Poznámka: V celém návodu je uvažována cesta k freenetisu odvozená z Instalace Freenetis