Zagon testov
Najbolj vidna komponenta Nette Testerja je zaganjalnik testov iz ukazne vrstice. Je izjemno hiter in robusten,
saj samodejno zažene vse teste kot ločene procese in to vzporedno v več nitih. Prav tako se zna zagnati sam v t.i. načinu
watch
.
Zaganjalnik testov kličemo iz ukazne vrstice. Kot parameter navedemo imenik s testi. Za trenutni imenik je dovolj vnesti piko:
vendor/bin/tester .
Zaganjalnik testov preišče navedeni imenik in vse podimenike ter poišče teste, kar so datoteke *.phpt
in
*Test.php
. Hkrati bere in vrednoti njihove opombe, da ve,
katere in kako jih zagnati.
Nato zažene teste. Med izvajanjem testov sproti izpisuje rezultate na terminal kot znake:
.
– test je uspešens
– test je bil preskočen (skipped)F
– test je neuspešen (failed)
Izpis lahko izgleda na primer takole:
_____ ___ ___ _____ ___ ___
|_ _/ __)( __/_ _/ __)| _ )
|_| \___ /___) |_| \___ |_|_\ 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)
Pri ponovnem zagonu najprej izvaja teste, ki so pri prejšnjem zagonu bili neuspešni, tako da takoj izveste, ali ste napako uspeli odpraviti.
Če noben test ni neuspešen, je izhodna koda Testerja nič. Sicer je izhodna koda neničelna.
Tester zažene procese PHP brez php.ini
. Podrobneje v delu Lasten
php.ini.
Parametri ukazne vrstice
Pregled vseh možnosti ukazne vrstice dobimo z zagonom Testerja brez parametrov ali s parametrom -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>
Določa izvedljivo datoteko PHP, ki se bo uporabljala za zagon testov. Standardno je to php
.
tester -p /home/user/php-7.2.0-beta/php-cgi tests
-c <path>
Določa, kateri php.ini
se bo uporabljal pri zagonu testov. Privzeto se noben php.ini
ne uporabi.
Več v delu Lasten php.ini.
-C
Uporabi se sistemski php.ini
. V sistemu UNIX tudi vse ustrezne datoteke INI
/etc/php/{sapi}/conf.d/*.ini
. Več v delu Lasten php.ini.
-d <key=value>
Nastavi vrednost konfiguracijske direktive PHP za teste. Parameter se lahko uporabi večkrat.
tester -d max_execution_time=20
-s
Prikaže informacije o preskočenih testih.
--stop-on-fail
Tester ustavi testiranje ob prvem neuspešnem testu.
-j <num>
Določa, koliko vzporednih procesov s testi se zažene. Privzeta vrednost je 8. Če želimo, da vsi testi potekajo zaporedno, uporabimo vrednost 1.
-o <console|console-lines|tap|junit|log|none>
Nastavi izhodni format. Privzeti format je za konzolo. Lahko navedete ime datoteke, v katero se izpis zapiše (npr.
-o junit:output.xml
). Možnost -o
lahko ponovite večkrat in tako generirate več formatov hkrati.
console
: enak privzetemu formatu, vendar se v tem primeru ne prikaže logotip ASCIIconsole-lines
: podobno kotconsole
, vendar je rezultat vsakega testa naveden v ločeni vrstici z dodatnimi informacijamitap
: TAP format primeren za strojno obdelavojunit
: format JUnit XML, prav tako primeren za strojno obdelavolog
: Dnevniki poteka testiranja. Vsi neuspešni, preskočeni in tudi uspešni testinone
: nič se ne izpiše
-w | --watch <path>
Po končanem testiranju Tester ne konča, ampak ostane zagnan in spremlja datoteke PHP v navedenem imeniku. Ob spremembi ponovno zažene teste. Parameter lahko uporabite večkrat, če želite spremljati več imenikov.
Uporabno pri refaktoriranju knjižnice ali razhroščevanju testov.
tester --watch src tests
-i | --info
Prikaže informacije o okolju izvajanja testov. Na primer:
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 ob zagonu naloži navedeni skript PHP. V njem je na voljo spremenljivka Tester\Runner\Runner $runner
.
Predpostavimo datoteko tests/runner-setup.php
z vsebino:
$runner->outputHandlers[] = new MyOutputHandler;
Tester zaženemo:
tester --setup tests/runner-setup.php tests
--temp <path>
Nastavi pot do imenika za začasne datoteke Testerja. Privzeto vrednost vrne sys_get_temp_dir()
. Če privzeta
vrednost ni veljavna, boste opozorjeni.
Če niste prepričani, kateri imenik se uporablja, zaženite Tester s parametrom --info
.
--colors 1|0
Privzeto Tester zazna barvni terminal in obarva svoj izpis. Ta možnost preglasi samodejno zaznavanje. Globalno lahko barvanje
nastavite s sistemsko okoljsko spremenljivko NETTE_TESTER_COLORS
.
--coverage <path>
Tester ustvari poročilo s pregledom, koliko izvorne kode pokrivajo testi. Ta možnost zahteva nameščeno razširitev PHP Xdebug ali PCOV ali PHP 7 s PHPDBG SAPI, ki je hitrejši. Končnica ciljne datoteke določa njen format. Bodisi HTML ali Clover XML.
tester tests --coverage coverage.html # HTML poročilo tester tests --coverage coverage.xml # Clover XML poročilo
Prioriteta izbire mehanizma je naslednja:
- PCOV
- PHPDBG
- Xdebug
Pri uporabi PHPDBG lahko pri obsežnih testih naletite na neuspeh testa zaradi izčrpanja pomnilnika. Zbiranje informacij
o pokritosti kode je pomnilniško zahtevno. V tem primeru vam pomaga klic Tester\CodeCoverage\Collector::flush()
znotraj testa. Zapiše zbrane podatke na disk in sprosti pomnilnik. Če zbiranje podatkov ne poteka ali se uporablja Xdebug, klic
nima učinka.
Primer poročila HTML s pokritostjo kode.
--coverage-src <path>
Uporabite hkrati z možnostjo --coverage
. <path>
je pot do izvorne kode, za katero se ustvari
poročilo. Lahko se uporabi večkrat.
Lasten php.ini
Tester zažene procese PHP s parametrom -n
, kar pomeni, da se ne naloži noben php.ini
. V sistemu
UNIX niti tisti iz /etc/php/conf.d/*.ini
. To zagotavlja enako okolje za izvajanje testov, vendar tudi izključi vse
razširitve PHP, ki jih običajno naloži sistemski PHP.
Če želite ohraniti nalaganje sistemskih datotek php.ini
, uporabite parameter -C
.
Če za teste potrebujete kakšne razširitve ali posebne nastavitve INI, priporočamo ustvarjanje lastne datoteke
php.ini
, ki bo distribuirana s testi. Tester nato zaženite s parametrom -c
, na primer
tester -c tests/php.ini tests
, kjer lahko datoteka INI izgleda takole:
[PHP]
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
memory_limit=512M
Zagon Testerja v sistemu UNIX s sistemskim php.ini
, na primer tester -c /etc/php/cli/php.ini
, ne
naloži drugih INI iz /etc/php/conf.d/*.ini
. To je lastnost PHP, ne Testerja.