Izvajanje testov
Najbolj viden del programa Nette Tester je program za izvajanje testov v ukazni vrstici. Je izjemno hiter in robusten, saj samodejno zažene vse teste kot ločene procese vzporedno v več niti. Prav tako se lahko sam izvaja v tako imenovanem načinu opazovanja.
Nette Tester Test Runner se sproži iz ukazne vrstice. Kot parameter bomo posredovali imenik testov. Za trenutni imenik vpišemo samo piko:
vendor/bin/tester .
Ko ga prikličemo, bo testni izvajalec pregledal navedeni imenik in vse podimenike ter poiskal teste, ki so datoteke
*.phpt
in *Test.php
. Prav tako prebere in oceni njihove opombe, da ve, katere in kako naj jih izvede.
Nato izvede teste. Za vsak opravljen test izvajalec izpiše en znak, ki označuje napredek:
.
– test je bil opravljens
– test je bil preskočenF
– test ni uspel
Izpis je lahko videti 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)
Ob ponovnem zagonu se najprej izvedejo testi, ki so bili med prejšnjim zagonom neuspešni, tako da boste takoj vedeli, ali ste napako odpravili.
Izhodna koda testerja je nič, če noben test ni uspešen. V nasprotnem primeru je neničelna.
Tester izvaja procese PHP brez php.ini
. Več podrobnosti najdete v razdelku Lastni php.ini.
Možnosti ukazne vrstice
Pregled možnosti ukazne vrstice dobimo tako, da zaženemo Tester brez parametrov ali z možnostjo -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> (npr. -o junit:output.xml) Določite enega ali več izhodnih formatov z neobveznim imenom datoteke. -w | --watch <path> Watch directory. -i | --info Show tests environment info and exit. --setup <path> Script for runner setup. --temp <path> Pot do začasnega imenika. Privzeto s 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 binarni strežnik PHP, ki se bo uporabljal za izvajanje testov. Privzeto je php
.
tester -p /home/user/php-7.2.0-beta/php-cgi tests
-c <path>
Določa, kateri php.ini
se bo uporabljal pri izvajanju testov. Privzeto se ne uporablja php.ini. Za več
informacij glejte Lastni php.ini.
-C
Uporabi se sistemski php.ini
. Tako so na platformi UNIX uporabljene tudi vse datoteke
/etc/php/{sapi}/conf.d/*.ini
. Oglejte si razdelek Lastni php.ini.
-d <key=value>
Nastavi vrednost konfiguracijske direktive PHP za teste. Parameter lahko uporabite večkrat.
tester -d max_execution_time=20
-s
Prikazane bodo informacije o preskočenih testih.
--stop-on-fail
Tester ustavi testiranje ob prvem neuspešnem testu.
-j <num>
Testi se izvajajo v <num>
vzporednih procesih. Privzeta vrednost je 8. Če želimo teste izvajati
zaporedno, uporabimo vrednost 1.
-o <console|console-lines|tap|junit|log|none>
Izhodni format. Privzeta je konzolna oblika. Določite lahko ime datoteke, v katero se bo zapisal izpis (npr.
-o junit:output.xml
). Možnost -o
lahko večkrat ponovite, da ustvarite več formatov naenkrat.
console
: enako kot privzeto, vendar se v tem primeru logotip ASCII ne izpiše.console-lines
: podobno kot v konzoli, vendar je rezultat vsakega testa naveden v ločeni vrstici z več informacijamitap
: format TAP, primeren za strojno obdelavojunit
: format JUnit XML, primeren tudi za strojno obdelavolog
: Izpis poteka testiranja. Vsi neuspešni, preskočeni in tudi uspešni testinone
: nič se ne izpiše
-w | --watch <path>
Tester se po končanih testih ne konča, temveč se še naprej izvaja in opazuje datoteke PHP v danem imeniku. Ob spremembi ponovno izvede teste. Parameter lahko uporabimo večkrat, če želimo spremljati več imenikov.
To je priročno med refaktorizacijo knjižnice ali odpravljanjem napak pri testih.
tester --watch src tests
-i | --info
Prikaže informacije o okolju, v katerem se izvaja test. 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 dano skripto PHP. V njej je na voljo spremenljivka Tester\Runner\Runner $runner
.
Predpostavimo datoteko tests/runner-setup.php
:
$runner->outputHandlers[] = new MyOutputHandler;
in zaženemo Tester:
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 na to opozorjeni.
Če nismo prepričani, kateri imenik se uporablja, lahko zaženemo Tester s parametrom --info
.
--colors 1|0
Tester privzeto zazna terminal z možnostjo obarvanja in obarva svoj izhod. Ta možnost je nad samodejnim zaznavanjem.
Obarvanje lahko globalno nastavimo s sistemsko okoljsko spremenljivko NETTE_TESTER_COLORS
.
--coverage <path>
Tester bo ustvaril poročilo s pregledom, koliko je izvorna koda pokrita s testi. Ta možnost zahteva omogočeno razširitev PHP Xdebug ali PCOV ali PHP 7 s PHPDBG SAPI, ki je hitrejši. Ciljna končnica datoteke določa obliko vsebine. HTML ali Clover XML.
tester tests --coverage coverage.html # HTML report tester tests --coverage coverage.xml # Clover XML report
Prednostna izbira mehanizma za zbiranje je naslednja:
- PCOV
- PHPDBG
- Xdebug
Obsežni testi lahko med izvajanjem s PHPDBG zaradi izčrpanosti pomnilnika ne uspejo. Zbiranje podatkov o pokritosti je
operacija, ki porabi veliko pomnilnika. V tem primeru lahko pomaga klicanje Tester\CodeCoverage\Collector::flush()
znotraj testa. Ta bo zbrane podatke spraznil v datoteko in sprostil pomnilnik. Če zbiranje podatkov ni v teku ali če se
uporablja Xdebug, klic nima učinka.
Primer poročila HTML s pokritostjo kode.
--coverage-src <path>
Uporabljamo jo hkrati z možnostjo --coverage
. Možnost <path>
je pot do izvorne kode, za
katero ustvarjamo poročilo. Uporabimo jo lahko večkrat.
Lastni php.ini
Tester izvaja procese PHP z možnostjo -n
, kar pomeni, da se ne naloži noben php.ini
(niti tisti iz
/etc/php/conf.d/*.ini
v sistemu UNIX). S tem je zagotovljeno enako okolje za zagon testov, hkrati pa so
deaktivirane vse zunanje razširitve PHP, ki jih sistemski PHP običajno naloži.
Če želite ohraniti sistemsko konfiguracijo, uporabite parameter -C
.
Če potrebujete nekatere razširitve ali posebne nastavitve INI, priporočamo, da ustvarite lastno datoteko
php.ini
in jo razdelite med teste. Nato zaženemo tester z možnostjo -c
, npr.
tester -c tests/php.ini
. Datoteka INI je lahko videti takole:
[PHP]
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
memory_limit=512M
Zagon Testerja s sistemsko možnostjo php.ini
v sistemu UNIX, npr. tester -c /etc/php/cgi/php.ini
,
ne naloži drugih INI iz /etc/php/conf.d/*.ini
. To je obnašanje PHP in ne Testerja.