5

PHPUnit 拡張機能を使用してテスト ケースを作成しましたSelenium2TestCase。うまく機能しますが、さまざまなブラウザーでこのテストを自動的に実行する方法がわかりません。

メソッドsetBrowser()でしか動作しないメソッドがありsetUp()ます。私は次のようなことを考えました:

/**
 * @dataProvider browsers
 */
public function loginTest($browser) {
    $this->setBrowser($browser);
    // tests...
}

しかし、私は働きません。デフォルトのブラウザを実行してみてください(おそらくSafariに少し混乱があり、前回はfirefoxを使用しています)

RuntimeException: Safari could not be found in the path!
Please add the directory containing ''Safari'' to your PATH environment
variable, or explicitly specify a path to Safari like this:
*safari /blah/blah/Safari

PS。SeleniumTestCase(webdriver に基づくものではありません) は、ブラウザーを指定できる xml 構成を提供します。Selenium2TestCaseサポートしていません。

どんな提案でも大歓迎です。ありがとう。マルシン

4

4 に答える 4

4

このようなもの

    class WebTestCase extends \application\components\test\ExWebTestCase
    {
      // default params
      public $parameters = array(
          'host'                          => 'localhost',
          'port'                          => 4444,
          'seleniumServerRequestsTimeout' => 30000,
          'timeout'                       => 30000,
      );

      // list of browsers with per-browserconfig
      public static $browsers = array(
          array(
              'browserName' => 'firefox',
          ),
          array(
              'browserName' => 'chrome',
          ),
          array(
              'browserName' => 'safari',
          ),
          array(
              'browserName' => 'internet explorer',
              'host' => 'some IP of VirtualBox with IE'
          )
      );
  }
于 2012-12-18T16:25:42.860 に答える
2

これに対する修正は、データ ファイルがどのように見えるかによって異なります。投稿していただければ、さらにお役に立てます。

当分の間、phpunit は本質的に一度に 1 つのユニット テスト フレームワークであるため、複数のブラウザーを同時に実行しようとしているのではなく、必要に応じてブラウザーを変更するオプションを予約したいだけだと思います。 .

setUp で setBrowser を使用する必要があるのは正しいです。実行されると、PHPUnit は常に setUp を最初に実行し、tearDown() を最後に実行します。ここでの良い方法は、これらのメソッドをカスタマイズできる独自のカスタム ユニット テスト ケース クラスを作成することです。

class customUnitTest extends PHPUnit_Extensions_Selenium2TestCase {
   public $browser = "firefox";
   public function setUp() {
      $this->setBrowser("*".$browser);
   }
}

テストを書いているときは、個人のテスト クラスを拡張し、それに応じてブラウザを設定します。

class newTest extends customUnitTest {
   $this->browser = "safari";
   public function testBlah {
      blah blah...
   }
}

setUp は実行時に実行され、ブラウザ変数を取り込みます。デフォルトでは firefox を取得しますが、一部のテストが他のブラウザーでより適切にテストされている場合は、そのオプションがあります。

すべてのテストですべてのブラウザを同時に変更できるようにしたい場合は、環境変数に基づいてブラウザの値を割り当てることを検討する必要があります。

class customUnitTest extends PHPUnit_Extensions_Selenium2TestCase {
   try {
      public $browser = getenv("SELENIUM_BROWSER");
   } catch (Exception $e) {
      public $browser = "firefox";
   }
   public function setUp() {
      $this->setBrowser("*".$browser);
   }
}

このセットアップでは、環境変数 SELENIUM_BROWSER を変更することで、ブラウザーをハードコーディングしていないすべてのテストのブラウザーを変更できます。このようにして、何も書き直すことなく、異なる既定のブラウザーを使用して異なるサーバーで同じコードを実行できます。

多重継承は適切な方法ではないことに注意してください。メソッド/変数のスコープを正しく設定しないと、脆弱なコードやセキュリティ上の脅威につながる可能性があります。ただし、この場合、PHPUnit フレームワーク メソッドを好きなように定義でき、テスト内ですべての基本的な Selenium メソッドを取得できるので便利です。したがって、デフォルトのセレンメソッドを実行するには、次のように記述します

$this->open("www.google.com");

これは、作成するテストがセレン オブジェクトであるため、セレンをオブジェクトに割り当てる一般的なアプローチとは大きく異なる方法ですが、特にこのユース ケースでは、php の方が適しているようです。

于 2012-10-25T16:28:06.303 に答える
2

複数のブラウザーで実行するには、次のリンクを確認してください。

http://phpunit.de/manual/current/en/selenium.html 例 17.4(phpunit 3.7) localhost でテストケースを実行している場合は、'host ' =>'localhost' を使用します。setBrowser() 関数は必要ありません..

于 2013-06-21T08:29:01.323 に答える