Spouštění testů

Tester spouštíme z příkazové řádky. Bez parametrů pouze vypíše nápovědu.

vendor/bin/tester      # UNIX
vendor\bin\tester      # Windows

Pro zjednodušení budeme dále uvádět pouze příkaz tester. Ke spuštění je ale nutné použít jeden z výše popsaných způsobů s úplnou cestou.

Jako parametr uvedeme adresář s testy. Pro aktuální adresář stačí zadat tečku:

tester .

Tester projde adresář a podadresáře, vytvoří si seznam nalezených testů a potom je provádí. Každý test spustí jako nový PHP proces, každý test tak probíhá zcela izolovaně od ostatních.

Tester vyhledává *.phpt a *Test.php soubory. Jako první spouští testy, které při předchozím běhu selhaly.

Tester spouští PHP procesy s parametrem -n, tedy bez php.ini. Detailněji v kapitole 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.

-p <path>

Pro spouštění testů použije Tester tuto PHP binárku:

tester -p /home/user/php-7.2.0-beta/php-cgi tests

-c <path>

Volba je stejná jako pro PHP binárku. Pro testy bude použit zadaný php.ini. Ve výchozím stavu se žádný php.ini nepoužije. Příklad, kdy distribuujeme php.ini s testy:

tester -c tests/php.ini tests

-C

Použije se systémové php.ini. Na UNIXu také všechny příslušné INI soubory /etc/php/{sapi}/conf.d/*.ini.

-l | –log <path>

Do souboru bude zapsán průběh testování. Všechny selhané, přeskočené, ale i úspěšné testy:

tester --log /var/log/tests.log tests

-d <key=value>

Volba je stejná jako pro PHP binárku. Pro testy definuje INI hodnotu. Parametr může být použit vícekrát.

-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|tap|junit|none>

Nastaví formát výstupu. Výchozí je formát pro konzoli.

  • console: shodné s výchozím formátem, ale v tomto případě se nezobrazí ASCII logo
  • tap: TAP formát vhodný pro strojové zpracování
  • junit: XML formát JUnit, taktéž vhodný pro strojové zpracování
  • none: nic se nevypisuje

-w | –watch <path>

Po dokončení testování Tester neskončí, ale zůstane běžet a sleduje zadaný adresář. Při změně spustí testy znova. Parametr může být použit vícekrát. Hodí se při tvorbě a ladění testů.

-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)

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í hodnota podle 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, 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

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, žádné php.ini není načteno. V UNIXu ani ty z /etc/php/conf.d/*.ini. To zajistí co nejčistší 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.