Покрытие кода с помощью PHPUnitSeleniumTestcase
Я написал Selenium Test case для PHP. Я хотел бы получить покрытие кода, пока я выполняю эти тестовые примеры. Мой тестовый файл:
<?php
class Example extends PHPUnit_Extensions_SeleniumTestCase
{
protected $coverageScriptUrl = 'http://applicationname/phpunit_coverage.php';
protected function setUp()
{
$this->setBrowser("*firefox");
$this->setBrowserUrl("http://applicationname");
$this->setCollectCodeCoverageInformation(true);
$this->setTestId("10001");
$this->setHost("applicationname");
}
public function testMyTestCase()
{
$this->open("http://applicationame");
$this->assertEquals("title", $this->getTitle());
$this->type("id=ext-comp-1002", "testuser");
$this->fireEvent("id=ext-comp-1002", "blur");
$this->type("id=ext-comp-1003", "testpassword");
$this->fireEvent("id=ext-comp-1003", "blur");
$this->click("ext-gen45");
$this->waitForPageToLoad("200000");
}
}
?>
Я выполнил шаги, указанные в ссылке "http://www.phpunit.de/manual/current/en/selenium.html"
После запуска теста я не могу найти покрытие кода. В phpunit_coverage.php он ищет файл cookie с именем PHPUNIT_SELENIUM_TEST_ID. Этот файл cookie создается в Driver.php, и я вижу, что cookie доступен, но имеет имя хоста для установки на "localhost", а не на мое имя приложения.
Время работы cookie устанавливается сеансом, т.е. означает сразу после выполнения тестового примера, этот файл cookie больше не будет доступен, и когда я попытаюсь запустить phpunit_coverage.php, он не сможет найти файл cookie и информацию, чтобы не отображалось покрытие кода.
Вещи, которые я не понимаю:
-
protected $coverageScriptUrl = 'http://applicationname/phpunit_coverage.php';
- Если cookie имеет другой хост, отличный от приложения, доступ к этому файлу cookie
Я видел, что эта проблема обсуждалась на многих форумах, но один дал конкретный ответ
Многие форумы предложили использовать localhost
вместо 127.0.0.1
в качестве имени сервера. В моем случае это уже localhost.
Любое предложение в этом отношении будет полезно.
Спасибо,
Ravuri
Ответы
Ответ 1
Интеграция или функциональные тесты с Selenium не охватывают код, поскольку они охватывают поведение. Отчеты о покрытии кода для таких тестов не собираются генерировать какую-либо полезную информацию. Модульные тесты будут генерировать гораздо более значимые отчеты о покрытии кода. Тесты запускаются на основе информации, предоставленной и от Selenium, и это действительно не проверяет ваш "код", так сказать.
Ответ 2
Я думаю, что морозный ответ можно сделать еще сильнее, но я такой полный noob как с PHPUnit, так и с Selenium, что я не совсем уверен в том, что я говорю. Поэтому я скажу это и посмотрю, исправляюсь ли я.
Модульные тесты реализуют ваш код приложения под прямым контролем PHPUnit. Вы даете PHPUnit метод в вашем коде для вызова, и он вызывает этот метод в Xdebug для сбора информации о покрытии. Я думаю, что это означает, что ваш код работает в том же адресном пространстве, что и PHPUnit, хотя это может быть не совсем верно - знает ли кто-нибудь, есть ли это?
Когда тесты выполняются под Selenium, ваш код напрямую не находится под контролем PHPUnit. Вместо метода в вашем коде вы даете PHPUnit URL-адрес, и он упорядочивает этот URL для реального веб-браузера. Сам веб-браузер не должен работать на том же хост-компьютере, что и PHPUnit; и даже если это так, ваш тестируемый код приложения запускается на веб-сервере, указанном по URL-адресу. Разве это не так, как PHPUnit может сказать Firefox сказать серверу, обрабатывающему запрос, что если обработка запроса вызывает PHP, тогда запустите этот PHP-код под Xdebug и отправьте вывод трассировки вместе с ответом! PHPUnit получает только указанный вами URL-адрес и вывод из веб-браузера, обслуживающего запрос. Он не имеет возможности узнать, какой код веб-сервер обрабатывает запрос на самом деле.
Итак, когда в предыдущем ответе говорилось, что отчеты о покрытии кода для этих тестов не будут предоставлять полезную информацию, и что модульные тесты будут генерировать более значимые отчеты, я бы сказал, что это не возможно для этих тестов для измерения охвата кода вообще, поэтому вы не должны запрашивать отчеты о покрытии кода при их запуске! Вернее, если вы создаете отчеты о покрытии кода для тестов на селен, и в отчетах говорится, что даже одна строка вашего кода работает, то что-то серьезно не соответствует вашей настройке.