SeleniumでTestNGを使ってテストケースを自動化する
この記事は弊社のQAエンジニア:Sukriti Baniyaが作成した記事です。英語版はこちらをご覧ください。
Medium
はじめに
TestNGはオープンソースの自動テストフレームワークである。TestNG の NG は「Next Generation」の略です。テストケースとその実行を完全にコントロールすることができます。開発者はユニットテストに使用し、テスターはフレームワークやツールとして使用します。
フレームワークをゼロから開発する場合、TestNGは非常に人気があり、強力なフレームワークです。Junit と比較すると、TestNG フレームワークはより多くの機能を提供し、使いやすい。開発者とテスターは、TestNG のパワフルで柔軟なテストフレームワークから恩恵を受けています。様々なテストニーズを解決するための幅広い機能を提供しています。[1]. TestNG を使えば、いくつのテストケースが成功したのか、失敗したのか、あるいはスキップしたのかを簡単に判断できる、優れたレポートを簡単に作成することができます。また、失敗したテストケースを実行することもできる。[2]
なぜTestNGなのか?
TestNG では、アノテーション、グループ化、パラメトライジングを使用して、複雑なテストケースを開発することができます。ユニットテスト、機能テスト、エンドツーエンドテスト、統合テストなど、あらゆるタイプのテスト自動化を網羅しています。ファイルは jar 形式で提供されています。TestNGには、テスターの作業を容易にする数多くのクラスインターフェースとメソッドがあります。
TestNGは、強力なフレームワークを構築するための機能を追加します。TestNGのキーワードとアノテーションによって、テストはより簡単になります。TestNGでは、メインメソッドなしでテストスクリプトを実行することができます。メインメソッドの代わりに、Testアノテーション(@Test)を使います。一つのクラスで複数のテストケースを並行して実行することができます。また、マルチブラウザテストもサポートしています。
これとは別に、Selenium テストはテスト結果のレポートを適切な形式で生成しません。Selenium で TestNG を使うことで、より印象的で読みやすいテスト結果を生成することができます。[3]
TestNGの利点:
TestNG を使用することで、様々な利点があります。
コードの理解を容易にし、JUnit のようにクラスを継承する必要性をなくすアノテーションをサポートしています。
柔軟なテスト構成をサポートし、定義された順序でテスト・スイート、グループ、またはクラスを実行することができます。
データ駆動型テストをサポートしており、複数のデータセットで同じテストケースを実行できます。
エンド・ツー・エンドのテスト時間を短縮する並列実行が可能です。これは、大規模なプロジェクトや回帰テストにおいて、より効率的です。
HTML や XML 形式のレポートを生成します。
テストメソッドをテストグループにグループ化し、テストメソッドの優先順位を設定することができます。これは、テストを整理し、重要なテストを最初に実行するように指定するのに非常に便利です。
複数のテストクラスやテストメソッドを XML ファイルのテストスイートにグループ化することができ、テストの体系的な実行方法を提供するのに役立ちます
EclipseにTestNGをインストールする
Eclipse IDEを起動します。
Help -> Eclipse Marketplaceに進みます。
検索ボックスに 「TestNG 」と入力し、Enterをクリックします。
リストにTestNG for Eclipseが表示されるので、「インストール」をクリックする。
その後、確認ウィンドウが開くので、「confirm 」をクリックする。
最後にライセンスに同意し、完了をクリックします。
TestNGアノテーション
アノテーションは、順序やシーケンスに基づいてプログラムを実行するために追加されるコード行です[5]。TestNG は、テストメソッドを論理的な順序で整理し、実行するための一連のアノテーションを提供します。以下は、TestNG アノテーションの階層です:
@BeforeSuite
@BeforeClass
@BeforeMethod
@Test
@AfterMethod
@AfterClass
@AfterSuite
Testはメインのアノテーションです。このアノテーションは、メソッドを個別のテストケースとして指定します。優先度や依存関係、テストの有効化/無効化といったテストケースの追加特性は、 このアノテーションで指定します。
TestNG におけるテストケース
テストアノテーション @Test は、テストケースを記述するために使用します。アプリケーションとの対話、アサーション、ステートメントの印刷、コードの出力の検証など、特定のテストアクションを実行するには、このテストアノテーションのメソッド内に追加します。
テストケースの要件に応じて、テストケースに 「@BeforeMethod」 と 「@AfterMethod」 でアノテーションされたセットアップとティアダウンメソッドを含めることで、テスト環境を準備し、使用後にリソースを解放することができます。
TestNG アサーション
TestNG は、テストシナリオで予測される結果を検証するためにアサーションを提供します。条件が真か偽かを調べる文はアサーションと呼ばれます。アサーションが結果を false と返す場合、テストケースが失敗しエラーが発生したことを示します。テスト結果が期待通りになったかどうかを確認するのに役立ちます。TestNG のユーザがよく使うアサーションには、次のようなものがあります:
assertEquals アサーション 「assertEquals」 は、指定したふたつの値が等しいかどうかをチェックします。等しくない場合は AssertionError がスローされます。
assertTrue: アサーション 「assertTrue」 を使用して、ある条件が真であるかどうかを検証します。
assertFalse: アサーション 「assertFalse」 は、条件が偽であるかどうかを検証するために使用します。
TestNGの印刷ステートメント
2つの print 文があります。それらは
Reporter.log(「Testcase1」);
ここで、Reporter はクラス、log は静的メソッドです。この文はレポートにのみ表示されます。
Reporter.log(「テストケース1」, true)
この文はコンソールにもレポートにも表示されます。true はキーワードです。
各テスト注釈は、以下のように非静的メソッドに関連付けられています:
Class ABC {
@Test
Public void method1()
{
Reporter.log("Report", true);
}
}
プロジェクトにTestNGライブラリを追加する
プロジェクトを選択し、右クリックします。
ビルドパス -> ライブラリの追加.
TestNGを選択し、Nextをクリックして終了します。
ウェブアプリケーションのログインのテストケース
ログインテストは、ウェブアプリケーションの最初のテストです。ログインテストには、機能テスト、非機能テスト、UI テスト、パフォーマンステストなど、様々な種類があります。機能テストと非機能テストには、肯定的なテストと否定的なテストの両方が含まれます。以下は、いくつかの機能的なポジティブテストとネガティブテストの例です。
ポジティブ: 有効な認証情報によるログイン成功
ネガティブ: 無効なユーザ名でのログイン失敗
否定 無効なパスワードでのログイン失敗
肯定的 ログインしないとログアウトできない
Successful login with valid credentials
以下は、有効な認証情報でログインした場合のテストケース実行のサンプルコードです。これは、システムに有効なクレデンシャルを与えた場合のテストケースです。ここでは、アサーションを使って実際の結果と期待される結果が真であることを検証します。したがって、以下のテストケースは合格です。
public class SiteUrl {
//Common method for getting site Url
public WebDriver getSiteUrl()
{
WebDriver driver1 = new ChromeDriver();
driver1.get("https://practicetestautomation.com/practice-test-login/");
driver1.manage().window().maximize();
return driver1;
}
}
public class TestLogin {
WebDriver driver = null;
@Test(priority=1)
public void loginByValidUsernameAndPassword() throws Throwable {
//launch the browser
SiteUrl url = new SiteUrl();
driver = url.getSiteUrl();
Thread.sleep(2000);
//login with valid credentials
driver.findElement(By.xpath("//input[@id='username']")).sendKeys("student");
Thread.sleep(2000);
driver.findElement(By.xpath("//input[@id='password']")).sendKeys("Password123");
Thread.sleep(2000);
driver.findElement(By.xpath("//button[@id='submit']")).click();
String msg = driver.findElement(By.xpath("//h1[text()='Logged In Successfully']")).toString();
//verify the actual and expected result
Assert.assertTrue(msg.contains("Logged In Successfully"));
Thread.sleep(2000);
driver.findElement(By.xpath("//a[text()='Log out']")).click();
Reporter.log("TestCase1", true);
}
否定的 無効なユーザー名でのログイン失敗
無効なユーザ名を提供し、システムがログインできることを確認する場合、これは否定的なテストケースです。否定: 無効なパスワードでのログイン失敗
無効なパスワードを提供し、システムがログインできるかどうかを検証する場合、これは否定的なテストケ ースである。正: ログインせずにログアウトできない
これはテストスキップ・ケースである。システムがログインしていない場合、ログアウト操作を実行する必要はありません。この場合、ログアウト テストケースはログインに依存するため、実行されない。ログインが失敗した場合、ログアウトのテストケースは実行する必要がない。
レポートの生成
TestNG を使ってテストケースを実行すると、TestNG レポートが生成されます。これらはデフォルトの HTML レポートです。レポートは、テストケースのステータスやプロジェクト全体のステータスを提供するため、非常に重要です。TestNG レポートでは、テストケースのステータスは、合格、不合格、スキップの 3 つです。合格したテストケースは緑色で表示され、不合格だったテストケースは赤色で、スキップしたテストケースは灰色で表示されます。
レポート作成は、手動テストでも自動テストでも同様に重要である。レポートから、どれだけのテストケースがパスされ、失敗し、スキップされたかを簡単に見ることができます。Selenium ウェブドライバはウェブアプリケーションを自動化しますが、レポートを生成しません[6]。
TestNG でレポートを生成する手順
TestNG プログラムを実行し、プロジェクトをリフレッシュします。
test-outputフォルダが生成されます。
フォルダを開くと、「emailable-report.html 」が表示されます。
「emailable-report.html "を右クリックし、ウェブブラウザで開きます。
以下は、コンソールと E メール可能レポートの形式です:
合格したテストケースのコンソールでのレポート
以下は、コンソールでのテストケース実行レポートです。合計 3 つのテストケースがあり、すべて合格しています。
TestCase1
TestCase2
TestCase3
PASSED: loginByIncorrectPassword
PASSED: loginByValidUsernameAndPassword
PASSED: loginByIncorrectUsername
===============================================
Default test
Tests run: 3, Failures: 0, Skips: 0
===============================================
===============================================
Default suite
Total tests run: 3, Passes: 3, Failures: 0, Skips: 0
===============================================
通過したテストケースの電子メール可能なレポート
以下は、電子メール可能なレポート形式でのレポートです。合計 3 つのテストケースがあり、すべてのケースがパスしています。合格したケースは緑色でハイライトされているので、簡単に読むことができます。
失敗したテストケースとスキップしたテストケースのコンソールレポート
下図は、コンソールに表示されるテストレポートです。これは、テストが失敗したケースとテストがスキップされたケースの例です。システムがログインしていない場合、ログアウトできない。そのため、ログアウトのテストケースはスキップされます。
TestCase1
TestCase2
TestCase3
PASSED: loginByIncorrectUsername
PASSED: loginByIncorrectPassword
PASSED: loginByValidUsernameAndPassword
FAILED: systemFail
SKIPPED: systemLogout
===============================================
Default test
Tests run: 5, Failures: 1, Skips: 1
===============================================
===============================================
Default suite
Total tests run: 5, Passes: 3, Failures: 1, Skips: 1
===============================================
不合格およびスキップされたテストケースの電子メール可能なレポート
以下は、失敗したテストケースとスキップされたテストケースの電子メール送信可能なレポート形式です。失敗したテストケースは赤で、スキップしたテストケースは灰色で表示されます。また、各テストケースの実行にかかった時間と、テストケースの合計をミリ秒単位で表示します。
参考文献
[1] TestNG Tutorial — JavatPoint. (n.d.). www.javatpoint.com. https://www.javatpoint.com/testng-tutorial
[2] Smith, J. (2024, March 23). TestNG Tutorial: What is Annotations & Framework in Selenium. Guru99. https://www.guru99.com/all-about-testng-and-selenium.html
[3] Basic of TestNG: How we can use it in the Testing? (n.d.). https://www.qable.io/blog/basic-of-testng-how-we-can-use-it-in-the-testing
[4] Sandeep, M. (2024, April 10). What is TestNG and Advantage’s of TestNG. https://www.linkedin.com/pulse/what-testng-advantages-mahenderkar-sandeep-hgtbc/
[5] TestNG Annotation Explained with Examples. (2024). TestGrid. https://testgrid.io/blog/testng-annotations/
[6] Rungta, K. (2024, March 23). TestNG Reports Generation in selenium: how to generate? Guru99. https://www.guru99.com/testng-report.html
[7] [Oodles Technologies Private Limited]. (n.d.). Importance of TestNG and its Advantages. Oodlestechnologies. https://www.oodlestechnologies.com/dev-blog/importance-of-testng-and-its-advantages/
[8] Test Login | Practice Test Automation. (2020, September 8). Practice Test Automation. https://practicetestautomation.com/practice-test-login/
協業開発及び開発パートナーをお探しのお客様へ
弊社は、ネパールに海外拠点を持ち、生成AI、モバイルアプリ、システム開発を中心に事業を展開する企業です。
自社サービスの開発経験を活かし、クライアント様と共に事業を創造することを重視し、創業以来、スタートアップから中小企業、大手企業、自治体まで、幅広い開発実績があります。プロダクトはユーザーが使いやすいように設計しており、企画から開発、保守運用まで対応しています。開発技術を厳選し限定することで、セキュリティ、プロダクトの品質向上に努めており、事業開発に関する課題を深く理解し、最適なご提案が可能です
お問い合わせはこちらから:
お問い合わせフォーム:https://readytowork.jp/