Executarea testelor
Partea cea mai vizibilă a Nette Tester este programul de execuție a testelor din linia de comandă. Acesta este extrem de rapid și robust, deoarece pornește automat toate testele ca procese separate, în paralel, în mai multe fire de execuție. De asemenea, poate rula singur în așa-numitul mod de supraveghere.
Executantul de teste Nette Tester este invocat din linia de comandă. Ca parametru, vom trece directorul de testare. Pentru directorul curent este suficient să introduceți un punct:
vendor/bin/tester .
Atunci când este invocat, Test Runner va scana directorul specificat și toate subdirectoarele și va căuta teste, care sunt
fișierele *.phpt
și *Test.php
. De asemenea, citește și evaluează adnotările acestora pentru a ști care dintre ele și cum să le execute.
Apoi va executa testele. Pentru fiecare test efectuat, runner tipărește un caracter pentru a indica progresul:
.
.. – test trecuts
– testul a fost săritF
– testul a eșuat
Rezultatul poate arăta 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)
Când îl rulați din nou, acesta rulează mai întâi testele care au eșuat în timpul rulării anterioare, astfel încât veți ști imediat dacă ați remediat eroarea.
Codul de ieșire al testerului este zero dacă niciunul nu dă greș. În caz contrar, este diferit de zero.
Tester rulează procesele PHP fără php.ini
. Mai multe detalii în secțiunea Own php.ini.
Opțiuni de linie de comandă
Obținem prezentarea generală a opțiunilor din linia de comandă prin rularea Tester fără parametri sau cu opțiunea
-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> (de exemplu, -o junit:output.xml) Specifică unul sau mai multe formate de ieșire cu nume de fișier opțional. -w | --watch <path> Watch directory. -i | --info Show tests environment info and exit. --setup <path> Script for runner setup. --temp <path> Calea către directorul temporar. Predefinit de 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 utilizat pentru a rula testele. În mod implicit este php
.
tester -p /home/user/php-7.2.0-beta/php-cgi tests
-c <path>
Specifică ce php.ini
va fi utilizat la rularea testelor. În mod implicit, nu se utilizează niciun php.ini.
Consultați Own php.ini pentru mai multe informații.
-C
Se utilizează un sistem la nivel de sistem php.ini
. Deci, pe platforma UNIX, toate fișierele
/etc/php/{sapi}/conf.d/*.ini
. A se vedea secțiunea Own php.ini.
-d <key=value>
Stabilește valoarea directivei de configurare PHP pentru teste. Parametrul poate fi utilizat de mai multe ori.
tester -d max_execution_time=20
-s
Vor fi afișate informații despre testele omise.
--stop-on-fail
Testerul oprește testarea la primul test eșuat.
-j <num>
Testele se execută în <num>
precesiuni paralele. Valoarea implicită este 8. Dacă dorim să rulăm
testele în serie, folosim valoarea 1.
-o <console|console-lines|tap|junit|log|none>
Format de ieșire. Formatul implicit este cel de consolă. Puteți specifica numele fișierului în care va fi scrisă ieșirea
(de exemplu, -o junit:output.xml
). Opțiunea -o
poate fi repetată de mai multe ori pentru a genera mai
multe formate deodată.
console
: la fel ca în mod implicit, dar logo-ul ASCII nu este tipărit în acest caz.console-lines
: similar cu consola, dar rezultatul fiecărui test este listat pe o linie separată cu mai multe informațiitap
: format TAP adecvat pentru procesarea pe mașinăjunit
: format JUnit XML, adecvat și pentru procesarea pe mașinălog
: Afișează progresul testelor. Toate testele eșuate, sărite și, de asemenea, cele reușitenone
: nu se tipărește nimic
-w | --watch <path>
Tester nu se termină după ce testele sunt finalizate, ci continuă să ruleze și să urmărească fișierele PHP din directorul dat. În cazul în care se modifică, testele se execută din nou. Parametrul poate fi utilizat de mai multe ori dacă dorim să monitorizăm mai multe directoare.
Este la îndemână în timpul refactorizării unei biblioteci sau a depanării testelor.
tester --watch src tests
''-i | –info'''
Afișează informații despre un mediu de execuție a unui test. 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 încarcă scriptul PHP dat la pornire. Variabila Tester\Runner\Runner $runner
este disponibilă în acesta.
Să presupunem că fișierul tests/runner-setup.php
:
$runner->outputHandlers[] = new MyOutputHandler;
și executăm Tester:
tester --setup tests/runner-setup.php tests
--temp <path>
Stabilește o cale către directorul pentru fișierele temporare ale Tester. Valoarea implicită este returnată de
sys_get_temp_dir()
. Atunci când valoarea implicită nu este validă, veți fi anunțat.
Dacă nu suntem siguri ce director este utilizat, putem rula Tester cu parametrul --info
.
--colors 1|0
Tester detectează în mod implicit un terminal colorabil și își colorează ieșirea. Această opțiune se suprapune
detecției automate. Putem seta colorarea la nivel global printr-o variabilă de mediu de sistem
NETTE_TESTER_COLORS
.
--coverage <path>
Tester va genera un raport cu o imagine de ansamblu a gradului de acoperire a codului sursă de către teste. Această opțiune necesită activarea extensiei PHP Xdebug sau PCOV sau PHP 7 cu PHPDBG SAPI, care este mai rapid. Extensia fișierului de destinație determină formatul conținutului. HTML sau Clover XML.
tester tests --coverage coverage.html # HTML report tester tests --coverage coverage.xml # Clover XML report
Prioritatea pentru alegerea mecanismului de colectare este următoarea:
- PCOV
- PHPDBG
- Xdebug
Testele extinse pot eșua în timpul rulării de către PHPDBG din cauza epuizării memoriei. Colectarea datelor de acoperire
este o operațiune consumatoare de memorie. În acest caz, apelarea Tester\CodeCoverage\Collector::flush()
în
cadrul unui test poate fi de ajutor. Aceasta va arunca datele colectate în fișier și va elibera memorie. Atunci când
colectarea datelor nu este în curs de desfășurare sau când se utilizează Xdebug, apelarea nu are niciun efect.
Un exemplu de raport HTML cu acoperire de cod.
--coverage-src <path>
O folosim simultan cu opțiunea --coverage
. Opțiunea <path>
este o cale către codul sursă
pentru care generăm raportul. Poate fi utilizată în mod repetat.
Propriu php.ini
Tester rulează procesele PHP cu opțiunea -n
, ceea ce înseamnă că nu se încarcă php.ini
(nici
măcar cea de la /etc/php/conf.d/*.ini
în UNIX). Aceasta asigură același mediu pentru testele rulate, dar
dezactivează și toate extensiile PHP externe încărcate în mod obișnuit de PHP de sistem.
Dacă doriți să păstrați configurația sistemului, utilizați parametrul -C
.
Dacă aveți nevoie de anumite extensii sau de anumite setări INI speciale, vă recomandăm să creați propriul fișier
php.ini
și să-l distribuiți între teste. Apoi executăm Tester cu opțiunea -c
, de exemplu
tester -c tests/php.ini
. Fișierul INI poate arăta astfel:
[PHP]
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
memory_limit=512M
Rularea Tester cu un sistem php.ini
în UNIX, de exemplu tester -c /etc/php/cgi/php.ini
, nu încarcă
alte INI din /etc/php/conf.d/*.ini
. Acesta este comportamentul PHP, nu al Testerului.