TestNGを使用したカスタムレポート
1. 概要
この記事では、TestNGを使用したカスタムロギングとレポートの生成について説明します。
TestNGは、独自のレポート機能を提供します– HTML/XML形式のいずれかでレポートを生成します。 maven-surefire-plugin、を使用してテストを実行すると、レポートはプラグインで定義されたデフォルトの形式になります。 組み込みのレポートとは別に、ログに記録された情報と生成されたレポートを簡単にカスタマイズするためのメカニズムを提供します。
TestNGの基本から始めたい場合は、この記事をチェックしてください。
2. カスタムロギング
カスタムログを実装する前に、 mvn test command :を実行してデフォルトのログを調べてみましょう。
Tests run: 11, Failures: 1, Errors: 0, Skipped: 0,
Time elapsed: 1.21 sec <<< FAILURE!
- in TestSuite
whenCalledFromSuite_thanOK(baeldung.com.RegistrationTest)
Time elapsed: 0.01 sec <<< FAILURE!
java.lang.AssertionError: Test Failed due to some reason
at baeldung.com.RegistrationTest.whenCalledFromSuite_thanOK(
RegistrationTest.java:15)
Results :
Failed tests:
RegistrationTest.whenCalledFromSuite_thanOK:15
Test Failed due to some reason
Tests run: 11, Failures: 1, Errors: 0, Skipped: 0
[ERROR] There are test failures.
これらのログには、実行の順序や、特定のテストがいつ開始/完了したかなどに関する情報は含まれていません。
各実行の結果をいくつかのカスタムデータとともに知りたい場合は、独自のログとレポートを実装できます。 TestNGは、カスタムレポートとロギングを実装する方法を提供します。
簡単に言えば、ロギング用のorg.testng.ITestListenerインターフェース、またはレポート用のorg.testng.IReporterインターフェースのいずれかを実装できます。これらの実装されたクラスは、テストの開始、終了、失敗などのイベントについて通知を受け取ります。スイート。
先に進んで、いくつかの簡単なカスタムロギングを実装しましょう。
public class CustomisedListener implements ITestListener {
// ...
@Override
public void onFinish(ITestContext testContext) {
LOGGER.info("PASSED TEST CASES");
testContext.getPassedTests().getAllResults()
.forEach(result -> {LOGGER.info(result.getName());});
LOGGER.info("FAILED TEST CASES");
testContext.getFailedTests().getAllResults()
.forEach(result -> {LOGGER.info(result.getName());});
LOGGER.info(
"Test completed on: " + testContext.getEndDate().toString());
}
//...
}
onFinish()メソッドをオーバーライドしたことに注目してください。このメソッドは、すべてのテストの実行が完了し、すべての構成が完了したときに呼び出されます。 同様に、 onTestStart()、onTestFailure()などの他のメソッドをオーバーライドできます(これらの他のメソッドの詳細については、ここを参照してください)。
次に、このリスナーをXML構成に含めましょう。
<suite name="My test suite">
<listeners>
<listener class-name="com.baeldung.reports.CustomisedListener" />
</listeners>
<test name="numbersXML">
<parameter name="value" value="1" />
<parameter name="isEven" value="false" />
<classes>
<class name="baeldung.com.ParametrizedTests" />
</classes>
</test>
</suite>
実行されると、リスナーはすべてのイベントで呼び出され、実装時に情報をログに記録します。 これは、テスト実行のデバッグに役立つ場合があります。
出力ログ:
...
INFO CUSTOM_LOGS - Started testing on: Sat Apr 22 14:39:43 IST 2017
INFO CUSTOM_LOGS - Testing:
givenNumberFromDataProvider_ifEvenCheckOK_thenCorrect
INFO CUSTOM_LOGS - Tested:
givenNumberFromDataProvider_ifEvenCheckOK_thenCorrect Time taken:6 ms
INFO CUSTOM_LOGS - Testing:
givenNumberObjectFromDataProvider_ifEvenCheckOK_thenCorrect
INFO CUSTOM_LOGS - Failed :
givenNumberObjectFromDataProvider_ifEvenCheckOK_thenCorrect
INFO CUSTOM_LOGS - PASSED TEST CASES
INFO CUSTOM_LOGS - givenNumberFromDataProvider_ifEvenCheckOK_thenCorrect
INFO CUSTOM_LOGS - FAILED TEST CASES
INFO CUSTOM_LOGS -
givenNumberObjectFromDataProvider_ifEvenCheckOK_thenCorrect
INFO CUSTOM_LOGS - Test completed on: Sat Apr 22 14:39:43 IST 2017
...
カスタムログは、デフォルトのログに不足している情報を提供します。
3. カスタムレポート
プラグインを使用してテストを実行すると、 target /surefire-reportsディレクトリにHTML/XML形式のレポートが生成されます。
TestNG XMLファイルを使用して特定のテストスイートを実行する場合は、それをsurefire-plugin構成タグにリストする必要があります。
<configuration>
<suiteXmlFiles>
<suiteXmlFile>
src\test\resources\parametrized_testng.xml
</suiteXmlFile>
</suiteXmlFiles>
</configuration>
カスタムロギングの後、 org.testng.IReporter インターフェイスを実装し、 generateReport()メソッドをオーバーライドするカスタムレポートを作成してみましょう。
public void generateReport(
List<XmlSuite> xmlSuites,
List<ISuite> suites, String outputDirectory) {
String reportTemplate = initReportTemplate();
String body = suites
.stream()
.flatMap(suiteToResults())
.collect(Collectors.joining());
String report
= reportTemplate.replaceFirst("</tbody>", String.format("%s</tbody>", body));
saveReportTemplate(outputDirectory, report);
}
オーバーライドされたメソッドは、次の3つの引数を取ります。
- xmlSuite – には、XMLファイルに記載されているすべてのスイートのリストが含まれています
- suites –リストオブジェクト。テスト実行に関するすべての情報を保持します。
- outputDirectory –レポートが生成されるディレクトリパス
initReportTemplate()メソッドを使用してHTMLテンプレートをロードしました。 suiteToResults()関数は、 resultsToRow()関数を呼び出してレポート生成の内部を処理します。 :
private Function<ISuite, Stream<? extends String>> suiteToResults() {
return suite -> suite.getResults().entrySet()
.stream()
.flatMap(resultsToRows(suite));
}
private Function<Map.Entry<String, ISuiteResult>,
Stream<? extends String>> resultsToRows(ISuite suite) {
return e -> {
ITestContext testContext = e.getValue().getTestContext();
Set<ITestResult> failedTests
= testContext.getFailedTests().getAllResults();
Set<ITestResult> passedTests
= testContext.getPassedTests().getAllResults();
Set<ITestResult> skippedTests
= testContext.getSkippedTests().getAllResults();
String suiteName = suite.getName();
return Stream
.of(failedTests, passedTests, skippedTests)
.flatMap(results ->
generateReportRows(e.getKey(), suiteName, results).stream());
};
}
完全な結果を保存するためのsaveReportTemplate()。
XML構成ファイルにレポーターを含めます。
<suite name="suite">
<listeners>
<listener class-name="com.baeldung.reports.CustomisedReports" />
</listeners>
<test name="test suite">
<classes>
<class name="baeldung.com.RegistrationTest" />
<class name="baeldung.com.SignInTest" />
</classes>
</test>
</suite>
レポートの出力は次のとおりです。
デフォルトの確実なHTMLレポートと比較すると、このレポートは、結果の明確で鮮明な画像を1つのテーブルに表示します。 これはより便利で読みやすいです。
4. 結論
このクイックチュートリアルでは、SurefireMavenプラグインを使用してテストレポートを生成する方法について学習しました。 また、TestNGを使用してログをカスタマイズし、カスタマイズされたレポートを生成することも検討しました。 テストケース、スイートなどの作成方法など、TestNGの詳細については。 入門書を参照してください
テストケースやスイートの作成方法など、TestNGの詳細については、紹介の記事から始めてください。
いつものように、スニペットの実装はGitHubのにあります。