2012-05-25 4 views
5

私は何週間もブラウザテストを自動化する方法を研究しています。 Seleniumsのウェブサイトは非常に漠然としています。私は セレン、Nunit、Selenium Grid、C#、webdriver/remote controlを使った自動ブラウザテスト

  1. セレンwebdriverを
  2. リモートコントロール
  3. セレングリッド
  4. Apache Antを
  5. NUnitの (および他のほとんどすべては、あなたがこれを行うために必要とすることができる)
  6. をインストールしている

I finall自分自身で試してあきらめて、これを行う最善の方法を知りたい。

私は(私が設定している)仮想マシンの数に同じウェブページをロードする異なるブラウザ

  • の数で同じWebページをロードし

    1. にできるようにしたい
    2. うさまざまなブラウザの結果を比較するスナップショットを撮ることができます。

    私はC#のプログラミングに関する知識があり、Nunitを通してテストを実行する方が好きです。

    誰でも私に指示を与えたり、既にそれらを持っているウェブサイトを指摘できますか? ありがとうございます。

  • +0

    を参照することができます別のブラウザ上でスナップショットを取るために、このWebページを参照してください。複数の異なるブラウザに同じWebページを読み込みます。一度に意味するのですか?または順次? –

    +0

    すぐに。そのため、複数のブラウザが同じWebページを開いて開きます。 – lbrown

    +0

    MBunitに切り替えることは可能ですか?調査の結果、Nunitは並列化に最適なツールではないという結論に至りました。 –

    答えて

    8

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

    は、セレンのグリッドを使用して別のブラウザ

    の数で同じWebページをロードし、これを設定することは非常に簡単です。あなたがテストしようとしている環境でいくつかの仮想マシンをセットアップしてください。私たちの環境では、例えば、我々はIE7とFirefox

  • IE8を使用してWindowsとFirefox
  • とWindowsとの次

    • Windowsのようなセットアップで(仮想マシンなど)4つのノードで実行中のグリッドを持っていますIE9とFirefox
    • セレンは、IEのインスタンスが1つだけのWindowsノード上で実行を許可することをお勧めしますことを

    ノートとFirefoxの

  • のLinux。前述の各ノードには、指定された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); 
    

    ロード私は、ねじ付きで、unconventialな方法ではあるが、実行するテストを強制することでこれを解決し

    (私が設定している)仮想マシンの数に同じウェブページ方法。各JUnitテストは、別々のスレッドに必要なすべてのRemoteWebDriversを作成する共有スレッドライブラリを使用します。これらのスレッドのそれぞれは、そのノード上で同時に実行され、親スレッドが座って、すべてが終了するのを待ちます。次に、マルチスレッドでも実行される次のテストに進みます。

    すべての子スレッドで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の開発者も喜ぶだろうと確信しています。

  • +0

    私はあなたの仕事を他のいくつかの質問で気付きました。あなたは自動テストで非常に熟練しているようです。あなたは偶然、チュートリアルや公開されたコードを公開していますか? – lbrown

    1

    2番目の点として、グリッドを使用する代わりに、継続的なインテグレーションサーバーで作業を行えるようにすることができます。私の会社では、Jenkinsを使用し、Configuration Matrixと呼ばれています.Jenkinsの複数のノードで同じ作業を実行できます。

    第1のものについては、ジェンキンスもここでも役立つと思います。同じノード上で複数のジョブを実行できます。私はそれを試みたことはありませんが、私は完全にはわかりません。これはちょうどアイデアです、私は本当にそのようなソリューションをお勧めしません。また、Selenium Gridを使用して並行してテストを実行する方法について説明しているthis blog postを読むこともできます。 Javaを使用している人は、parallel tests with TestNGについて読むことをお勧めします。

    あなたの3番目の部分は少し曖昧です。スナップショットはどういう意味ですか?どのような結果を比較したいのですか?

    -1

    the free Telerik Testing Frameworkもお考えください。これはTelerikの市販のTest Studio製品の基礎となります。テストフレームワークは、ブラウザ間のサポートを提供し、動的コンテンツの状況(AJAX)で優れた仕事をし、ファイルアップロード/ダウンロードダイアログなどのOSレベルのダイアログも処理できます。また、ブラウザのスナップショットをいつでも取得することができます。

    好きなランナーにフレームワークをラップすることができます。私は問題なくNUnitとMbUnitを使用しました。

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

    (情報開示:私は彼らのテストスタジオエバンジェリストとしてTelerikのために働く)

    0

    Selenium RCのが古いとwebdriverをセレンのテストを作成するための、より信頼性の高い方法です。私は上記の応答をjava側でより多くのものを参照してください。言及は

    IDEは(特急VS)、NUnitのセレンは、簡単なスクリプトを作成するには How to setup C#,nUnit and selenium client drivers on VSExpress for Automated tests

    を参照してくださいどのようにセットアップで

    は、それが起動しwebdriverをC#とセレンを使用して、ここで質問を達成する方法の詳細については、下にブラウザは、いくつかの手順が異なるブラウザの数に同じウェブページをロードする方法Creating Basic Selenium web driver test case using Nunit and C#

    を参照してください How to invoke locally different types of browser driver using selenium and c#

    を参照することをお勧めしこのために、私が設定した多数の仮想マシンに同じWebページをロードするには、通常のwebdriverではなくremote webdriverを使用する必要があります。また、リモートWebドライバを使用すると、さまざまなタイプのブラウザを起動できます。 How to invoke/run different type of web driver browser using remote webdriver in C#

    あなたは `1を言うとき、あなたがリンク Capturing screen shots using remote/local webdriver in C#/Selenium webdriver

    関連する問題