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 átments
– a tesztet kihagytaF
– 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 szerepelnektap
: 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 tesztetnone
: 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ő:
- PCOV
- PHPDBG
- 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é.