1. 概要

私たちのビルドは、多くの場合、プロジェクトの多くの自動テストケースを実行します。 これらには、ユニットテストと統合テストが含まれます。 テストスイートの実行に時間がかかる場合は、テストコードを最適化するか、時間がかかりすぎるテストを追跡することをお勧めします。

このチュートリアルでは、テストケースとテストスイートの実行時間を決定するいくつかの方法を学習します。

2. JUnitの例

レポートの実行時間を示すために、テストピラミッドのさまざまなレイヤーからのテストケースの例をいくつか使用してみましょう。 Thread.sleep()を使用してテストケースの期間をシミュレートします。

JUnit5で例を実装します。 ただし、同等のツールと手法は、JUnit4で作成されたテストケースにも適用されます。

まず、簡単な単体テストを次に示します。

@Test
void someUnitTest() {

    assertTrue(doSomething());
}

次に、実行に時間がかかる統合テストを行いましょう。

@Test
void someIntegrationTest() throws Exception {

    Thread.sleep(5000);
    assertTrue(doSomething());
}

最後に、遅いエンドツーエンドのユーザーシナリオをシミュレートできます。

@Test
void someEndToEndTest() throws Exception {

    Thread.sleep(10000);
    assertTrue(doSomething());
}

この記事の残りの部分では、これらのテストケースを実行し、それらの実行時間を決定します

3. IDEJUnitランナー

JUnitテストの実行時間を見つける最も簡単な方法は、IDEを使用することです。 ほとんどのIDEにはJUnitランナーが組み込まれているため、テスト結果を実行して報告します。

最も人気のある2つのIDE、IntelliJとEclipseには、JUnitランナーが組み込まれています。

2.1. IntelliJJUnitランナー

IntelliJでは、実行/デバッグ構成を使用してJUnitテストケースを実行できます。 テストを実行すると、ランナーは実行時間とともにテストステータスを表示します。

3つのサンプルテストケースすべてを実行したので、合計実行時間と各テストケースにかかった時間を確認できます。

また、将来の参照のためにそのようなレポートを保存する必要があるかもしれません。 IntelliJを使用すると、このレポートをHTMLまたはXML形式でエクスポートできます。 レポートのエクスポート機能は、上のスクリーンショットのツールバーで強調表示されています。

2.2. Eclipse JUnit Runner

Eclipseは組み込みのJUnitランナーも提供します。 テスト結果ウィンドウで、単一のテストケースまたはテストスイート全体の実行時間を確認できます。

ただし、IntelliJテストランナーとは対照的に、Eclipseからレポートをエクスポートすることはできません。

3. MavenSurefireプラグイン

Maven Surefireプラグインは、ビルドライフサイクルのテストフェーズで単体テストを実行するために使用されます。 surefireプラグインは、デフォルトのMaven構成の一部です。 ただし、特定のバージョンまたは追加構成が必要な場合は、pom.xmlで宣言できます。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M3</version>
    <configuration>
        <excludes>
            <exclude>**/*IntegrationTest.java</exclude>
        </excludes>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.3.2</version>
        </dependency>
    </dependencies>
</plugin>

MavenでテストするときにJUnitテストの実行時間を見つけるには3つの方法があります。 次のサブセクションでそれぞれを調べます。

3.1. Mavenビルドログ

Surefireは、ビルドログにすべてのテストケースの実行ステータスと時間を表示します。

[INFO] Running com.baeldung.execution.time.SampleExecutionTimeUnitTest
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.003 s 
- in com.baeldung.execution.time.SampleExecutionTimeUnitTest

ここでは、テストクラスの3つのテストケースすべての合計実行時間を示しています。

3.2. Surefireテストレポート

surefireプラグインは、.txtおよび.xml形式でテスト実行の要約も生成します。 これらは通常、プロジェクトのターゲットディレクトリに格納されます。 Surefireは、両方のテキストレポートの標準形式に従います。

----------------------------------------------
Test set: com.baeldung.execution.time.SampleExecutionTimeUnitTest
----------------------------------------------
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.003 s 
- in com.baeldung.execution.time.SampleExecutionTimeUnitTest

およびXMLレポート:

<?xml version="1.0" encoding="UTF-8"?>
<testsuite
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation=
          "https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd"
	name="com.baeldung.execution.time.SampleExecutionTimeUnitTest"
	time="15.003" tests="3" errors="0" skipped="0" failures="0">
	<testcase name="someEndToEndTest"
		classname="com.baeldung.execution.time.SampleExecutionTimeUnitTest"
		time="9.996" />
	<testcase name="someIntegrationTest"
		classname="com.baeldung.execution.time.SampleExecutionTimeUnitTest"
		time="5.003" />
	<testcase name="someUnitTest"
		classname="com.baeldung.execution.time.SampleExecutionTimeUnitTest"
		time="0.002" />
</testsuite>

テキスト形式は読みやすさに適していますが、XML形式は機械可読であり、HTMLやその他のツールで視覚化するためにインポートできます。

3.3. SurefireHTMLレポート

maven-surefire-report-plugin を使用して、ブラウザーでテストレポートをHTMLで表示できます。

<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>3.0.0-M3</version>
        </plugin>
    </plugins>
</reporting>

これで、mvnコマンドを実行してレポートを生成できます。

  1. mvn surefire-report:report –テストを実行し、HTMLレポートを生成します
  2. mvn site –最後のステップで生成されたHTMLにCSSスタイルを追加します

このレポートには、クラスまたはパッケージ内のすべてのテストケースの実行時間と、各テストケースにかかった時間が表示されます。

4. ジェンキンスのテスト結果

JenkinsでCIを実行している場合は、surefireによって書き込まれたXMLファイルをインポートできます。 これにより、Jenkinsは、テストが失敗した場合にビルドを失敗としてマークし、テストの傾向と結果を表示できます。

Jenkinsでテスト結果を確認すると、実行時間もわかります。

この例では、Jenkinsをインストールした後、Mavenとsurefire XMLレポートファイルを使用してジョブを構成し、テスト結果を公開します。

テスト結果を公開するために、ビルド後のアクションをジョブに追加しました。 Jenkinsは、指定されたパスからXMLファイルをインポートし、このレポートをビルド実行の概要に追加します。

これは、Jenkinsパイプラインビルドを使用して実現することもできます。

5. 結論

この記事では、JUnitテストの実行時間を決定するさまざまな方法について説明しました。 最も直接的な方法は、IDEのJUnitランナーを使用することです。

次に、 maven-surefire-plugin を使用して、テストレポートをテキスト、XML、およびHTML形式でアーカイブしました。

最後に、テストレポートの出力をCIサーバーに提供しました。これは、さまざまなビルドがどのように実行されたかを分析するのに役立ちます。

いつものように、この記事のサンプルコードは、GitHubから入手できます。