Rularea testelor
Partea cea mai vizibilă a Nette Tester este rulatorul de teste din linia de comandă. Este neobișnuit de rapid și robust, deoarece rulează automat toate testele ca procese separate și în paralel în mai multe fire de execuție. De asemenea, se poate rula singur în așa-numitul mod watch.
Rulatorul de teste îl apelăm din linia de comandă. Ca parametru specificăm directorul cu testele. Pentru directorul curent este suficient să specificăm un punct:
vendor/bin/tester .
Rulatorul de teste caută în directorul specificat și în toate subdirectoarele și găsește testele, care sunt fișiere
*.phpt
și *Test.php
. În același timp, citește și evaluează adnotările lor, pentru a ști care dintre ele și cum să le ruleze.
Apoi rulează testele. În timpul executării testelor, afișează continuu rezultatele pe terminal sub formă de caractere:
.
– testul a trecuts
– testul a fost omis (skipped)F
– testul a eșuat (failed)
Ieșirea poate arăta, de exemplu, astfel:
_____ ___ ___ _____ ___ ___
|_ _/ __)( __/_ _/ __)| _ )
|_| \___ /___) |_| \___ |_|_\ 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)
La rularea repetată, execută mai întâi testele care au eșuat la rularea anterioară, astfel încât aflați imediat dacă ați reușit să reparați eroarea.
Dacă niciun test nu eșuează, codul de retur al Testerului este zero. Altfel, codul de retur este nenul.
Tester rulează procesele PHP fără php.ini
. Mai detaliat în secțiunea php.ini personalizat.
Parametrii liniei de comandă
Prezentarea generală a tuturor opțiunilor liniei de comandă o obținem rulând Tester fără parametri sau cu parametrul
-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>
Specifică binarul PHP care va fi folosit pentru rularea testelor. Implicit este php
.
tester -p /home/user/php-7.2.0-beta/php-cgi tests
-c <path>
Specifică ce php.ini
va fi folosit la rularea testelor. Implicit, nu se folosește niciun php.ini. Mai multe în
secțiunea php.ini personalizat.
-C
Se va folosi php.ini
de sistem. Pe UNIX, de asemenea, toate fișierele INI relevante
/etc/php/{sapi}/conf.d/*.ini
. Mai multe în secțiunea php.ini
personalizat.
-d <key=value>
Setează valoarea directivei de configurare PHP pentru teste. Parametrul poate fi folosit de mai multe ori.
tester -d max_execution_time=20
-s
Se vor afișa informații despre testele omise.
--stop-on-fail
Tester va opri testarea la primul test eșuat.
-j <num>
Specifică câte procese paralele cu teste se vor rula. Valoarea implicită este 8. Dacă dorim ca toate testele să ruleze în serie, folosim valoarea 1.
-o <console|console-lines|tap|junit|log|none>
Setează formatul de ieșire. Implicit este formatul pentru consolă. Puteți specifica numele fișierului în care se va scrie
ieșirea (de ex. -o junit:output.xml
). Opțiunea -o
poate fi repetată de mai multe ori pentru a genera
mai multe formate simultan.
console
: identic cu formatul implicit, dar în acest caz nu se afișează logo-ul ASCIIconsole-lines
: similar cu console, dar rezultatul fiecărui test este specificat pe o linie separată cu informații suplimentaretap
: format TAP potrivit pentru prelucrare automatăjunit
: format XML JUnit, de asemenea potrivit pentru prelucrare automatălog
: Ieșiri ale progresului testării. Toate testele eșuate, omise și, de asemenea, cele reușitenone
: nu se afișează nimic
-w | --watch <path>
După finalizarea testării, Tester nu se închide, ci rămâne să ruleze și urmărește fișierele PHP din directorul specificat. La modificare, rulează din nou testele. Parametrul poate fi folosit de mai multe ori, dacă dorim să urmărim mai multe directoare.
Este util la refactorizarea unei biblioteci sau la depanarea testelor.
tester --watch src tests
-i | --info
Afișează informații despre mediul de rulare pentru teste. De exemplu:
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 la pornire încarcă scriptul PHP specificat. În acesta este disponibilă variabila
Tester\Runner\Runner $runner
. Presupunem fișierul tests/runner-setup.php
cu conținutul:
$runner->outputHandlers[] = new MyOutputHandler;
Rulăm Tester:
tester --setup tests/runner-setup.php tests
--temp <path>
Setează calea către directorul pentru fișierele temporare ale Testerului. Valoarea implicită este returnată de
sys_get_temp_dir()
. Dacă valoarea implicită nu este validă, veți fi avertizat.
Dacă nu suntem siguri ce director se folosește, rulăm Tester cu parametrul --info
.
--colors 1|0
Implicit, Tester detectează terminalul color și își colorează ieșirea. Această opțiune suprascrie autodetecția.
Global, putem seta colorarea prin variabila de mediu de sistem NETTE_TESTER_COLORS
.
--coverage <path>
Tester va genera un raport cu o prezentare generală a cât de mult cod sursă acoperă testele. Această opțiune necesită extensia PHP instalată Xdebug, sau PCOV, sau PHP 7 cu PHPDBG SAPI, care este mai rapid. Extensia fișierului țintă determină formatul său. Fie HTML, fie Clover XML.
tester tests --coverage coverage.html # raport HTML tester tests --coverage coverage.xml # raport Clover XML
Prioritatea alegerii mecanismului este următoarea:
- PCOV
- PHPDBG
- Xdebug
La utilizarea PHPDBG, la testele extinse putem întâmpina eșecul testului din cauza epuizării memoriei. Colectarea
informațiilor despre codul acoperit este consumatoare de memorie. În acest caz ne ajută apelul
Tester\CodeCoverage\Collector::flush()
în interiorul testului. Scrie datele colectate pe disc și eliberează
memoria. Dacă colectarea datelor nu are loc sau se folosește Xdebug, apelul nu are niciun efect.
Exemplu de raport HTML cu acoperirea codului.
--coverage-src <path>
Se folosește împreună cu opțiunea --coverage
. <path>
este calea către codurile sursă
pentru care se generează raportul. Se poate folosi în mod repetat.
php.ini personalizat
Tester rulează procesele PHP cu parametrul -n
, ceea ce înseamnă că niciun php.ini
nu este
încărcat. Pe UNIX, nici cele din /etc/php/conf.d/*.ini
. Acest lucru asigură un mediu identic pentru rularea
testelor, dar elimină și toate extensiile PHP încărcate în mod normal de PHP-ul de sistem.
Dacă doriți să păstrați încărcarea fișierelor php.ini de sistem, folosiți parametrul -C
.
Dacă aveți nevoie de anumite extensii sau setări INI speciale pentru teste, recomandăm crearea propriului fișier
php.ini
, care va fi distribuit cu testele. Tester îl rulăm apoi cu parametrul -c
, de exemplu
tester -c tests/php.ini tests
, unde fișierul INI poate arăta astfel:
[PHP]
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
memory_limit=512M
Rularea Testerului pe UNIX cu php.ini
de sistem, de exemplu tester -c /etc/php/cli/php.ini
, nu
încarcă celelalte INI din /etc/php/conf.d/*.ini
. Aceasta este o caracteristică a PHP, nu a Testerului.