Tesztek futtatása
A Nette Tester leglátványosabb része a parancssori tesztfuttató. Rendkívül gyors és robusztus, mivel automatikusan minden tesztet külön folyamatként indít el, és ezt párhuzamosan, több szálon teszi. Képes önmagát is futtatni az ún. watch módban.
A tesztfuttatót a parancssorból hívjuk meg. Paraméterként megadjuk a teszteket tartalmazó könyvtárat. Az aktuális könyvtárhoz elegendő egy pontot megadni:
vendor/bin/tester .
A tesztfuttató átvizsgálja a megadott könyvtárat és az összes alkönyvtárat, és megkeresi a teszteket, amelyek
*.phpt
és *Test.php
fájlok. Egyúttal olvassa és kiértékeli azok annotációit, hogy tudja, melyiket és hogyan kell futtatni.
Ezután elindítja a teszteket. A tesztek végrehajtása során folyamatosan kiírja az eredményeket a terminálra karakterekként:
.
– a teszt sikeres volt (passed)s
– a teszt kihagyva (skipped)F
– a teszt meghiúsult (failed)
A kimenet például í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)
Ismételt futtatáskor először azokat a teszteket hajtja végre, amelyek az előző futtatáskor meghiúsultak, így azonnal megtudhatja, hogy sikerült-e kijavítania a hibát.
Ha egyetlen teszt sem hiúsul meg, a Tester visszatérési értéke nulla. Ellenkező esetben a visszatérési érték nem nulla.
A Tester a PHP folyamatokat php.ini
nélkül indítja. Részletesebben a Saját php.ini részben.
Parancssori paraméterek
Az összes parancssori opció áttekintését a Tester paraméterek nélküli, vagy a -h
paraméterrel 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> (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>
Meghatározza a PHP binárist, amelyet a tesztek futtatásához használnak. Alapértelmezés szerint ez php
.
tester -p /home/user/php-7.2.0-beta/php-cgi tests
-c <path>
Meghatározza, melyik php.ini
kerül felhasználásra a tesztek futtatásakor. Alapértelmezett állapotban
egyetlen php.ini sem kerül felhasználásra. Több információ a Saját php.ini részben.
-C
A rendszer php.ini
-je kerül felhasználásra. UNIX-on az összes vonatkozó INI fájl is
/etc/php/{sapi}/conf.d/*.ini
. Több információ a Saját php.ini részben.
-d <key=value>
Beállítja a PHP konfigurációs direktíva értékét a tesztekhez. A paraméter többször is használható.
tester -d max_execution_time=20
-s
Információ jelenik meg a kihagyott tesztekről.
--stop-on-fail
A Tester leállítja a tesztelést az első meghiúsult tesztnél.
-j <num>
Meghatározza, hány párhuzamos folyamat induljon a tesztekkel. Az alapértelmezett érték 8. Ha azt szeretnénk, hogy az összes teszt sorozatban fusson le, használjuk az 1 értéket.
-o <console|console-lines|tap|junit|log|none>
Beállítja a kimeneti formátumot. Az alapértelmezett a konzol formátum. Megadhat egy fájlnevet, amelybe a kimenet íródik
(pl. -o junit:output.xml
). Az -o
opció többször is megismételhető, így egyszerre több formátumot
is generálhat.
console
: megegyezik az alapértelmezett formátummal, de ebben az esetben nem jelenik meg az ASCII logóconsole-lines
: hasonló a console-hoz, de minden teszt eredménye külön sorban jelenik meg további információkkaltap
: TAP formátum alkalmas gépi feldolgozásrajunit
: JUnit XML formátum, szintén alkalmas gépi feldolgozásralog
: A tesztelés folyamatának kimenetei. Minden meghiúsult, kihagyott és sikeres tesztnone
: semmi sem íródik ki
-w | --watch <path>
A tesztelés befejezése után a Tester nem fejeződik be, hanem tovább fut, és figyeli a PHP fájlokat a megadott könyvtárban. Változás esetén újra elindítja a teszteket. A paraméter többször is használható, ha több könyvtárat szeretnénk figyelni.
Hasznos egy könyvtár refaktorálásakor vagy tesztek debuggolásakor.
tester --watch src tests
-i | --info
Információkat jelenít meg a tesztek futá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, ...
--setup <path>
A Tester indításkor betölti a megadott PHP szkriptet. Ebben elérhető a Tester\Runner\Runner $runner
változó. Tegyük fel, hogy van egy tests/runner-setup.php
fájlunk a következő tartalommal:
$runner->outputHandlers[] = new MyOutputHandler;
Indítsuk el a Testert:
tester --setup tests/runner-setup.php tests
--temp <path>
Beállítja az elérési utat a Tester ideiglenes fájljainak könyvtárához. Az alapértelmezett értéket a
sys_get_temp_dir()
adja vissza. Ha az alapértelmezett érték nem érvényes, figyelmeztetést kap.
Ha nem vagyunk biztosak abban, hogy melyik könyvtár használatos, indítsuk el a Testert a --info
paraméterrel.
--colors 1|0
Alapértelmezés szerint a Tester észleli a színes terminált, és színezi a kimenetét. Ez az opció felülbírálja az
automatikus észlelést. Globálisan a színezést a NETTE_TESTER_COLORS
rendszer környezeti változóval
állíthatjuk be.
--coverage <path>
A Tester jelentést generál arról, hogy a tesztek mennyi forráskódot fednek le. Ehhez az opcióhoz telepített Xdebug PHP kiterjesztés, vagy PCOV, vagy PHP 7 PHPDBG SAPI szükséges, amely gyorsabb. A célfájl kiterjesztése határozza meg annak formátumát. Vagy HTML, vagy Clover XML.
tester tests --coverage coverage.html # HTML jelentés tester tests --coverage coverage.xml # Clover XML jelentés
A mechanizmus kiválasztásának prioritása a következő:
- PCOV
- PHPDBG
- Xdebug
PHPDBG használatakor terjedelmes teszteknél előfordulhat, hogy a teszt memóriahiány miatt meghiúsul. A lefedett kódról
szóló információk gyűjtése memóriaigényes. Ebben az esetben segít a Tester\CodeCoverage\Collector::flush()
hívása a teszten belül. Kiírja az összegyűjtött adatokat a lemezre, és felszabadítja a memóriát. Ha az adatgyűjtés
nem zajlik, vagy Xdebugot használunk, a hívásnak nincs hatása.
HTML jelentés példája a kódlefedettséggel.
--coverage-src <path>
A --coverage
opcióval együtt használjuk. A <path>
az elérési út a forráskódokhoz,
amelyekhez a jelentés generálódik. Többször is használható.
Saját php.ini
A Tester a PHP folyamatokat a -n
paraméterrel indítja, ami azt jelenti, hogy egyetlen php.ini
sem
töltődik be. UNIX-on még a /etc/php/conf.d/*.ini
fájlok sem. Ez biztosítja a tesztek futtatásához azonos
környezetet, de kikapcsolja az összes, a rendszer PHP által általában betöltött PHP kiterjesztést is.
Ha meg akarja őrizni a rendszer php.ini
fájljainak betöltésé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 a tesztekhez, javasoljuk saját
php.ini
fájl létrehozását, amelyet a tesztekkel együtt terjesztenek. A Testert ezután a -c
paraméterrel indítjuk, például tester -c tests/php.ini tests
, ahol 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-on a rendszer php.ini
-jével, például tester -c /etc/php/cli/php.ini
, nem
tölti be a többi INI-t a /etc/php/conf.d/*.ini
-ből. Ez a PHP tulajdonsága, nem a Testeré.