Selenium WebDriver:テストケース管理とレポート生成のためのTestNG



このSeleniumWebDriverチュートリアルは、テストケースを管理し、詳細なテストレポートを生成するためにSeleniumでTestNGを使用する必要性を理解するのに役立ちます。

前回のブログでは、最初のSeleniumWebDriverテストを実行する方法を説明しました。このブログでは、SeleniumWebDriverの高度な概念について説明します。 Selenium WebDriverには、テストケースの管理とテストレポートの生成に関して制限があることをすでに何度も述べました。それで、代替手段は何ですか? Seleniumと同じくらい人気のあるツールには、間違いなく回避策が必要ですか?もちろんそうです! SeleniumとTestNGを組み合わせて使用​​することで、この制限を克服できます。これが、このブログのディスカッションのトピックになります。

Javaプログラムをコンパイルするにはどうすればよいですか

Seleniumを初めて使用し、基本的な概念を紹介したい場合は、ここから旅を始めることができます。 ?ただし、他の人はこのブログからSelenium用のTestNGを開始できます。また、組織が積極的に専門家を探していることを知っておく必要があります 、ソフトウェアテスターが習得することは重要なスキルになります。





世界中のソフトウェア開発者は、テストケースでコードを書くことでデバッグ時間のかなりの部分を節約できることに満場一致で同意するでしょう。どうして?これは、テストケースが堅牢でエラーのないコードの作成に役立つためです。それはどのようにそれをしますか?コード全体をより小さなテストケースに分割し、これらの各テストケースを評価して合格/不合格の条件を設定することで、エラーのないコードを作成できます。 Seleniumはテストケースでのコードの実行をサポートしていないため、同じようにTestNGを使用する必要があります。これは、TestNGがSeleniumフレームワークに適合する場所です。

TestNG を意味する 次世代のテスト これは、JUnitとNUnitに触発されたオープンソースのテスト自動化フレームワークです。そうですね、インスピレーションを得ただけでなく、これら2つのフレームワークへのアップグレードです。だからあなたはここでアップグレードは何ですか?TestNGを使用したアップグレードでは、テストアノテーション、グループ化、優先順位付け、パラメーター化、および以前は不可能だったコード内のシーケンス手法などの追加機能が提供されます。



TestNGを使用すると、テストケースの管理に加えて、テストの詳細なレポートも取得できます。失敗したテストケース、その一部であったグループ、およびそれが属するクラスを表示する要約が表示されます。このようにバグを正確に特定できれば、開発者の安心のためにすぐに修正できます。以下の画像は、TestNGの動作を示しています。

testng-セレンウェブドライバー

では、TestNGはどのように仕事を成し遂げるのでしょうか?この質問はで答えられますこのSeleniumWebDriverチュートリアルブログの次のセクションでは、TestNGを使用してさまざまなテストケースを管理する方法について説明します。



TestNGを使用したSeleniumWebDriver

テストケースは、次のいずれかの方法で定義および管理できます。

  1. テストアノテーション
  2. 優先順位付け
  3. テストケースの無効化
  4. メソッドの依存関係
  5. グループ化
  6. アサーション
  7. レポートの生成

説明を始めましょうこれらの各機能。

テストアノテーション

まず、この質問を自問してみましょう。なぜアノテーションを使用する必要があるのでしょうか。いつ使用できますか? Seleniumのアノテーションは、次に実行されるメソッドを制御するために使用されます。テストアノテーションは、テストコードのすべてのメソッドの前に定義されます。メソッドの前にアノテーションが付いていない場合、そのメソッドは無視され、テストコードの一部として実行されません。それらを定義するには、メソッドに「」という注釈を付ける必要があります。 @テスト ‘。たとえば、以下のコードスニペットを見てください。

パッケージtestngimport org.openqa.selenium.WebDriver import org.openqa.selenium.firefox.FirefoxDriver import org.testng.annotations.AfterClass import org.testng.annotations.AfterMethod import org.testng.annotations.BeforeClass import org.testng.annotations .BeforeMethod import org.testng.annotations.Test public class TestAnnotations {@Test public void myTestMethod(){System.out.println( 'Inside method:-myTestMethod')WebDriver driver = new FirefoxDriver()driver.get( 'http: //www.seleniumframework.com/Practiceform/')String title = driver.getTitle()System.out.println(title)driver.quit()} @BeforeMethod public void beforeMethod(){System.out.println( 'Thisコードの一部はメソッドの前に実行されます:-myTestMethod ')System.setProperty(' webdriver.gecko.driver '、' C:UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe ')} @AfterMethod public void afterMethod(){System.out.println('この部分コードのはメソッドの後に実行されます:-myTestMethod ')} @BeforeClass public void beforeClass(){Syste m.out.println( 'このコードはクラスが実行される前に実行されます')} @AfterClass public void afterClass(){System.out.println( 'このコードはクラスが実行された後に実行されます')} }

上記のコードでは、「メイン」メソッドを定義していないことに気付いたでしょう。ただし、他に5つのメソッドが定義されています。それらは、「myTestMethod」、「beforeMethod」、「afterMethod」、「beforeClass」、および「afterClass」です。また、メソッドは同じ順序で実行されないため、コード内のメソッドの定義の順序に注意してください。

メソッド「myTestMethod」には注釈が付けられています @テスト 、そしてそれは実行されなければならない主要なメソッドまたはコードの一部です。他の注釈付きメソッドは、このメソッドが実行される前後に実行されます。 「beforeMethod」には注釈が付けられているため @BeforeMethod 、「myTestMethod」が実行される前に実行されます。同様に、「afterMethod」には注釈が付けられます @AfterMethod 、したがって、「myTestMethod」の後に実行されます。

ただし、「beforeClass」には注釈が付けられています @BeforeClass 、つまり、クラス自体が実行される前でも実行されます。ここでのクラス名は TestAnnotations 、したがって、クラスの実行が開始される前に、「beforeClass」内のコードが実行されます。同様に、「afterClass」には注釈が付けられます @AfterMethod 、したがって、クラスの後に実行されます TestAnnotations 実行されます。

それでも実行の順序に関して混乱がある場合は、以下のスニペットが間違いなく役立ちます。

1. BeforeSuite 2. BeforeTest 3. BeforeClass 4. BeforeMethod5。テスト6.AfterMethod 7. AfterClass 8. AfterTest 9. AfterSuite

上記のコードの出力は次のようになります。

このコードはクラスが実行される前に実行されますこのコードはメソッドの前に実行されます:-myTestMethod Insideメソッド:-myTestMethod 1493192682118 geckodriver INFO 127.0.0.1:13676でリッスン1493192682713 mozprofile :: profile INFOプロファイルパスC:UsersVardhanAppDataLocalTempust_mozprofileを使用.wGkcwvwXkl2y 1493192682729 geckodriver :: marionette INFOブラウザC:Program Files(x86)Mozilla Firefoxirefox.exe 1493192682729 geckodriver :: marionette INFO localhost:59792 [GPU 6152]でMarionetteに接続しています警告:パイプエラー:109:ファイルc:/ builds /moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc、行3461493192688316マリオネット情報ポート59792でリッスン2017年4月26日1:14:49 PMorg。 openqa.selenium.remote.ProtocolHandshake createSession情報:検出された方言:W3C JavaScriptエラー:http://t.dtscout.com/i/?l = http%3A%2F%2Fwww.seleniumframework.com%2FPracticeform%2F&j =、line 1:TypeError:document.getElementsByTagNa me(...)[0]は未定義のSeleniumフレームワークです| Practiceform 1493192695134 MarionetteINFO新しい接続は受け入れられなくなります2017年4月26日午後1時14分57秒org.openqa.selenium.os.UnixProcessdestroy重大:PID 6724でプロセスを強制終了できませんこのコードはメソッドの後に実行されます:- myTestMethodこのコードは、クラスが実行された後に実行されますPASSED:myTestMethod =================================== ============デフォルトのテスト実行:1、失敗:0、スキップ:0 ======================== ======================= =========================== ====================デフォルトスイート合計テスト実行:1、失敗:0、スキップ:0 =============== ================================

上記の出力からわかるように、実行されたテストの数は1で、失敗したテストの数は0です。これは、コードが成功したことを意味します。メソッドの実行順序も同じになります先に述べた。

マシンでこのコードを実行すると、Selenium WebDriverはFirefoxブラウザーをインスタンス化し、Selenium Frameworkの練習フォームに移動し、ブラウザーインスタンスを閉じて、EclipseIDEに上記と同じ出力を表示します。

コードで使用したアノテーションは5つだけです。ただし、次に実行するメソッドを制御するために使用できるアノテーションは他にもたくさんあります。注釈の全リストは、テーブル未満:

@BeforeSuite –注釈付きのメソッド @BeforeSuite スイート内のすべてのテストが実行される前に実行されます。

@AfterSuite –注釈付きのメソッド @AfterSuite スイート内のすべてのテストが実行された後に実行されます。

@BeforeTest –注釈付きのメソッド @BeforeTest クラスに属するテストメソッドが実行される前に実行されます。

@AfterTest –注釈付きのメソッド @AfterTest クラスに属するすべてのテストメソッドが実行された後に実行されます。

@BeforeGroup –注釈付きのメソッド @BeforeGroup 各グループが実行される前に実行されます。

@AfterGroup –注釈付きのメソッド @AfterGroup すべてのグループが実行された後に実行されます。

@BeforeClass –注釈付きのメソッド @BeforeClass 現在のクラスの最初のテストメソッドが呼び出される前に1回実行されます。

@放課後 –注釈付きのメソッド @放課後 現在のクラスのすべてのテストメソッドが実行された後、1回実行されます。

@BeforeMethod –注釈付きのメソッド @BeforeMethod クラス内のテストメソッドが実行される前に実行されます。

@AfterMethod –注釈付きのメソッド @AfterMethod クラス内のすべてのテストメソッドが実行された後に実行されます。

@テスト –注釈付きのメソッド @テスト プログラム全体の主要なテスト方法です。他の注釈付きメソッドは、このメソッドの周囲で実行されます。

TestNGレポートのスクリーンショットは以下に存在:-

DevOpsのPuppetとは

優先順位付け

実行されるように定義できるさまざまなメソッドについて説明しました。 @テスト 方法。しかし、複数ある場合はどうなりますか @テスト メソッドとあなたはそれらの間の実行順序を定義したいですか?

その場合、P注釈付きのテストケースに番号を割り当てて、それらを暴動させます。数値が小さいほど、優先度が高くなります。テストケースを定義する際に、優先度をパラメーターとして割り当てることができます。ただし、優先順位が割り当てられていない場合は、注釈付きのテストメソッドがテストのアルファベット順に実行されます。以下の部分のテストアノテーションのパラメータを見てください。コード。

@Test(Priority = 2)public static void FirstTest(){system.out.println( 'これは優先度#2のため、テストケース番号2です')} @Test(Priority = 1)public static void SecondTest(){ system.out.println( '優先度#1のため、これはテストケース番号1です')} @Test public static void FinalTest(){system.out.println( '優先度がないため、これは最終テストケースです' )}

テストケースの無効化

もっと面白いものをお見せしましょう。数百のテストケースで構成される100万行にまたがるコードがあり、1つのテストメソッドのみを無効にしたい場合はどうなりますか?コードのどの部分も削除する必要はありません。代わりに、そのテストメソッドを無効にするだけです。

テストケースを無効にする行為も、パラメーターを介して行われます。設定できます 有効 「false」への属性。デフォルトでは、すべてのテストケースが有効になっているため、テストを作成するたびにテストケースを定義する必要はありません。以下の3番目と4番目のメソッドのパラメータを見てください。コード。

@Test(Priority = 2、enabled = True)public static void FirstTest(){system.out.println( 'これは優先度#2のためのテストケース番号2です')} @Test(Priority = 1、enabled = True )public static void SecondTest(){system.out.println( 'これは優先度#1のためのテストケース番号1です')} @Test(enabled = false)public static void SkippedTest(){system.out.println( 'これは無効になっているため、スキップされたテストケースです')} @Test(enabled = True)public static void FinalTest(){system.out.println( 'これは有効で優先度のない最終テストケースです')}

メソッドの依存関係

これで、条件を満たしている場合、または特定のメソッドが正常に実行された場合にのみコードを実行する必要がある場合は、次を使用して実行できます。 dependsOnMethod()。 これは基本的に、別のメソッドに依存してメソッドが実行されるメソッド依存の条件です。追加で設定した場合 alwaysRun 属性がtrueの場合、依存するメソッドの失敗/合格条件に関係なく、メソッドが実行されます。以下のコードスニペットのコードを見てください。

@Test public static void FirstTest(){system.out.println( 'これは実行される最初のテストケースです')} @Test(dependsOnMethods = {'FirstTest'})public static void SecondTest(){system.out。 println( 'これは実行される2番目のテストケースですこれは依存メソッドです')} @Test(dependsOnMethods = {'SecondTest'})public static void FinalTest(){system.out.println( 'これは最終テストですケースとにかく実行されます。 ')}

さて、これは私たちをテストの別の重要な側面に連れて行きますである注釈 グループ化

グループ化

ここまでで、コード内のテストケースの一部としていくつかのメソッドがあることを知っておく必要があります。 100個のテストケースがあるとしましょう。ただし、次のテストでは20個のテストケースのみを実行します。あなたは私たちがそれをすることができると思いますか?もちろんできるよ。

使用できます グループ この目的のための属性。いくつかのテストケースにグループ名を割り当て、後でコード全体ではなくグループを実行することを選択できます。以下のコードスニペットを見て理解してくださいグループを作成する方法。

@Test(groups = {'MyGroup'})public static void FirstTest(){system.out.println( 'これはグループの一部です:MyGroup')} @Test(groups = {'MyGroup'})public static void SecondTest(){system.out.println( 'これもグループの一部です:MyGroup')} @Test public static void ThirdTest(){system.out.println( 'しかし、これはグループの一部ではありませんグループ:MyGroup ')}

TestNGアサーション

これで、TestNGの次のトピックであるアサーションに移動します。名前が示すように、アサーションをテストメソッドで使用して、テストの合格/不合格条件を判別できます。ステートメントの真/偽の条件に基づいて、テストは合格/不合格になります。

以下のコードには、3つのテストメソッドが含まれています。最初と3番目のメソッドには合格条件があり、2番目のメソッドには失敗条件があります。自分でコードを参照してください。

パッケージtestngimport org.testng.annotations.Test import org.testng.annotations.BeforeMethod import org.openqa.selenium.WebDriver import org.openqa.selenium.firefox.FirefoxDriver import org.testng.Assert import org.testng.annotations.AfterMethod public class Assertions {@BeforeMethod public void beforeMethod(){System.setProperty( 'webdriver.gecko.driver'、 'C​​:UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe')} public boolean isEqual(int a、int b){if(a == b ){return true} else {return false}} @Test public void testEquality1(){Assert.assertEquals(true、isEqual(10、10))System.out.println( 'これは合格条件です')} @Test public void testEquality2(){Assert.assertEquals(true、isEqual(10、11))System.out.println( 'これは失敗条件です')} @Test public void getTitle(){WebDriverドライバー=新しいFirefoxDriver()ドライバー。 get( 'https://www.gmail.com')String title = driver.getTitle()Assert.assertEquals(title、 'Gmail')System.out.println( 'これも合格条件です')} }

この実行後に生成されるレポートを見ると、3つのテストのうち、1つが失敗し、2つが合格したことがわかります。注意すべきもう1つの重要な点は、アサーションが失敗すると、そのテストの他のコマンド/コード行がスキップされることです。アサーションが成功した場合にのみ、そのテストで次のコード行が実行されます。以下の出力を確認してください。 system.out.println 1番目と3番目のメソッドに対してのみ実行されました。

1493277977348 geckodriver INFO 127.0.0.1:47035でリッスン1493277977993mozprofile :: profile INFOプロファイルパスを使用C:UsersVardhanAppDataLocalTemp ust_mozprofile.Z7X9uFdKODvi 1493277977994 geckodriver :: marionette INFOブラウザーの起動C:プログラムファイル(x86)Mozilla Firefoxire localhost:50758 [GPU 6920]でMarionetteに接続しています警告:パイプエラー:109:ファイルc:/ builds / moz2_slave / m-rel-w32-00000000000000000000 / build / src / ipc / chromium / src / chrome / common / ipc_channel_win。 cc、行3461493277981742マリオネット情報ポート50758でリッスン2017年4月27日12:56:22 PM org.openqa.selenium.remote.ProtocolHandshake createSession情報:検出された方言:W3Cこれも合格条件です合格:合格条件です。 getTitle合格:testEquality1失敗:testEquality2 java.lang.AssertionError:[false]が必要ですが、org.testng.Assert.fail(Assert.java:93)のorg.testng.Assert.failNotEquals(Assert.java: 512)org.testng.Assert.assertEでqualsImpl(Assert.java:134)at org.testng.Assert.assertEquals(Assert.java:115)at org.testng.Assert.assertEquals(Assert.java:304)at org.testng.Assert.assertEquals(Assert.java :314)at testng.Assertions.testEquality2(Assertions.java:38)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknownソース)at java.lang.reflect.Method.invoke(Unknown Source)at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108)at org.testng.internal.Invoker.invokeMethod(Invoker.java:661) org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869)at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193)at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126 )org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)at org.testng.TestRunner.privateRun(TestRunner.java:744)at org.testng.TestRu nner.run(TestRunner.java:602)at org.testng.SuiteRunner.runTest(SuiteRunner.java:380)at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375)at org.testng.SuiteRunner.privateRun(SuiteRunner .java:340)at org.testng.SuiteRunner.run(SuiteRunner.java:289)at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) org.testng.TestNG.runSuitesSequentially(TestNG.java:1301)at org.testng.TestNG.runSuitesLocally(TestNG.java:1226)at org.testng.TestNG.runSuites(TestNG.java:1144)atorg.testng。 TestNG.run(TestNG.java:1115)at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230)at org.testng.remote .RemoteTestNG.main(RemoteTestNG.java:76)======================================= ========デフォルトのテスト実行テスト:3、失敗:1、スキップ:0 ============================ =================== =============================== ================デフォルトスイート合計テスト実行:3、失敗:1、スキップ:0 =================================== ============

これで、テストケース管理に関連する概念は終わりです。もう1つのトピックが残っています。それは、レポートの生成です。レポートの生成は、このSelenium WebDriverチュートリアルの最後のトピックです。これは、レポートを生成できるのは、テストが実行されます。

文字列からjavautildateへ

レポートの生成

注意する必要がある最も重要なことは、レポートは.xmlファイルを介してのみ生成されるということです。つまり、メソッドであれ、クラスであれ、テストしたいグループであれ、それらはすべて.xmlファイルで指定する必要があります。

したがって、最初にプロジェクトの下に新しいフォルダーを作成し、そのフォルダー内に新しいファイルを作成し、ファイルに名前を付けて、.xml拡張子を付けて保存できます。パッケージエクスプローラーを右クリックすると、新しいフォルダーとファイルを作成できます。ファイルを作成したら、ウィンドウの下部から[ソース]タブに移動し、以下のスニペットで指定されている構成を入力します。

 

最初の行はXML文書型定義です。これは標準であり、すべてのテストレポートで必須です。しかし、他の行はかなり自明です。スイート、テスト、クラス、クラスにオープンタグを使用しました。 Classesタグには、1つ以上のクラスを含めることができます。したがって、複数のクラスをテストしているレポートを生成する場合に使用できます。これは、長いコードをテストしたい開発者にとって特に便利です。

とにかくレポートに戻ると、これらのタグを開いた後、各スイート、テスト、またはクラスに名前を付け、開いたすべてのタグを閉じることを忘れないでください。私は自分のスイート名を次のように付けました TestNG 、テスト名として テスト 注釈 およびクラス名として testng.TestAnnotations。 クラス名は次の形式であることに注意してください。 ' packagename.classname ’

このファイルをTestNGスイートとして実行すると、実行が開始され、詳細なテストレポートが表示されます。コンソールタブにテスト出力が表示され、次のタブにテストスイートの結果が表示されます。コードを実行するために生成したレポートは次のとおりです。以下のスクリーンショット。今回は、スイート名、テスト名、クラス名、およびそれぞれの実行にかかった時間があります。

HTMLレポート(インデックスレポートまたはEmailable-report)を表示する場合は、 テスト出力 ワークスペースのプロジェクトディレクトリ内のフォルダ。それらをクリックすることで、後ででもレポートを表示できます。以下は彼らのスクリーンショットです。

インデックスレポート :-

電子メールで送信可能なレポート :-

これで、このSeleniumWebDriverチュートリアルブログは終わりです。最後にEclipseをセットアップし、さまざまなSeleniumパッケージをインストールし、TestNGをインストールして、テストケースの作成を開始します。

以下のSeleniumWebDriverチュートリアルビデオをチェックして、このブログで説明されているさまざまな概念のデモンストレーションを見ることができます。

セレントレーニング| SeleniumのTestNGフレームワーク|エドゥレカ

このEdurekaSeleniumトレーニングビデオでは、SeleniumWebDriverの詳細について説明します。このSeleniumチュートリアルビデオは、WebDriverコマンドの基本をブラッシュアップし、さまざまなテストケースを管理するためにTestNGをSeleniumで使用する方法を学びたい初心者と専門家の両方に最適です。

Seleniumを学び、テストドメインでキャリアを築きたい場合は、インタラクティブなライブオンラインをご覧ください。 ここでは、24時間365日のサポートが付属しており、学習期間全体をガイドします。

質問がありますか?コメント欄にご記入ください。折り返しご連絡いたします。