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 trecut
  • s – testul a fost sărit
  • F – 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ții
  • tap: 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șite
  • none: 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:

  1. PCOV
  2. PHPDBG
  3. 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.