Nette Documentation Preview

syntax
Tesztek futtatása
*****************

.[perex]
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:

/--pre .[terminal]
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 |test-annotations] 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:

- <code style="color: #CCC; background-color: #000">.</code> - teszt átment
- <code style="color: #CCC; background-color: #000">s</code> - a tesztet kihagyta
- <code style="color: #FFF; background-color: #900">F</code> - a teszt sikertelen

A kimenet így nézhet ki:

/--pre .[terminal]
 _____ ___  ___ _____ ___  ___
|_   _/ __)( __/_   _/ __)| _ )
  |_| \___ /___) |_| \___ |_|_\  v2.5.2

Note: No php.ini is used.
PHP 8.3.2 (cli) | php -n | 8 threads

........s..........................

<span style="color: #FFF; background-color: #090">OK (35 tests, 1 skipped, 1.7 seconds)</span>
\--

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.

.[warning]
A Tester a PHP-folyamatokat a `php.ini` nélkül futtatja. További részletek a [Saját php.ini |#Own php.ini] szakaszban.


Parancssori beállítások .[#toc-command-line-options]
====================================================

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:

/--pre .[terminal]
 _____ ___  ___ _____ ___  ___
|_   _/ __)( __/_   _/ __)| _ )
  |_| \___ /___) |_| \___ |_|_\  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> .[filter]
-------------------
Megadja a tesztek futtatásához használt PHP bináris programot. Alapértelmezés szerint ez a `php`.

/--pre .[terminal]
tester -p /home/user/php-7.2.0-beta/php-cgi tests
\--


-c <path> .[filter]
-------------------
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 |#Own php.ini].


-C .[filter]
------------
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 |#Own php.ini] részt.


-d <key=value> .[filter]
------------------------
A tesztek PHP konfigurációs direktíva értékének beállítása. A paraméter többször is használható.

/--pre .[terminal]
tester -d max_execution_time=20
\--


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


--stop-on-fail .[filter]
------------------------
A tesztelő az első sikertelen tesztnél leállítja a tesztelést.


-j <num> .[filter]
------------------
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> .[filter]
-------------------------------------------------------
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 |https://en.wikipedia.org/wiki/Test_Anything_Protocol].
- `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>'' .[filter]
---------------------------------
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.

/--pre .[terminal]
tester --watch src tests
\--


''-i | --info'' .[filter]
-------------------------
Információkat mutat a teszt futtatási környezetéről. Például:

/--pre .[terminal]
tester -p /usr/bin/php7.1 -c tests/php.ini --info

<span style="color: #0F0">PHP binary:</span>
/usr/bin/php7.1

<span style="color: #0F0">PHP version:</span>
7.1.7-1+0~20170711133844.5+jessie~1.gbp5284f4 (cli)

<span style="color: #0F0">Code coverage engines:</span>
(not available)

<span style="color: #0F0">Loaded php.ini files:</span>
/var/www/dev/demo/tests/php.ini

<span style="color: #0F0">PHP temporary directory:</span>
/tmp

<span style="color: #0F0">Loaded extensions:</span>
Core, ctype, date, dom, ereg, fileinfo, filter, hash, ...
\--


-- <path> .[filter]
-------------------
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 :

```php
$runner->outputHandlers[] = new MyOutputHandler;
```

és futtassuk a Testert:

/--pre .[terminal]
tester --setup tests/runner-setup.php tests
\--


-- <path> .[filter]
-------------------
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 .[filter]
----------------------
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> .[filter]
---------------------------
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 |https://xdebug.org/] vagy [PCOV |https://github.com/krakjoe/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.

/--pre .[terminal]
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":https://files.nette.org/tester/coverage.html kódlefedettséggel.


--coverage-src <path> .[filter]
-------------------------------
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 .[#toc-own-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:

```ini
[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é.

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