Подтвердить что ты не робот

Покрытие кода с помощью 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

4b9b3361

Ответ 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-адрес и вывод из веб-браузера, обслуживающего запрос. Он не имеет возможности узнать, какой код веб-сервер обрабатывает запрос на самом деле.

Итак, когда в предыдущем ответе говорилось, что отчеты о покрытии кода для этих тестов не будут предоставлять полезную информацию, и что модульные тесты будут генерировать более значимые отчеты, я бы сказал, что это не возможно для этих тестов для измерения охвата кода вообще, поэтому вы не должны запрашивать отчеты о покрытии кода при их запуске! Вернее, если вы создаете отчеты о покрытии кода для тестов на селен, и в отчетах говорится, что даже одна строка вашего кода работает, то что-то серьезно не соответствует вашей настройке.