Spouštění testů
Nejviditelnější součástí Nette Testeru je spouštěč testů z příkazové řádky. Je neobyčejně rychlý a robustní, neboť automaticky spouští všechny testy jako samostatné procesy a to paralelně ve více vláknech. Také se umí spouštět sám v tzv. watch režimu.
Spouštěč testů voláme z příkazové řádky. Jako parametr uvedeme adresář s testy. Pro aktuální adresář stačí zadat tečku:
vendor/bin/tester .
Spouštěč testů prohledá zadaný adresář a všechny podadresáře a vyhledá testy, což jsou soubory *.phpt
a *Test.php
. Zároveň čte a vyhodnocuje jejich anotace,
aby věděl, které z nich a jak spouštět.
Poté spustí testy. Během provádění testů vypisuje průběžně výsledky na terminál jako znaky:
.
– test prošels
– test byl přeskočen (skipped)F
– test selhal (failed)
Výstup může vypadat třeba takto:
_____ ___ ___ _____ ___ ___
|_ _/ __)( __/_ _/ __)| _ )
|_| \___ /___) |_| \___ |_|_\ v2.5.2
Note: No php.ini is used.
PHP 8.3.2 (cli) | php -n | 8 threads
........s..........................
OK (35 tests, 1 skipped, 1.7 seconds)
Při opakovaném spuštění nejprve provádí testy, které při předchozím běhu selhaly, takže se okamžitě dozvíte, jestli se vám chybu podařilo opravit.
Pokud žádný test neselže, návratový kód Testeru je nula. Jinak je návratový kód nenulový.
Tester spouští PHP procesy bez php.ini
. Detailněji v části Vlastní php.ini.
Parametry příkazové řádky
Přehled všech voleb příkazové řádky získáme spuštěním Testeru bez parametrů, anebo s parametrem
-h
:
_____ ___ ___ _____ ___ ___ |_ _/ __)( __/_ _/ __)| _ ) |_| \___ /___) |_| \___ |_|_\ v2.5.2 Usage: tester [options] [<test file> | <directory>]... Options: -p <path> Specify PHP interpreter to run (default: php). -c <path> Look for php.ini file (or look in directory) <path>. -C Use system-wide php.ini. -d <key=value>... Define INI entry 'key' with value 'value'. -s Show information about skipped tests. --stop-on-fail Stop execution upon the first failure. -j <num> Run <num> jobs in parallel (default: 8). -o <console|console-lines|tap|junit|log|none> (e.g. -o junit:output.xml) Specify one or more output formats with optional file name. -w | --watch <path> Watch directory. -i | --info Show tests environment info and exit. --setup <path> Script for runner setup. --temp <path> Path to temporary directory. Default by sys_get_temp_dir(). --colors [1|0] Enable or disable colors. --coverage <path> Generate code coverage report to file. --coverage-src <path> Path to source code. -h | --help This help.
-p <path>
Určuje PHP binárku, která se bude používat pro spouštění testů. Standardně je to php
.
tester -p /home/user/php-7.2.0-beta/php-cgi tests
-c <path>
Určuje, který php.ini
se bude používat při spouštění testů. Ve výchozím stavu se žádný php.ini
nepoužije. Více v části Vlastní php.ini.
-C
Použije se systémové php.ini
. Na UNIXu také všechny příslušné INI soubory
/etc/php/{sapi}/conf.d/*.ini
. Více v části Vlastní php.ini.
-d <key=value>
Nastavuje hodnotu PHP konfigurační direktivy pro testy. Parametr může být použit vícekrát.
tester -d max_execution_time=20
-s
Zobrazí se informace o přeskočených testech.
--stop-on-fail
Tester zastaví testování u prvního selhávajícího testu.
-j <num>
Určuje, kolik paralelních procesů s testy se spustí. Výchozí hodnota je 8. Chceme-li, aby všechny testy proběhly v sérii, použijeme hodnotu 1.
-o <console|console-lines|tap|junit|log|none>
Nastaví formát výstupu. Výchozí je formát pro konzoli. Můžete uvést jméno souboru, do kterého se výstup zapíše
(např -o junit:output.xml
). Volbu -o
lze zopakovat vícekrát a vygenerovat tak více formátů
najednou.
console
: shodné s výchozím formátem, ale v tomto případě se nezobrazí ASCII logoconsole-lines
: podobné jako console, ale výsledek každého testu je uveden na samostatném řádku s dalšími informacemitap
: TAP formát vhodný pro strojové zpracováníjunit
: XML formát JUnit, taktéž vhodný pro strojové zpracovánílog
: Výstupy průběhu testování. Všechny neúspěšné, přeskočené a také úspěšné testynone
: nic se nevypisuje
-w | --watch <path>
Po dokončení testování Tester neskončí, ale zůstane běžet a sleduje PHP soubory v uvedeném adresáři. Při změně spustí testy znova. Parametr může být použit vícekrát, pokud chceme sledovat více adresářů.
Hodí se při refactoringu knihovny nebo ladění testů.
tester --watch src tests
-i | --info
Zobrazí informace o běhovém prostředí pro testy. Například:
tester -p /usr/bin/php7.1 -c tests/php.ini --info PHP binary: /usr/bin/php7.1 PHP version: 7.1.7-1+0~20170711133844.5+jessie~1.gbp5284f4 (cli) Code coverage engines: (not available) Loaded php.ini files: /var/www/dev/demo/tests/php.ini PHP temporary directory: /tmp Loaded extensions: Core, ctype, date, dom, ereg, fileinfo, filter, hash, ...
--setup <path>
Tester při startu načte zadaný PHP skript. V něm je k dispozici proměnná Tester\Runner\Runner $runner
.
Předpokládejme soubor tests/runner-setup.php
s obsahem:
$runner->outputHandlers[] = new MyOutputHandler;
Tester spustíme:
tester --setup tests/runner-setup.php tests
--temp <path>
Nastaví cestu k adresáři pro dočasné soubory Testeru. Výchozí hodnotu vrací sys_get_temp_dir()
. Není-li
výchozí hodnota validní, budete upozorněni.
Pokud si nejsme jisti, jaký adresář se používá, spustíme Tester s parametrem --info
.
--colors 1|0
Ve výchozím stavu Tester detekuje barevný terminál a obarvuje svůj výstup. Tato volba autodetekci přebíjí. Globálně
můžeme obarvování nastavit systémovou proměnnou prostředí NETTE_TESTER_COLORS
.
--coverage <path>
Tester vygeneruje report s přehledem, kolik zdrojového kódu testy pokrývají. Tato volba vyžaduje instalované PHP rozšíření Xdebug, nebo PCOV, anebo PHP 7 s PHPDBG SAPI, které je rychlejší. Přípona cílového souboru určuje jeho formát. Buď HTML anebo Clover XML.
tester tests --coverage coverage.html # HTML report tester tests --coverage coverage.xml # Clover XML report
Priorita výběru mechanismu je následující:
- PCOV
- PHPDBG
- Xdebug
Při použití PHPDBG můžeme u obsáhlých testů narazit na selhání testu kvůli vyčerpání paměti. Sběr informací
o pokrytém kódu je paměťově náročný. V tomto případě nám pomůže volání
Tester\CodeCoverage\Collector::flush()
uvnitř testu. Zapíše nasbíraná data na disk a paměť uvolní. Pokud
sběr dat neprobíhá, nebo je použit Xdebug, volání nemá žádný efekt.
Ukázka HTML reportu s pokrytím kódu.
--coverage-src <path>
Použijeme současně s volbou --coverage
. <path>
je cesta ke zdrojovým kódům, pro které
se report generuje. Může se použít opakovaně.
Vlastní php.ini
Tester spouští PHP procesy s parametrem -n
, což znamená, že žádné php.ini
není načteno.
V UNIXu ani ty z /etc/php/conf.d/*.ini
. To zajistí shodné prostředí pro běh testů, ale také vyřadí všechna
PHP rozšíření běžně načtená systémovým PHP.
Chcete-li načítání systémových php.ini souborů zachovat, použijte parametr -C
.
Pokud nějaká rozšíření nebo speciální INI nastavení pro testy potřebujete, doporučujeme vytvoření vlastního
php.ini
souboru, který bude distribuován s testy. Tester pak spouštíme s parametrem -c
,
například tester -c tests/php.ini tests
, kde INI soubor může vypadat takto:
[PHP]
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
memory_limit=512M
Spuštění Testeru v UNIXu se systémovým php.ini
, například tester -c /etc/php/cli/php.ini
nenačte ostatní INI z /etc/php/conf.d/*.ini
. To je vlastnost PHP, ne Testeru.