簡體   English   中英

如何並行運行surefire測試,同時強制某些測試依次運行?

[英]How to run surefire tests in parallel while forcing some to run sequentially?

我正在使用數以千計的測試進行非常緩慢的Maven項目(運行所有測試需要2小時)。 因此,我嘗試通過按以下方式配置surefire插件來並行運行測試:

<configuration>
  <failIfNoTests>false</failIfNoTests>
  <reuseForks>false</reuseForks>
  <reuseForks>true</reuseForks>
  <forkCount>2C</forkCount>
  <systemPropertyVariables>
    <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
  </systemPropertyVariables>
  <parallel>suites</parallel>
  <threadCount>12</threadCount>
</configuration>

但是然后某些測試在其@Before@After方法中失敗,在這些方法中我們初始化並清理了一些資源(它似乎與端口沖突有關)。

我嘗試將此注釋@net.jcip.annotations.NotThreadSafe添加到@net.jcip.annotations.NotThreadSafe 文檔中描述的失敗測試中,以按順序運行它們並避免沖突。 但是,這沒有用,這些測試仍然失敗!!!

關於如何強制某些surefire測試在相同的JVM進程和相同的線程上依次運行而其余的將並行運行(可能在不同的JVM進程上)的任何指針?

編輯1現在,我嘗試將surefire的配置分為兩個:一個用於順序測試,另一個用於並行測試。 但是,這種方法似乎並沒有增加執行時間,因為我仍然有失敗的測試,並且仍然需要2小時才能運行所有測試。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>${surefire.version}</version>
  <!-- Sequential tests -->
  <configuration>
    <includes>**/*Sequential.java</includes>
    <failIfNoTests>false</failIfNoTests>
    <reuseForks>false</reuseForks>
    <systemPropertyVariables>
      <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
    </systemPropertyVariables>
  </configuration>
  <executions>
    <!-- Parallel tests -->
    <execution>
      <id>parallel-tests</id>
      <phase>test</phase>
      <goals>
        <goal>test</goal>
      </goals>
      <configuration>
        <includes>**/*.java</includes>
        <excludes>
          <exclude>**/*Sequential.java</exclude>
        </excludes>
        <failIfNoTests>false</failIfNoTests>
        <reuseForks>true</reuseForks>
        <forkCount>2C</forkCount>
        <parallel>suites</parallel>
        <threadCount>12</threadCount>
      </configuration>
    </execution>
  </executions>
</plugin>

我會采用“將surefire的配置分成兩部分”的方法。

但是,您的配置似乎有問題,因為您僅定義了一個執行。

可能想嘗試這樣的事情(使用自己的配置定義2個執行):

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>${surefire.version}</version>

  <executions>
     <!-- Sequential tests -->
    <execution>
      <id>sequential-tests</id>
      <phase>test</phase>
      <goals>
        <goal>test</goal>
      </goals>
      <configuration>
        <includes>**/*Sequential.java</includes>
        <failIfNoTests>false</failIfNoTests>
        <reuseForks>false</reuseForks>
        <systemPropertyVariables>
            <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
        </systemPropertyVariables>
      </configuration>
    </execution>      
    <!-- Parallel tests -->
    <execution>
      <id>parallel-tests</id>
      <phase>test</phase>
      <goals>
        <goal>test</goal>
      </goals>
      <configuration>
        <includes>**/*.java</includes>
        <excludes>
          <exclude>**/*Sequential.java</exclude>
        </excludes>
        <failIfNoTests>false</failIfNoTests>
        <reuseForks>true</reuseForks>
        <forkCount>2C</forkCount>
        <parallel>suites</parallel>
        <threadCount>12</threadCount>
      </configuration>
    </execution>
  </executions>
</plugin>

這是我根據需要運行測試的最終Maven配置:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>${surefire.version}</version>
      <!-- Sequential tests -->
      <configuration>
        <failIfNoTests>false</failIfNoTests>
        <reuseForks>false</reuseForks>
        <systemPropertyVariables>
          <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
        </systemPropertyVariables>
      </configuration>
      <executions>
        <!-- Default tests -->
        <execution>
          <id>default-test</id>
          <configuration>
            <skip>true</skip>
          </configuration>
        </execution>
        <!-- Parallel tests -->
        <execution>
          <id>parallel-tests</id>
          <phase>test</phase>
          <goals>
            <goal>test</goal>
          </goals>
          <configuration>
            <includes>**/*.java</includes>
            <excludes>
              <exclude>**/*Sequential.java</exclude>
            </excludes>
            <failIfNoTests>false</failIfNoTests>
            <reuseForks>true</reuseForks>
            <forkCount>2C</forkCount>
            <parallel>suites</parallel>
            <threadCount>12</threadCount>
          </configuration>
        </execution>
        <!-- Sequential tests -->
        <execution>
          <id>sequential-tests</id>
          <phase>test</phase>
          <goals>
            <goal>test</goal>
          </goals>
          <configuration>
            <skip>${skip.sequential.tests}</skip>
            <includes>**/*Sequential.java</includes>
            <reuseForks>false</reuseForks>
          </configuration>
        </execution>
      </executions>
    </plugin>

暫無
暫無

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

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