Запуск тестов
Самой заметной частью 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.