2013-10-31 102 views
4

我有一個Maven POM文件,當我提供並行執行選項時,我沒有看到日誌中有任何並行執行的跡象。而XML調試正在讓我瘋狂。任何想法這裏有什麼不對? http://pastebin.com/WkCDwYzJMaven故障保護插件不能並行運行測試

的問題 - - 從運行

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>com.xxx.xxxx.testing.ranger</groupId> 
     <artifactId>ranger-parent</artifactId> 
     <relativePath>../parent/pom.xml</relativePath> 
     <version>1.0.0</version> 
    </parent> 
    <artifactId>ranger-api-tests</artifactId> 
    <name>Ranger API Tests</name> 
    <description>Ranger API integration tests. Depends on the Ranger test framework project.</description> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <test.groups /> 
     <surefire.and.failsafe.report.dir>C:/Users/xxx/Documents/Projects/LearnCubeAPIIT/tests/target</surefire.and.failsafe.report.dir> 
    </properties> 
    <dependencies> 
     <!-- Granite Testing framework --> 
     <dependency> 
     <groupId>com.xxx.xxxx.testing.ranger</groupId> 
     <artifactId>ranger-api-it-framework</artifactId> 
     <version>1.0.0</version> 
     </dependency> 
     <dependency> 
     <groupId>commons-lang</groupId> 
     <artifactId>commons-lang</artifactId> 
     <version>2.4</version> 
     </dependency> 
     <dependency> 
     <groupId>commons-httpclient</groupId> 
     <artifactId>commons-httpclient</artifactId> 
     <version>3.1</version> 
     </dependency> 
     <dependency> 
     <groupId>org.apache.maven.surefire</groupId> 
     <artifactId>surefire-junit47</artifactId> 
     <version>2.16</version> 
     </dependency> 
     <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-failsafe-plugin</artifactId> 
      <version>2.16</version> 
      <configuration> 
       <parallel>classes</parallel> 
       <threadCount>4</threadCount> 
       <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory> 
       <groups>${test.groups}</groups> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
        <goal>integration-test</goal> 
        <goal>verify</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     </plugins> 
    </build> 
    <reporting> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-report-plugin</artifactId> 
      <version>2.16</version> 
      <configuration> 
       <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory> 
      </configuration> 
      <reportSets> 
       <reportSet> 
        <id>integration-tests</id> 
        <reports> 
        <report>failsafe-report-only</report> 
        <report>report-only</report> 
        </reports> 
       </reportSet> 
      </reportSets> 
     </plugin> 
     </plugins> 
    </reporting> 
</project> 

日誌當並行執行選項都傳遞給故障安全插件,如何將日誌應該看起來像確認的測試,並行執行正在發生?

UPDATE

我注意到,當我設置調試選項Maven來執行,我注意到,parallelExecution被設置爲false

[DEBUG] Populating class realm plugin>org.apache.maven.plugins:maven-surefire-plugin:2.12.4--1057774753 
[DEBUG] Included: org.apache.maven.plugins:maven-surefire-plugin:jar:2.12.4 
[DEBUG] Included: org.apache.maven.surefire:surefire-booter:jar:2.12.4 
[DEBUG] Included: org.apache.maven.surefire:surefire-api:jar:2.12.4 
[DEBUG] Included: org.apache.maven.surefire:maven-surefire-common:jar:2.12.4 
[DEBUG] Included: org.apache.commons:commons-lang3:jar:3.1 
[DEBUG] Included: org.apache.maven.shared:maven-common-artifact-filters:jar:1.3 
[DEBUG] Included: org.codehaus.plexus:plexus-utils:jar:3.0.8 
[DEBUG] Included: org.apache.maven.reporting:maven-reporting-api:jar:2.0.9 
[DEBUG] Included: org.apache.maven.plugin-tools:maven-plugin-annotations:jar:3.1 
[DEBUG] Excluded: org.apache.maven:maven-plugin-api:jar:2.0.9 
[DEBUG] Excluded: org.apache.maven:maven-artifact:jar:2.0.9 
[DEBUG] Excluded: org.apache.maven:maven-project:jar:2.0.9 
[DEBUG] Excluded: org.apache.maven:maven-settings:jar:2.0.9 
[DEBUG] Excluded: org.apache.maven:maven-profile:jar:2.0.9 
[DEBUG] Excluded: org.apache.maven:maven-model:jar:2.0.9 
[DEBUG] Excluded: org.apache.maven:maven-artifact-manager:jar:2.0.9 
[DEBUG] Excluded: org.apache.maven:maven-plugin-registry:jar:2.0.9 
[DEBUG] Excluded: org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9-stable-1 
[DEBUG] Excluded: junit:junit:jar:3.8.1 
[DEBUG] Excluded: org.apache.maven:maven-core:jar:2.0.9 
[DEBUG] Excluded: org.apache.maven:maven-plugin-parameter-documenter:jar:2.0.9 
[DEBUG] Excluded: org.apache.maven:maven-repository-metadata:jar:2.0.9 
[DEBUG] Excluded: org.apache.maven:maven-error-diagnostics:jar:2.0.9 
[DEBUG] Excluded: org.apache.maven:maven-plugin-descriptor:jar:2.0.9 
[DEBUG] Excluded: org.apache.maven:maven-monitor:jar:2.0.9 
[DEBUG] Excluded: classworlds:classworlds:jar:1.1 
[DEBUG] Excluded: org.apache.maven:maven-toolchain:jar:2.0.9 
[DEBUG] Configuring mojo org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:2.12.4--1057774753, parent: [email protected]] 
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test' with basic configurator --> 
[DEBUG] (s) basedir = /Users/nallagun/Git/testing/Ranger/tests 
[DEBUG] (s) childDelegation = false 
[DEBUG] (s) classesDirectory = /Users/nallagun/Git/testing/Ranger/tests/target/classes 
[DEBUG] (s) disableXmlReport = false 
[DEBUG] (s) enableAssertions = true 
[DEBUG] (s) forkMode = once 
[DEBUG] (s) junitArtifactName = junit:junit 
[DEBUG] (s) localRepository =  id: local 
     url: file:///Users/nallagun/.m2/repository/ 
    layout: none 

[DEBUG] (s) parallel = classes 
[DEBUG] (f) parallelMavenExecution = false 
[DEBUG] (s) perCoreThreadCount = true 

任何想法,爲什麼這可能發生?

感謝

+0

請在問題主體中發佈相關的pom部分。 – Boj

+0

我遇到了XML格式問題,所以不想搞亂這個帖子:( – SuperMan

+0

你看到的日誌與maven-surefire-plugin有關,我看不到這個插件的配置。配置在你父母的地方嗎? – Boj

回答

5

首先,確保你強迫一個特定的JUnit提供商,因爲已知有issues併發執行舊版本(< 4.7)。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <version>2.16</version> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.maven.surefire</groupId> 
     <artifactId>surefire-junit47</artifactId> 
     <version>2.16</version> 
    </dependency> 
    </dependencies> 
</plugin> 

可以使用forkCount併發執行選項,而不是parallel。我發現它更加靈活,並且由於每個測試都在其自己的JVM中運行,因此您的併發性問題會更少,這可能會使您的測試結果不確定。這些配置適用於maven-surefire-pluginmaven-failsafe-plugin

<forkCount>8</forkCount> 
<reuseForks>true</reuseForks> 

您可以結合forkCountparallel,但forkCount不同的可能組合,reuseForks等使事情更加複雜。注意,這從docs

當使用reuseForks =真和forkCount值大於一,測試 類交給叉形過程一個接一個。因此, parallel =類不會改變任何東西。但是,您可以使用 parallel = methods:類在forkCount併發執行 進程中,然後每個進程可以使用threadCount線程到 並行執行一個類的方法。

我不知道這些報告會告訴你,如果測試在並行模式或不跑了,但我知道他們正在運行的方法是使用tophtop(Linux或OS X)。這是我的測試運行的截圖。您可以看到多個運行測試並消耗CPU的JVM。我的測試也以這種方式運行得更快。

htop

+0

謝謝,另一個積分問題,你如何處理測試日誌?你讓安全處理它們還是使用自己的包裝? – SuperMan

+0

我只使用默認生成的任何日誌。 – Boj

+1

我嘗試通過添加依賴插件來嘗試更新的答案,但沒有幫助 – SuperMan