TestNG と Selenium WebDriver を使用して Web アプリケーションのテスト スイートを作成しています。
私が必要とするのは、異なる認証済みユーザーに対してテストクラスのすべてのメソッドを複数回実行することです (データは実行時に DB から引き出されます)。したがって、すべてのユーザーの資格情報を提供するデータプロバイダーを使用してクラスにデータを渡す必要があります。次に、各ユーザーに対して (実験の純度のために) Web ドライバーを作成し、@BeforeClass
メソッドで提供された資格情報で認証し、すべてを実行する必要があります。@Test
クラスのメソッドを呼び出して、 @AfterClass
Web ドライバーを閉じるティア ダウンを作成します。
どうやってやるの?
これを行う私の試みはここにあります: https://gist.github.com/4246674
Attempt1 は@Test(dataProvider="getUsersIdAndName")
on クラスを配置することでした。クラスで判明したよう@Test(dataProvider=)
に、クラスのすべてのメソッドを提供されたデータで呼び出す必要があるわけではないため、機能しません。その結果、引数に渡すデータがないため、メソッドはまったく呼び出されませんでした。そして、このメソッドが実行時間 0 秒で渡されたとマークされている奇妙なテスト レポートを取得します。(これが理にかなっていれば、これは NetBeans で開かれた Maven プロジェクトです。)
@Test(dataProvider=)
クラスに何か意味がありますか?
@Test
試行 2 は、メソッドの注釈にdataProvider を追加することでした。これは、1 つのクラスの実行中にテスト メソッドが 2 回呼び出されることを意味するため、機能しません。その結果、Web ドライバーが再初期化されていない間にテストを繰り返そうとしたため、2 回目に失敗しました。ブラウザーは既に別のページをレンダリングしています。
@BeforeClass
また、データプロバイダーからデータを提供する方法がわからないため、ログイン自体がメソッドではなくテストメソッドで行われるという1回目と2回目の試行の欠点があります。
Attempt3 は、単一の方法を組み合わせるという必死の試みでし@BeforeClass
た@Test
。注釈付きメソッドにパラメーターリストがあるかどうかも@BeforeClass
要求されるため、機能しません。@Parameters
その結果、このメソッドは 3 回呼び出されます。1 回目はクラス セットアップとして上記の理由で失敗し、2 回目はデータ プロバイダーが原因で成功します。
次に、TestNG がすべてのクラス メソッドを異なるデータで複数回呼び出す方法を提供していないことがわかりました: http://comments.gmane.org/gmane.comp.java.testng.user/864
同じ効果をアーカイブする方法について、他に 2 つのアイデアがあります。
アイデア 4 は、@Test(dataProvider=)
各テスト メソッドに を配置することです。各メソッドは、認証とisAuthenticated()
テストを単独で実行してから、独自のテストを実行します。効果がなく醜い。
最も手頃な方法のように見える Idea5 は、@Test
他のすべてのテスト方法を集約する唯一の方法でマークすることです。データ プロバイダーからデータを受け取り、指定されたユーザーによる認証を実行し、次に isAuthenticated テストとその他すべての必要なテストを実行します。この場合@BeforeClass
、 と@AfterClass
は Web ドライバーのセットアップと破棄のみを行っています。このアプローチには、私が使用する能力を失っているという欠点が@BeforeMethod
あります@AfterMethod
が、これは私にとって手頃な価格です: 私はそれらを必要としないようです.
同じ効果をアーカイブするより良い方法はありますか?
長文すみません。
前もって感謝します。