2017-04-18 13 views
1

WebDriverの設定を同時テスト実行のために静的にする必要がありますか?WebDriverの設定を同時テスト実行のために静的にする必要がありますか?

    私の場合は、次の作業と私は複数のテストケースを実行することができますがなど
  1. 開発者は、ドライバ(複数可)の静的インスタンスを使用しているBasePageクラスセットアップなどの多くの例使用してリストを見

  2. オンラインイム同時に:

    public class BrowserFactory implements ISuiteListener { 
    protected WebDriver webdriver; 
    

    }

あなたの考えは?

+0

静的である必要はありません。セレンコード – kushal

+0

のすべてにドライバインスタンスを使用できるようにする方法に基づいています。実装ははっきりと動作します。あなたはそれに問題があると思いますか?あなたのアプローチを変更するような点はありません。あなたは1つのドライバをウィンドウ間で切り替えることができますが、問題のように思えます。 –

+0

@Mark LapierreこのアプローチはWebdriverとPageObjectModelアプローチを使用すると機能しますが、現在はCucumberを使用するフレームワークを開発する必要があります。私のDriverFactoryクラスの中で、TestNGを使用してBeforeClassなどを呼び出すなど、CucmberとJUnitライブラリを使用するときに問題が発生することはありません。 – Gbru

答えて

2

これはテストの範囲によって異なります。 CucumberやJBehaveのようなGherkinベースのシステムを使用している場合、テストは一般的にはストーリー内のシナリオを伴うステップです。複数のシナリオや複数のストーリーがある場合は、一度(静的)にドライバを設定し、そのインスタンスを他のシナリオやストーリーに渡す方が簡単な場合があります。一方、毎回新しいドライバが必要な場合は、ドライバを静的に定義しないでください。これは、各シナリオでドライバのインスタンス化に必要な手順が必要であることを意味します。ユーザーは、など、最後にドライバを閉じることができます。これは、より明らかに自己完結型のシナリオを可能にしますが、スタティックドライバでも、ドライバがインスタンス化されているかどうか(またはユーザがログインしている)を確認してから、それは新鮮なスタートです。

完全に自己完結型のテストをお持ちの場合は、ドライバの動的(非静的)宣言を使用してください。ドライバで実行されるすべての場合は、初期化して閉じる必要があるためです。あなたのスイートに他のテストが含まれていて、同じドライバを使用することで恩恵を受ける場合は、そのように設計してください。 JBehaveでは、テストランナーでドライバを初期化するので、1つのテスト、1つのストーリー、または複数のストーリーを、最も迅速かつ効率的な方法で実行するかどうかは問題ありません。

私はこれを明確に説明してくれることを願っています。

+0

本当にありがとうございます。私はドライバクラスを作成し、順番にこのクラス内のドライバを初期化しました(非静的な)ページオブジェクトモデルのアプローチ/フレームワーク(Dosnt use Cucumber)を構築しました。 )、すべてのテストがdriverfactoryクラスを継承し、これによって同時に複数のテストを実行できるようになりました。私の唯一の問題は、このアプリケーションローチはTestNgを使い、キュウリはJUnitにもっと適していることを知っています。助けてくれてありがとう。 – Gbru

+0

キュウリをtestngでかなり簡単に使うことができます。 http://stackoverflow.com/questions/31285778/how-to-integrate-the-cucumber-in-testng – Grasshopper

1

static変数がクラス変数であることは既に知っているかもしれません。 WebDriverを静的にすると、そのインスタンスはパラレルスレッド間で共有されます。競合状態の問題に直面します。

これは、スレッドの安全性が重要なところです。あなたがそれを達成する方法はいくつかあります:

  • ThreadLocalコンテナを使用しています。
  • などの並行環境用に設計された特殊な構造の1つを使用します。 ConcurrentHashMap。人々はWebDriverが静的​​にする理由について

いくつかのポイント: "権威" のソースから

  • ブラインドコピー/貼り付け;
  • ドライバをドメイン層から除外します。
  • アーキテクチャ設計。

私の経験から、静的でない操作は、フレームワーク外に明示的に公開することなく純粋な継承を使用して行うことは不可能です。

+0

ありがとう – Gbru

関連する問題