Стартиране на тестове
Най-видимата част на Nette Tester е стартерът на тестове от командния ред. Той е изключително бърз и стабилен, тъй като автоматично стартира всички тестове като самостоятелни процеси и то паралелно в няколко нишки. Също така може да се стартира сам в т.нар. watch режим.
Стартерът на тестове се извиква от командния ред. Като параметър посочваме директорията с тестовете. За текущата директория е достатъчно да зададем точка:
vendor/bin/tester .
Стартерът на тестове претърсва зададената директория и всички
поддиректории и търси тестове, които са файлове *.phpt
и
*Test.php
. Същевременно чете и оценява техните анотации, за да знае кои от тях и как да
стартира.
След това стартира тестовете. По време на изпълнение на тестовете изписва непрекъснато резултатите на терминала като знаци:
.
– тестът преминаs
– тестът беше пропуснат (skipped)F
– тестът се провали (failed)
Изходът може да изглежда например така:
_____ ___ ___ _____ ___ ___
|_ _/ __)( __/_ _/ __)| _ )
|_| \___ /___) |_| \___ |_|_\ 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)
При повторно стартиране първо изпълнява тестовете, които при предишното изпълнение са се провалили, така че веднага разбирате дали сте успели да поправите грешката.
Ако никой тест не се провали, кодът на връщане на Tester е нула. В противен случай кодът на връщане е ненулев.
Tester стартира PHP процеси без php.ini
. По-подробно в частта
Собствен php.ini.
Параметри на командния ред
Преглед на всички опции на командния ред получаваме, като стартираме
Tester без параметри или с параметър -h
:
_____ ___ ___ _____ ___ ___ |_ _/ __)( __/_ _/ __)| _ ) |_| \___ /___) |_| \___ |_|_\ 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>
Указва PHP бинарния файл, който ще се използва за стартиране на
тестовете. По подразбиране е php
.
tester -p /home/user/php-7.2.0-beta/php-cgi tests
-c <path>
Указва кой php.ini
ще се използва при стартиране на тестовете. По
подразбиране не се използва никакъв php.ini. Повече в частта Собствен php.ini.
-C
Използва се системният php.ini
. На UNIX също всички съответни INI
файлове /etc/php/{sapi}/conf.d/*.ini
. Повече в частта Собствен php.ini.
-d <key=value>
Задава стойността на PHP конфигурационна директива за тестовете. Параметърът може да бъде използван многократно.
tester -d max_execution_time=20
-s
Показва се информация за пропуснатите тестове.
--stop-on-fail
Tester спира тестването при първия провален тест.
-j <num>
Указва колко паралелни процеса с тестове да се стартират. Стойността по подразбиране е 8. Ако искаме всички тестове да се изпълнят последователно, използваме стойност 1.
-o <console|console-lines|tap|junit|log|none>
Задава формата на изхода. По подразбиране е формат за конзола. Можете
да посочите име на файл, в който да се запише изходът (напр.
-o junit:output.xml
). Опцията -o
може да се повтори многократно и
така да се генерират няколко формата едновременно.
console
: идентично с формата по подразбиране, но в този случай не се показва ASCII логотоconsole-lines
: подобно на console, но резултатът от всеки тест е посочен на отделен ред с допълнителна информацияtap
: TAP формат подходящ за машинна обработкаjunit
: XML формат JUnit, също подходящ за машинна обработкаlog
: Изходи от процеса на тестване. Всички неуспешни, пропуснати, както и успешни тестовеnone
: нищо не се изписва
-w | --watch <path>
След завършване на тестването Tester не спира, а остава да работи и следи PHP файловете в указаната директория. При промяна стартира тестовете отново. Параметърът може да бъде използван многократно, ако искаме да следим няколко директории.
Полезно е при рефакторинг на библиотека или дебъгване на тестовете.
tester --watch src tests
-i | --info
Показва информация за средата на изпълнение за тестовете. Например:
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>
Tester при стартиране зарежда зададения PHP скрипт. В него е налична
променливата Tester\Runner\Runner $runner
. Да предположим файл
tests/runner-setup.php
със съдържание:
$runner->outputHandlers[] = new MyOutputHandler;
Стартираме Tester:
tester --setup tests/runner-setup.php tests
--temp <path>
Задава пътя до директорията за временни файлове на Tester. Стойността по
подразбиране се връща от sys_get_temp_dir()
. Ако стойността по
подразбиране не е валидна, ще бъдете предупредени.
Ако не сме сигурни коя директория се използва, стартираме Tester с
параметър --info
.
--colors 1|0
По подразбиране Tester открива цветен терминал и оцветява своя изход.
Тази опция презаписва автодетекцията. Глобално можем да настроим
оцветяването със системната променлива на средата
NETTE_TESTER_COLORS
.
--coverage <path>
Tester генерира отчет с преглед колко от изходния код покриват тестовете. Тази опция изисква инсталирано PHP разширение Xdebug, или PCOV, или PHP 7 с PHPDBG SAPI, което е по-бързо. Разширението на целевия файл определя неговия формат. Или HTML, или Clover XML.
tester tests --coverage coverage.html # HTML отчет tester tests --coverage coverage.xml # Clover XML отчет
Приоритетът при избор на механизъм е следният:
- PCOV
- PHPDBG
- Xdebug
При използване на PHPDBG можем при обемни тестове да срещнем провал на
теста поради изчерпване на паметта. Събирането на информация за
покритоя код е паметоемко. В този случай ни помага извикването на
Tester\CodeCoverage\Collector::flush()
вътре в теста. Записва събраните данни на
диска и освобождава паметта. Ако събирането на данни не протича или се
използва Xdebug, извикването няма никакъв ефект.
Пример за HTML отчет с покритие на кода.
--coverage-src <path>
Използваме едновременно с опцията --coverage
. <path>
е
пътят до изходните кодове, за които се генерира отчетът. Може да се
използва многократно.
Собствен php.ini
Tester стартира PHP процеси с параметър -n
, което означава, че не се
зарежда никакъв php.ini
. На UNIX дори и тези от /etc/php/conf.d/*.ini
.
Това осигурява еднаква среда за изпълнение на тестовете, но също така
изключва всички PHP разширения, обикновено заредени от системния PHP.
Ако искате да запазите зареждането на системните php.ini файлове,
използвайте параметър -C
.
Ако се нуждаете от някакви разширения или специални INI настройки за
тестовете, препоръчваме създаването на собствен php.ini
файл,
който ще бъде разпространяван с тестовете. Tester след това стартираме с
параметър -c
, например tester -c tests/php.ini tests
, където INI файлът
може да изглежда така:
[PHP]
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
memory_limit=512M
Стартирането на Tester в UNIX със системен php.ini
, например
tester -c /etc/php/cli/php.ini
, не зарежда останалите INI от /etc/php/conf.d/*.ini
.
Това е свойство на PHP, не на Tester.