Многие из текущих ответов обсуждают, как получить доступ и проанализировать продолжительность времени в файле журнала.Я поделюсь двумя способами изменения вывода CLI в phpUnit версии 3.7.38 (это то, что Travis-CI использует для PHP по умолчанию), основываясь на неполном ответе @ edorian .
Используйте пользовательский принтер для переопределения вывода CLI.Я не могу найти никакой документации для принтеров, но они, кажется, поддерживаются.Вы можете увидеть, какие методы доступны в исходном коде .
class TestDurationPrinter extends PHPUnit_TextUI_ResultPrinter
{
public function endTest(PHPUnit_Framework_Test $test, $time)
{
printf("Test '%s' ended and took %s seconds.\n",
$test->getName(),
$time
);
}
}
Затем добавьте эти строки в качестве атрибутов к phpunit
в файле phpunit.xml
:
printerFile="path/to/TestDurationPrinter.php"
printerClass="TestDurationPrinter"
Вы также можете использовать опцию --printer
CLI, но это не очень хорошо работает с пространствами имен.
Вы можете добавить к выводу CLI, вместо того, чтобы переопределять его, с помощью TestListener с помощьюреализация интерфейса PHPUnit_Framework_TestListener
(это тот же интерфейс, который используют принтеры).Это по-прежнему будет печатать .
, S
и F
, поэтому обязательно учтите это, если хотите.
class TestDurationListener implements PHPUnit_Framework_TestListener
{
public function endTest(PHPUnit_Framework_Test $test, $time)
{
printf("Test '%s' ended and took %s seconds.\n",
$test->getName(),
$time
);
}
public function addError(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time)
{
}
public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
public function addRiskyTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
public function startTest(PHPUnit_Framework_Test $test)
{
}
public function startTestSuite(PHPUnit_Framework_TestSuite $suite)
{
}
public function endTestSuite(PHPUnit_Framework_TestSuite $suite)
{
}
}
В версии 3.8 и выше есть PHPUnit_Framework_BaseTestListener
, который можетбыть расширенным, чтобы вы могли определять только те методы, которые хотите переопределить.
class TestDurationListener extends PHPUnit_Framework_BaseTestListener
{
public function endTest(PHPUnit_Framework_Test $test, $time)
{
printf("Test '%s' ended.\n", $test->getName());
}
}
Чтобы включить нового слушателя, добавьте эти строки в файл phpunit.xml
:
<listeners>
<listener class="TestDurationListener" file="path/to/TestDurationListener.php" />
</listeners>