Tesztek futtatása

A Nette Tester leglátványosabb része a parancssori tesztfutó. Rendkívül gyors és robusztus, mert automatikusan elindítja az összes tesztet különálló folyamatként, párhuzamosan, több szálban. Képes önmagát is futtatni az úgynevezett watch módban.

A Nette Tester tesztfutó a parancssorból hívható meg. Paraméterként átadjuk a tesztkönyvtárat. Az aktuális könyvtárhoz csak egy pontot adjunk meg:

vendor/bin/tester .

Amikor meghívjuk, a tesztfutó átvizsgálja a megadott könyvtárat és az összes alkönyvtárat, és teszteket keres, amelyek a *.phpt és a *Test.php fájlok. Elolvassa és kiértékeli azok megjegyzéseit is, hogy tudja, melyiket és hogyan kell futtatni.

Ezután végrehajtja a teszteket. A futó minden egyes elvégzett teszt után kiír egy karaktert a haladás jelzésére:

  • . – teszt átment
  • s – a tesztet kihagyta
  • F – a teszt sikertelen

A kimenet így nézhet ki:

 _____ ___  ___ _____ ___  ___
|_   _/ __)( __/_   _/ __)| _ )
  |_| \___ /___) |_| \___ |_|_\  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)

Ha újra futtatja a programot, először azokat a teszteket futtatja le, amelyek az előző futtatás során sikertelenek voltak, így rögtön tudni fogja, hogy kijavította-e a hibát.

A tesztelő kilépési kódja nulla, ha egyik sem hibázik. Egyébként nem nulla.

A Tester a PHP-folyamatokat a php.ini nélkül futtatja. További részletek a Saját php.ini szakaszban.

Parancssori beállítások

A parancssori opciók áttekintését a Tester paraméterek nélküli vagy a -h opcióval történő futtatásával kapjuk meg:

 _____ ___  ___ _____ ___  ___
|_   _/ __)( __/_   _/ __)| _ )
  |_| \___ /___) |_| \___ |_|_\  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> (pl. -o junit:output.xml)
                                 Egy vagy több kimeneti formátum megadása opcionális fájlnévvel.
    -w | --watch <path>          Watch directory.
    -i | --info                  Show tests environment info and exit.
    --setup <path>               Script for runner setup.
    --temp <path>                Az ideiglenes könyvtár elérési útvonala. Alapértelmezett a sys_get_temp_dir() által.
    --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>

Megadja a tesztek futtatásához használt PHP bináris programot. Alapértelmezés szerint ez a php.

tester -p /home/user/php-7.2.0-beta/php-cgi tests

-c <path>

Megadja, hogy a tesztek futtatásakor melyik php.ini oldalt használja a rendszer. Alapértelmezés szerint nem használ php.ini-t. További információért lásd a Saját php.ini-t.

-C

Egy rendszerszintű php.ini kerül felhasználásra. Tehát UNIX platformon az összes /etc/php/{sapi}/conf.d/*.ini fájl is. Lásd a saját php.ini részt.

-d <key=value>

A tesztek PHP konfigurációs direktíva értékének beállítása. A paraméter többször is használható.

tester -d max_execution_time=20

-s

A kihagyott tesztekről szóló információk megjelennek.

--stop-on-fail

A tesztelő az első sikertelen tesztnél leállítja a tesztelést.

-j <num>

A tesztek futtatása egy <num> párhuzamos előfeldolgozásban. Az alapértelmezett érték 8. Ha a teszteket sorban szeretnénk futtatni, akkor az 1 értéket használjuk.

-o <console|console-lines|tap|junit|log|none>

Kimeneti formátum. Az alapértelmezett a konzol formátum. Megadhatja annak a fájlnak a nevét, amelybe a kimenetet írja (pl. -o junit:output.xml). A -o opciót többször is megismételhetjük, hogy egyszerre több formátumot generáljunk.

  • console: ugyanaz, mint az alapértelmezett, de az ASCII logó ebben az esetben nem kerül kiírásra.
  • console-lines: hasonló a konzolhoz, de az egyes tesztek eredményei külön sorban, több információval szerepelnek
  • tap: gépi feldolgozásra alkalmas TAP formátum.
  • junit: JUnit XML formátum, gépi feldolgozásra is alkalmas.
  • log: A tesztelés előrehaladásának kimenete. Minden sikertelen, kihagyott és sikeres tesztet
  • none: semmi sem kerül kinyomtatásra

-w | --watch <path>

A Tester nem ér véget a tesztek befejezése után, hanem tovább fut és figyeli a PHP fájlokat a megadott könyvtárban. Ha változtat, újra lefuttatja a teszteket. A paraméter többször is használható, ha több könyvtárat szeretnénk figyelni.

Ez praktikus egy könyvtár refaktorálása vagy tesztek hibakeresése során.

tester --watch src tests

-i | --info

Információkat mutat a teszt futtatási környezetéről. Például:

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, ...

-- <path>

A Tester indításkor betölti a megadott PHP-szkriptet. A Tester\Runner\Runner $runner változó elérhető benne. Tegyük fel, hogy a tests/runner-setup.php fájl :

$runner->outputHandlers[] = new MyOutputHandler;

és futtassuk a Testert:

tester --setup tests/runner-setup.php tests

-- <path>

Beállítja a Tester ideiglenes fájljainak könyvtárához vezető elérési utat. Az alapértelmezett értéket a sys_get_temp_dir() adja vissza. Ha az alapértelmezett érték nem érvényes, akkor észreveszi.

Ha nem vagyunk biztosak abban, hogy melyik könyvtárat használja, akkor a --info paraméterrel futtathatjuk a Testert.

--colors 1|0

A Tester alapértelmezésben felismeri a színezhető terminált, és színezi a kimenetét. Ez az opció az automatikus felismerés felett áll. A színezést globálisan a NETTE_TESTER_COLORS rendszerkörnyezeti változóval állíthatjuk be.

--coverage <path>

A tesztelő egy jelentést fog generálni, amely áttekintést ad arról, hogy a tesztek mennyire fedik le a forráskódot. Ez az opció PHP Xdebug vagy PCOV kiterjesztést igényel, vagy PHP 7-et a PHPDBG SAPI-val, ami gyorsabb. A célfájl kiterjesztése határozza meg a tartalom formátumát. HTML vagy Clover XML.

tester tests --coverage coverage.html  # HTML report
tester tests --coverage coverage.xml   # Clover XML report

A gyűjtési mechanizmus kiválasztásának prioritása a következő:

  1. PCOV
  2. PHPDBG
  3. Xdebug

A kiterjedt tesztek a PHPDBG futtatása során a memória kimerülése miatt meghiúsulhatnak. A lefedettségi adatok gyűjtése memóriaigényes művelet. Ebben az esetben a Tester\CodeCoverage\Collector::flush() meghívása a teszten belül segíthet. Ez az összegyűjtött adatokat fájlba mossa, és felszabadítja a memóriát. Ha az adatgyűjtés nem folyik, vagy az Xdebug használatban van, a hívásnak nincs hatása.

Egy példa a HTML-jelentésre kódlefedettséggel.

--coverage-src <path>

A --coverage opcióval egyidejűleg használjuk. A <path> a forráskód elérési útvonala, amelyhez a jelentést generáljuk. Többször is használható.

Saját php.ini

A Tester a PHP-folyamatokat a -n opcióval futtatja, ami azt jelenti, hogy a php.ini nem töltődik be (UNIX-ban még a /etc/php/conf.d/*.ini sem). Ez biztosítja ugyanazt a környezetet a futtatott tesztek számára, de kikapcsolja a rendszer PHP által általában betöltött összes külső PHP-bővítményt.

Ha meg akarja tartani a rendszerkonfigurációt, használja a -C paramétert.

Ha szüksége van néhány kiterjesztésre vagy speciális INI-beállításra, javasoljuk, hogy hozzon létre saját php.ini fájlt, és ossza szét a tesztek között. Ezután futtassuk a Tester-t a -c opcióval, pl. tester -c tests/php.ini. Az INI fájl így nézhet ki:

[PHP]

extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll

memory_limit=512M

A Tester futtatása UNIX rendszerben php.ini, pl. tester -c /etc/php/cgi/php.ini, nem tölt be más INI-t a /etc/php/conf.d/*.ini. Ez a PHP viselkedése, nem a Testeré.