2017-02-06 15 views
0

Я работаю над проектом maven с тысячами тестов, которые выполняются очень медленно (требуется 2 часа для запуска всех тестов). Так что я пытался запускать тесты параллельно настроив безошибочный плагин следующим образом:Как запустить тесты проверки подлинности параллельно, заставляя некоторых запускать последовательно?

<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 к неудачным испытаниям, как описано в surefire documentation, чтобы последовательно запускать их и избегать конфликтов. Однако это не сработало, и эти тесты все еще терпят неудачу !!!

Любой указатель на то, как принудительно запускать некоторые завершающие тесты для последовательного запуска одного и того же процесса JVM и одного потока, в то время как остальные будут работать параллельно (потенциально на разных JVM-процессах)?

EDIT 1 Теперь я попытался разделить конфигурацию безошибочного на два: один для последовательных испытаний и еще один для параллельных испытаний. Однако этот подход не улучшает время выполнения, так как у меня все еще есть тесты, которые терпят неудачу, и для выполнения всех тестов требуется 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> 
+0

JCIP аннотаций только для документации, они не имеют семантических эффектов. – xTrollxDudex

ответ

0

Вот моя окончательная конфигурация 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> 
0

Я бы пошёл с вашей «расколом конфигурации верного огня на два».

Однако ваша конфигурация кажется неисправной, потому что у вас есть только одно исполнение.

Может хотите попробовать что-то вроде этого (определить 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> 
+0

Кроме того, resuseForks = false на самом деле не требуется для последовательных тестовых исполнений, но значительно замедлит ваши тесты, я бы переключил это на true, если нет веской причины для false – tom

+0

, ваша конфигурация завершится запуском 3 теста: default-test , последовательные тесты и параллельные тесты. – bachr

+0

Правда, вам нужно отключить значение по умолчанию, но я вижу, что вы уже нашли решение для этого – tom

 Смежные вопросы

  • Нет связанных вопросов^_^