DataproviderとTestNG XML。 Seleniumのパラメータ化(例)
ソフトウェアを作るとき、我々は常に異なるデータのセットで異なる動作をすることを望みます。 同じソフトウェアをテストする場合、1 つのデータ セットだけでテストすることは不公平になります。 ここでもまた、私たちのシステムが、サポートすることが期待されるすべての組み合わせのセットを取っていることを確認する必要があります。 そのためには、テストシプトをパラメータ化する必要があります。 ここで、パラメータ化について説明します。
Parameterization in Selenium
Parameterization in Selenium は、実行時にアプリケーションに複数のデータを渡すために、テストスクリプトをパラメータ化する処理です。 これは、異なる値を使用してテストケースを自動的に複数回実行する実行の戦略です。 テストスクリプトをパラメータ化することで実現される概念をデータ駆動型テストと呼びます。
このチュートリアルでは、
- TestNGにおけるパラメータ化の種類-
- Testng.ParametersアノテーションとTestng.Parameterアノテーションを学習し、TestNGのパラメータ化について学びます。xml
- トラブルシューティング
- データプロバイダのパラメータ
- 異なるクラスからデータプロバイダを呼び出す
- データプロバイダのパラメータの種類
TestNGのパラメータ化の種類-
パラメータ化をより明確にするために、パラメータ化の種類を確認します。 Selenium Webdriverの最も人気のあるフレームワークの1つであるTestNGのパラメータ化オプションについて見ていきます。
TestNGでパラメータ化を実現する方法は2つあります。
-
ParametersアノテーションとTestNG XMLファイルの助けを借りています。
Testng.xml のパラメータは、スイートまたはテスト レベルです。
DataProvider のパラメータは、パラメータとして Method と ITestContext を取ることができます。
では、それらを詳しく見ていきましょう。
Parameters Annotation in TestNG
Parameters Annotation in TestNG は .xml ファイルを使ってテストメソッドに引数として値を渡すために使われる方法です。 ユーザーは、実行時にテストメソッドに値を渡すことが必要になる場合があります。 Parametersアノテーションメソッドは、@Test、@Before、@After、@Factoryのアノテーションを持つすべてのメソッドで使用することができます。
Testng.xml でのパラメータ アノテーション
入力組み合わせの数が少なく、複雑&に対処したい場合は、アノテーションを使用してパラメータ化を選択します。
それでは、どのように動作するか見てみましょう。
テストシナリオ
ステップ1)ブラウザを起動 & Google.NETにアクセスする。com
Step 2) 検索キーワードを入力します
Step 3) 入力した値がテストデータと同じか確認します
Step 4) すべての値を入力するまで2 & 3を繰り返します
テスト作成者 | 検索キー |
Guru99 | インド |
クリシュナ | USA |
Bhupesh | China |
以下はWITHOUTパラメータ
A Studyの例です。 上記の例では これを3つの入力の組み合わせに対して行うと、コードがどれだけ複雑になるか想像してみてください
さて、これをTestNGを使ってパラメータ化してみましょう
そのためには。
- パラメータを格納する XML ファイルを作成する
-
テストで、アノテーション @Parameters
以下は完全なコード
テストレベル TestNG.XML のコード (PDF) です。xml
ParameterWithTestNGXML.java ファイル
スクリプトを実行する手順、XML ファイルを選択し、Test NG Suite として実行
.NET Framework を右クリックします。xmlファイルを右クリック -> Run as -> Testng Suite (Note : Suite)
ここで、パラメータは2つのレベルで定義できます
- スイートレベル – TestNG XML ファイルの <suite> タグ内のパラメータはスイートレベルのパラメータとなります。
- テストレベル — テスト XML ファイルの <Test> タグ内のパラメータは、テストレベルのパラメータになります。
以下、同じテストにスイートレベルのパラメータを付けます。
注意:スイートレベルとテストレベルでパラメータの名前が同じ場合、テストレベルのパラメータの方がスイートレベルより優先的に使用されます。 その場合、そのテスト レベルの内側のすべてのクラスはオーバーライドされたパラメータを共有し、テスト レベルの外側の他のクラスはスイート レベルのパラメータを共有します。
トラブルシューティング
問題番号 1 testng.xml のパラメータ値は対応するテストメソッドのパラメータにタイプキャストできず、エラーをスローする。
次の例を見てください。
ここで、’author’ 属性は ‘Guru99’ で、文字列ですが、対応するテスト方法では整数を期待しているので、ここで例外を発生させることになります。
Issue # 2 @Parameters に対応する値が testing.xml にない。
この状況は、テスト メソッド内の対応するパラメーターに @optional アノテーションを追加することによって解決できます。
問題 3: Testng.xml を使用して同じパラメータの複数の値をテストしたい
簡単な答えは、これはできない! 複数の異なるパラメーターを持つことはできますが、各パラメーターは 1 つの値のみを持つことができます。 これは、スクリプトに値をハードコードするのを防ぐのに役立ちます。 これは、コードの再利用を可能にします。 スクリプトの設定ファイルのようなものだと考えてください。 もし、パラメータに複数の値を使いたい場合は、DataProviders
Data Provider in TestNG
Data Provider in TestNG は、ユーザーが複雑なパラメータを渡す必要がある場合に使用するメソッドです。 複雑なパラメータは、複雑なオブジェクト、プロパティファイルからのオブジェクト、またはデータベースからのオブジェクトのようなJavaから作成される必要があるデータプロバイダメソッドによって渡されることができます。 このメソッドには@DataProviderのアノテーションが付けられ、オブジェクトの配列が返されます。
Dataprovider を使用したパラメーター
@Parameters アノテーションは簡単ですが、複数のデータ セットでテストするには、Data Provider を使用する必要があります。
テスト用フレームワークを使用して何千もの Web フォームを埋めるには、単一の実行フローで非常に大きなデータセットを提供できる別の方法論が必要です。
このデータ駆動のコンセプトは、TestNG の @DataProvider アノテーションによって実現されます。
これは1つの属性 ‘name’ だけを持っています。 name属性を指定しない場合、DataProviderの名前は対応するメソッド名と同じになります。
データプロバイダは2次元のJAVAオブジェクトをテストメソッドに返し、テストメソッドはM*N型のオブジェクト配列でM回呼び出されます。 例えば、DataProviderが2*3のオブジェクトの配列を返す場合、対応するテストケースは、毎回3つのパラメータで2回呼び出されます。
完全な例
別のクラスから DataProvider を起動
デフォルトでは DataProvider はテストメソッドのあるクラスかその基底クラスに存在する。 他のクラスに配置するには、データ プロバイダー メソッドを静的にし、テスト メソッドに @Test アノテーションで dataProviderClass 属性を追加する必要があります。
コード例
テストクラス ParameterDataproviderWithClassLevel.java
DataproviderClass.java
Dataproviderにおけるパラメーターの種類
DataProviderが対応しているパラメーターには2種類あり、以下の3種類です。
Method- 同じDataProviderでもテスト方法が異なると動作が異なる場合、Methodパラメータを使用します。
次の例では、
- メソッド名がtestMethodAであるかどうかをチェックします。
- If yes return one set of value
- Else return another set of value
Here is the output
ITestContext- グループに基づいてテストケース用の異なるパラメータを作成するために使用されることができます。
現実には、ITestContext を使用して、テスト方法、ホスト、テストの構成に基づいてパラメータ値を変更することができます。
以下のコード例では、
- 2つのグループ A & B
- 各テストメソッドはグループに割り当てられる
- グループの値がAであれば、特定のデータセットを返す
- グループの値がBであれば、他のデータセット
注:グループには、テストメソッド、ホスト、および、テスト構成があります。 testngクラスを直接実行すると、まずdataproviderを呼び出しますが、このときグループは利用できないので、グループの情報を取得することはできません。 しかし、testng.xmlを介してこのクラスを呼び出すと、ITestContextでグループ情報を取得することができます。 以下のようなXMLでテストを呼び出してください。
同じパラメータ名が両方の場所で宣言されている場合、テスト レベルのパラメータがスイート レベルのパラメータより優先されます。