簡體   English   中英

在並行模式下使用maven-surefire-plugin時如何識別慢速單元測試?

[英]How to identify slow unit tests when using maven-surefire-plugin in parallel mode?

為了管理/縮短構建時間,我想確定哪些單元測試花費的時間最多 - 在使用maven-surefire-plugin的並行測試環境中。

我們使用JUnit (4.10)進行單元測試。 我們使用maven (2.2.1 - 我們使用的一些插件還不支持maven 3)作為我們的主要構建工具,使用maven-surefire-plugin (2.19)來運行單元測試。

我們在並行模式下使用maven-surefire-plugin ,其中各個方法並行運行,單元測試類並行運行 - 這非常重要,因為它顯着減少了構建單元的測試時間。 maven-surefire-plugin .pom maven-surefire-plugin.pom配置如下:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19</version>
    <configuration>
      <argLine>-Xmx2G -XX:MaxPermSize=1G -XX:-UseSplitVerifier</argLine>
      <failIfNoTests>false</failIfNoTests>
      <parallel>classesAndMethods</parallel>
      <useUnlimitedThreads>true</useUnlimitedThreads>
    </configuration>
  </plugin>

但是,其中一個含義是在控制台輸出中,每個JUnit測試類所用的時間是該類中所有方法的總時間。

例如,如果一個測試類有10個單元測試方法,每個測試方法需要1秒才能運行,那么測試類需要大約1秒才能運行(每個方法並行運行),但輸出結果如下:

運行com.package.QuickParallelTest測試運行:10,失敗:0,錯誤:0,跳過:0,已過去時間:10.0秒 - 在com.package.QuickParallelTest中

這使得很難在控制台輸出與另一個測試類中區分10個單元測試方法,其中9個幾乎立即運行,1個運行幾乎需要10秒。 在這種情況下,測試類需要大約10秒才能運行(因為一個慢速測試方法),但是maven-surefire-plugin控制台輸出實際上是相同的:

運行com.package.SlowParallelTest測試運行:10,失敗:0,錯誤:0,跳過:0,已過去時間:10.0秒 - 在com.package.SlowParallelTest

理想情況下,我希望花時間來指示測試類運行多長時間(並行),而不是單獨運行方法所花費的總時間(就像單線程一樣)。

所以,我的問題是:

  1. 是否存在我缺少的maven-surefire-plugin設置,以便打印摘要顯示每個類所花費的時間而不是方法的聚合?
  2. 這是maven-surefire-plugin已知的“錯誤”(或“功能”)嗎? (我檢查了SureFire JIRA ,但找不到這樣的東西。)
  3. 是否有另一種方法可以確定哪些測試需要很長時間才能進行優化。

編輯:

我試過玩一些額外的配置設置。 奇怪的是,將以下內容添加到.pom的配置似乎將控制台輸出中經過的時間更改為運行測試類所花費的時間 - 但是,這(在我看來)這是違反直覺的,因為這些設置是默認設置

    <configuration>
      ...
      <forkCount>1</forkCount>
      <reuseForks>true</reuseForks>
    </configuration>

添加到Maven Surefire插件配置的reportFormat條目並將其值設置為plain (而不是默認的brief )將為每個方法提供經過的時間。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19</version>
            <configuration>
                <argLine>-Xmx2G -XX:MaxPermSize=1G -XX:-UseSplitVerifier</argLine>
                <failIfNoTests>false</failIfNoTests>
                <parallel>classesAndMethods</parallel>
                <useUnlimitedThreads>true</useUnlimitedThreads>
                <reportFormat>plain</reportFormat>
            </configuration>
        </plugin>
    </plugins>
</build>

使用默認reportFormat輸出( brief ):

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.sample.mocking.InternalServiceTestCase
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.241 sec - in com.sample.mocking.InternalServiceTestCase

具有plain價值的輸出:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.sample.mocking.InternalServiceTestCase
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.187 sec - in com.sample.mocking.InternalServiceTestCase
test(com.sample.mocking.InternalServiceTestCase)  Time elapsed: 0.005 sec
mockTest(com.sample.mocking.InternalServiceTestCase)  Time elapsed: 0.17 sec
mockTestFailureTollerance(com.sample.mocking.InternalServiceTestCase)  Time elapsed: 0.007 sec
mockProcessfile(com.sample.mocking.InternalServiceTestCase)  Time elapsed: 0.003 sec

此選項可為您提供有關測試和執行時間的更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM