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ókkal
  • tap: TAP formátum alkalmas gépi feldolgozásra
  • junit: JUnit XML formátum, szintén alkalmas gépi feldolgozásra
  • log: A tesztelés folyamatának kimenetei. Minden meghiúsult, kihagyott és sikeres teszt
  • none: 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ő:

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