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