В документации PHPUnit говорится, что можно получить покрытие кода данные:
PHPUnit_Extensions_SeleniumTestCase может собирать информацию о покрытии кода для тестов, запускаемых через Selenium:
Скопируйте PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php в корневой каталог документов вашего веб-сервера.
В файле конфигурации php.ini вашего веб-сервера настройте PHPUnit/Extensions/SeleniumTestCase/prepend.php и PHPUnit/Extensions/SeleniumTestCase/append.php как auto_prepend_file и auto_append_file соответственно.
В вашем классе тестового примера, который расширяет PHPUnit_Extensions_SeleniumTestCase, используйте protected $coverageScriptUrl = ‘https://host/phpunit_coverage.php’; чтобы настроить URL-адрес для скрипта phpunit_coverage.php.
Я не смог заставить это вывести какую-либо информацию о покрытии. Я могу получить информацию о покрытии кода с помощью обычных модульных тестов.
Для моего приложения, работающего в https://localhost/ts2_templates/
, я скопировал phpunit_coverage.php
в https://localhost/phpunit_coverage.php
.
Я добавил в php.ini следующее:
auto_prepend_file = "/path/to/pear/share/pear/PHPUnit/Extensions/SeleniumTestCase/prepend.php"
auto_append_file = "/path/to/pear/share/pear/PHPUnit/Extensions/SeleniumTestCase/append.php"
… и подтверждено, что они вызываются с помощью die("yep it's me");
.
Наконец, я добавил следующее в свой тестовый пример:
<?php
class WebTest extends PHPUnit_Extensions_Selenium2TestCase
{
# added line below
protected $coverageScriptUrl = 'https://localhost/phpunit_coverage.php';
protected function setUp()
{
$this->setBrowser('firefox');
$this->setBrowserUrl('https://localhost/ts2_templates');
}
public function testTitle()
{
$this->url('https://localhost/ts2_templates');
$this->assertContains('test', $this->title());
}
}
?>
Вот команда для запуска теста с покрытием кода, сгенерированная PHPStorm:
/Applications/MAMP/bin/php5.3/bin/php -dxdebug.coverage_enable=1 /private/var/folders/pp/0t4y41f95j5313qm_f8b42fw0000gn/T/ide-phpunit.php --coverage-clover /path/to/coverage/ts2_templates$WebTest.coverage --no-configuration WebTest /Users/Ian/php/ts2_templates/tests/WebTest.php
Вот результат XML-файла покрытия:
<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1341015508">
<project timestamp="1341015508">
<metrics files="0" loc="0" ncloc="0" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
</project>
</coverage>
Сам тест проходит.
Я проверил, что нигде в коде нет операторов выхода или смерти.
Любые идеи?
Это определенно работает. Я настроил тесты селена в symfony, измеряя покрытие в соответствии с документацией.
Самая большая проблема, с которой я столкнулся, заключалась в том, что данные о покрытии имели неправильный путь к файлам, и поэтому не могли сопоставить источники с данными о покрытии. Это потому, что я выполнял тесты из другого места, так как сервер хранил файлы. Поэтому я изменил
append.php
, чтобы переписать путь к тому месту, где находятся мои исходные файлы.У меня также были некоторые проблемы с работой. Следующий сообщение в Мне помог форум YII Сэмюэля Гольдштейна: