12

PHP用のSeleniumテストケースを作成しました。これらのテスト ケースを実行している間、コード カバレッジを取得したいと考えています。私のテストケース:

<?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 では、PHPUNIT_SELENIUM_TEST_ID という名前の Cookie を探しています。この Cookie は Driver.php で作成されており、Cookie が利用可能であることがわかりますが、ホスト名はアプリケーション名ではなく「localhost」に設定されています。

Cookie の有効期間はセッションに設定されています。つまり、テスト ケースの実行直後にこの Cookie が使用できなくなり、phpunit_coverage.php を起動しようとすると、Cookie と情報が見つからないため、コード カバレッジが表示されません。

わからないこと:

  1. protected $coverageScriptUrl = 'http://applicationname/phpunit_coverage.php';
  2. Cookie にアプリケーション以外の別のホストがある場合、この Cookie にアクセスできますか

この問題が多くのフォーラムで議論されているのを見てきましたが、そのうちの 1 つが具体的な答えを出しました

多くのフォーラムが、サーバー名localhostの代わりに使用することを提案しました。127.0.0.1私の場合、それはすでにlocalhostです。

この点に関する提案は役に立ちます。

ありがとう、ラヴリ

4

2 に答える 2

2

Selenium を使用した統合または機能テストは、動作をカバーしている限り、コードをカバーしていません。このようなテストのコード カバレッジ レポートは、有用な情報を生成しません。単体テストは、より意味のあるコード カバレッジ レポートを生成します。テストは、Selenium との間で提供される情報に基づいて実行されます。いわば「コード」を実際にテストするわけではありません。

于 2012-12-11T18:10:17.390 に答える
1

フロスティの答えはさらに強力になる可能性があると思いますが、私はPHPUnitとSeleniumの両方にまったく慣れていないため、自分の言っていることが完全にはわかりません。だから私はそれを言って、私が修正されるかどうかを確認します。

単体テストは、PHPUnit の直接制御下でアプリケーション コードを実行します。コード内で呼び出すメソッドを PHPUnit に指定すると、Xdebug の下でそのメソッドが呼び出され、カバレッジ情報が収集されます。厳密にはそうではないかもしれませんが、PHPUnit と同じアドレス空間でコードを実行していると思います。

Selenium でテストを実行すると、コードは PHPUnit の直接の制御下にはまったくありません。コード内のメソッドの代わりに、PHPUnit に URL を与えると、その URL が実際の Web ブラウザーにフィードされるように調整されます。Web ブラウザ自体は、PHPUnit と同じホスト マシンで実行する必要はありません。その場合でも、テスト対象のアプリケーション コードは URL で指定された Web サーバー上で実行されます。PHPUnit が Firefox に、リクエストを処理するサーバーに、リクエストを処理することで PHP が呼び出される場合は、Xdebug の下でその PHP コードを実行し、トレース出力を応答と共に送り返すように指示することはできません! PHPUnit は、指定した URL と、リクエストを処理した Web ブラウザーからの出力のみを確認します。リクエストを処理する Web サーバーが実際に実行したコードを確認する方法はありません。

したがって、前の回答で、これらのテストのコード カバレッジ レポートでは有用な情報が得られず、単体テストではより意味のあるレポートが生成されると述べられていましたが、これらのテストでコード カバレッジを測定することは不可能であると断言します。そのため、実行時にコード カバレッジ レポートを要求するべきではありません。むしろ、Selenium テストのコード カバレッジ レポートを生成し、レポートにコードの 1 行でも実行されたことが示されている場合は、セットアップに重大な問題があります。

于 2013-02-25T01:13:16.900 に答える