web-dev-qa-db-ja.com

複数のSeleniumテストを同時に実行する

同時に複数のSelenium Tests(Jenkinsサーバーで)を実行したいと思います。

現在、ChromeDriverは特別なポートを介して通信しているように見えるため、一度に1つのテストのみを実行します。どういうわけか、複数のテストを開始するには、Seleniumを介してChromeDriverにある種のポート設定を渡す必要があると思います。

残念ながら、そのトピックのSelenium Webサイトは空です: http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#parallelizing-your-test-runs

私の観点からは、テストがローカルで実行されてもJenkinsで実行されても、問題は同じです。何らかの形でChromeDriverを構成する必要があります。問題は、その方法です。

誰もがどこを見て、これを達成するためにどのファイルが関係しているのでしょうか?

20
seba.wagner

探しているのは Selenium Grid 2 です。

グリッドでは次のことができます。

  • テストを複数のマシンに分散することにより拡張(並列実行)
  • 複数の環境を一元管理し、ブラウザ/ OSのさまざまな組み合わせに対してテストを簡単に実行できるようにします。
  • カスタムフックを実装して、たとえば仮想インフラストラクチャを活用できるようにすることで、グリッドのメンテナンス時間を最小限に抑えます。
5
Amey

Chromedriverの複数のインスタンスをローカルで非常に簡単に実行できます。複数のドライバーオブジェクトをインスタンス化するだけで、chromedriverはプロファイルを個別に保持し、それ自体で実行するポートを見つけます。

TestNGとMavenを使用して複数のテストを実行できる例へのリンク:

https://github.com/Ardesco/Selenium-Maven-Template

上記のプロジェクトのクローンを作成し、コマンドラインで次を実行します。

mvn verify -Pselenium-tests -Dbrowser=chrome -Dthreads=2

スレッドプールを管理するTestNGの機能を利用し、指定されている場合は複数のインスタンスを開きます。 jUnitでも同じことができますが、テストを個々のスレッドに実行するカスタムテストランナーを作成する必要があります。

Gradleを使用することにした場合、TestNGとjUnitの両方を使用してスレッドプールを管理することができ、多くの人がgradleをMavenに使用することを好みます。

18
Ardesco

これは古い質問ですが、まだ読んでいる人にとっては、グリッドを使用して複数のSelenium WebDriverインスタンスを並行して実行することは非常に可能ですwithout。 Chrome、FireFox、およびPhantomJs(最大5つ)を使用してこれを正常にテストしました。各WebDriverインスタンスは分離されたコンテキストを使用するため、セッションの競合は問題になりません。ただし、Webサイトの要件に応じて、サーバー側の競合に注意してください!

NUnitユーザーの場合、NUnit 3.2.1には「TestContext.Current.WorkerId」プロパティがあり、NUnitワーカーごとに1つのWebDriverインスタンスを分離できます。

  • 同じマシンで複数のブラウザーを実行するとパフォーマンスが低下することがよくあるため、あまり多くのブラウザーインスタンスを使用しないように注意してください。そうしないと、実際にテスト時間が長くなる可能性があります。
8
Null511

グリッドをMaven並列化クラスと組み合わせて使用​​することに同意します。1台のPCで複数のインスタンスを実行できます。 Jenkinsは、ビルドにAntを使用している場合に可能です。次に、並行して実行できるテストを指定できます。設定はとても簡単です;)

2
buddy