#code-coverage #php-7.4 #phpdbg
Вопрос:
Я пытаюсь измерить тестовое покрытие без тестовой среды, используя phpdbg
Мой тестовый тестовый скрипт выглядит так:
$ cat hello.php
<?php
if (0) {
echo "byen";
} else {
echo "hellon";
}
поэтому он просто выводит hello следующим образом:
$ php hello.php
hello
кстати, это моя версия php
$ php --version
PHP 7.4.3 (cli) (built: Aug 13 2021 05:39:12) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
Я попытался угадать, как измерить тестовое покрытие этого скрипта с помощью phpdbg
, и это то, что я придумал
$ mkdir coverage
$ phpdbg -qrr hello.php --coverage-html coverage
hello
$ find coverage
coverage/
каталог пуст
Я надеялся найти там отчет о покрытии
Кто-нибудь знает, что я должен сделать по-другому?
Ответ №1:
Мое понимание того, как работает покрытие кода в PHP, заключается в том, что отладчик (или phpdbg
или Xdebug
) генерирует журнал каждой строки и phpunit
может использовать его для синтеза ожидаемого результата (HTML-страница с цветными строками, указывающими, сколько раз эта конкретная строка была нажата и т.д.). На самом деле --coverage-html
аргумент не за phpdbg
, а за phpunit
. В этом посте показан пример полной командной строки, минимальная версия которой будет:
phpdbg
-qrr vendor/phpunit/phpunit/phpunit
-c phpunit.xml
--coverage-html coverage
но, очевидно, это связано с использованием phpunit
и запуском тестов, что не соответствует вашему варианту использования.
Мне стало любопытно, как все это работает, и я собрал этот игрушечный инструмент покрытия, который будет работать для очень простого скрипта, который вы предоставили. Результат выглядит примерно так:
| <?php
|
1| if (0) {
0| echo "byen";
| } else {
1| echo "hellon";
| }
но если вы посмотрите Profiler::render_coverage
, вы увидите, что было бы не слишком сложно адаптировать это к любому формату вывода, который вы хотите.
Комментарии:
1. вау, спасибо! Я надеялся на другой ответ (отсутствующий аргумент) (потому что я думал, что он будет больше похож
nyc
на python), но это тоже здорово!2. Вы также можете взглянуть на выходные
phpdbg -qrr -v
данные or-O logfile
, которые будут выводить строки, коды операций и имена файлов. Однако исходный код PHP не выводится.