5

私は何週間もの間、あらゆる種類の異なる方法を使用してブラウザのテストを自動化する方法を研究してきました。SeleniumsのWebサイトは非常にあいまいで、どちらが最適なルートであるかを示しています。

インストールしました

  1. Selenium Webdriver
  2. リモコン
  3. Seleniumグリッド
  4. Apache Ant
  5. Nunit(そしてこれを行うために必要な他のほとんどすべて)

私はついに自分で試みることをあきらめ、これを行うための最良の方法を知りたいと思います。

できるようになりたい

  1. 同じウェブページを複数の異なるブラウザにロードする
  2. 同じWebページをいくつかの仮想マシン(私がセットアップしたもの)にロードします
  3. さまざまなブラウザの結果を比較するスナップショットを撮ることができます。

私はC#でのプログラミングの知識があり、Nunitを介してテストを実行したいと考えています。

誰かが私に道順を教えたり、すでにそれらを持っているウェブサイトに私を向けることができますか?ありがとうございました。

4

4 に答える 4

8

junit と Selenium WebDriver を使用して、すべてのポイントを満たすテスト フレームワークを構築しました。それはまさにあなたが求めているものではありませんが、私はそれがあなたにとって有益であると感じています.

多数の異なるブラウザで同じ Web ページを読み込む

Selenium のグリッドを使用すると、セットアップが非常に簡単になります。テストする環境でいくつかの仮想マシンをセットアップします。たとえば、私たちの環境では、次のようなセットアップで 4 つのノード (仮想マシンとして) で実行されているグリッドがあります。

  • Windows と IE7 および FireFox
  • Windows と IE8 および FireFox
  • Windows と IE9 および Firefox
  • Linux と FireFox

Selenium では、Windows ノードで実行できる IE のインスタンスは 1 つだけにすることをお勧めします。前述の各ノードには、指定された IE のインスタンスが 1 つと、指定された FF のインスタンスが 5 つあり、いつでも実行できます。グリッドのセットアップとハブの構成が完了したら、テストを開始するのは簡単です。WebDriver では、DesiredCapabilitiesオブジェクトを使用して目的の環境をセットアップし、テストを送信して結果が返されるのを待ちます。

Platform desiredPlatform;
DesiredCapabilities desiredCapabilities;
desiredPlatform = Platform.LINUX;
desiredCapabilities = DesiredCapabilities.firefox();
desiredCapabilities.setPlatform(desiredPlatform);
desiredCapabilities.setVersion("11");

WebDriver driver = new RemoteWebDriver("http://hubURL", desiredCapabilities);

多数の仮想マシン (セットアップ済み) に同じ Web ページをロードします。

私はこれを、型にはまらない方法ではありますが、スレッド化された方法でテストを強制的に実行することで解決しました。各 JUnit テストでは、私がまとめた共有スレッド ライブラリを使用して、個別のスレッドで必要なすべての RemoteWebDriver を作成します。これらの各スレッドは、そのノード上で同時に実行されますが、親スレッドは座ってすべてが終了するのを待ちます。次に、同様にマルチスレッドで実行される次のテストに進みます。

すべての子スレッドで Junit スタック トレースを取得するなど、いくつかの問題が発生しました。Std.err親スレッドのバイトストリームにリダイレクトすることでこれを解決しました。すべてのエラーはそのストリームにルーティングされ、それを文字列に変換して、Std.out各テストの最後に出力します。テストの最後に生成された html ページには、Std.out完全に機能したものが含まれています。

さまざまなブラウザーの結果を比較するスナップショットを作成できる

私はこれを機能させましたが、スクリーンショットをリモートで取得することには固有の問題がいくつかあります。プロセスがサービスとして実行されている場合、IE は黒いスクリーンショットを返します。回避策は、コマンド ラインから jar を実行し、ユーザーがログインしたままにすることでした。この場合、スクリーンショットは正しく返されます。これはブラウザの既知の問題であり、この問題に対する適切な解決策はありません。スクリーンショットの撮影は大まかに次のように行われます

WebDriver augmentedDriver = new Augmenter().augment(driver);
TakesScreenshot ss = (TakesScreenshot) augmentedDriver;
String base64Screenshot = ss.getScreenshotAs(OutputType.BASE64);
byte[] decodedScreenshot = Base64.decodeBase64(base64Screenshot.getBytes());
FileOutputStream fos = new FileOutputStream(new File(imageName));
fos.write(decodedScreenshot);
fos.close();

これにより、キャプチャされたスクリーンショットがリモート マシンの実行中のブラウザからローカル マシンに保存されます。

現実には、ブラウザの自動化は依然として安定化に苦労しています。あなたが尋ねているものなど、多くの重要な機能がありますが、どのフレームワークでもしっかりと実装されていません。しかし、時間が経てば、この問題の多くが落ち着き、世界中の QA 開発者が喜んでくれると確信しています。

于 2012-05-25T20:02:43.230 に答える
1

2 番目のポイントについては、Grid を使用する代わりに、継続的インテグレーション サーバーに仕事を任せることができます。私の会社では、Jenkins と呼ばれる Configuration Matrix を使用しています。これにより、複数の Jenkins ノードで同じジョブを実行できます。

最初のものに関しては、ここでも Jenkins が役立つと思います。同じノードで複数のジョブを実行できます。私はそれを試したことがないので、完全にはわかりません。これは単なるアイデアであり、そのようなソリューションはお勧めしません。また、Selenium Grid を使用してテストを並行して実行する方法について説明しているこのブログ投稿もお読みください。Java を使用している人には、 TestNG を使用した並列テストについて読むことをお勧めします。

あなたの3番目のポイントは少しあいまいです。スナップショットとはどういう意味ですか? そして、どのような結果を比較したいですか?

于 2012-05-25T19:20:05.700 に答える
-1

無料の Telerik Testing Frameworkも検討してください。これは、Telerik の商用 Test Studio 製品の基盤です。テスト フレームワークは、クロス ブラウザー サポートを提供し、動的なコンテンツの状況 (AJAX) で優れた機能を発揮し、ファイルのアップロード/ダウンロード ダイアログなどの OS レベルのダイアログを処理することもできます。また、いつでもブラウザのスナップショットを作成できます。

好みのランナーでフレームワークをラップできます。問題なく NUnit と MbUnit を使用しました。

自動化に関するサポートが必要な場合は、サポート パッケージのオプションもあります。

(開示: 私は Telerik のテスト スタジオ エバンジェリストとして働いています)

于 2012-05-26T12:59:58.403 に答える