Maven Surefire: невозможно выполнить параллельное выполнение теста - PullRequest
8 голосов
/ 30 августа 2010

используя Maven surefire, я не могу форкнуть параллельное выполнение теста.То есть, каждый из моих тестовых случаев запускается в отдельной виртуальной машине Java, отсюда и разветвление.Кроме того, я хочу, чтобы мои тестовые случаи выполнялись параллельно.первая часть работает без проблем: я могу запустить каждый тестовый пример в своей собственной JVM.вторая часть, тем не менее, все еще остается для меня challene.Мне не удалось заставить параллельное выполнение тестовых случаев работать.Вот как выглядит объявление моего плагина:

    <plugin>
          <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.5</version>
      <configuration>
           <parallel>methods</parallel>
           <forkMode>always</forkMode>
                <argLine>-Xms512m -Xmx512m</argLine>
       </configuration>
</plugin>

Я пробовал и методы, и классы, но не видел распараллеливания.Моя версия JUnit 4.7, как показывает объявление зависимости:

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.7</version>
        <scope>compile</scope>
    </dependency>            

Любая помощь будет очень дорогой.

Gregoire.

Ответы [ 8 ]

7 голосов
/ 31 августа 2010

Я думаю, что вы должны использовать параметр threadCount при использовании режима parallel:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.6</version>
    <configuration>
      <forkMode>always</forkMode>
      <argLine>-Xms512m -Xmx512m</argLine>
      <parallel>methods</parallel>
      <threadCount>4</threadCount>
    </configuration>
  </plugin>
4 голосов
/ 05 июля 2012

У меня была такая же проблема, потому что я использовал верную версию 2.7, после обновления до 2.12 он работал со следующей конфигурацией:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.12</version>
  <configuration>
    <parallel>classes</parallel>
    <forkMode>perthread</forkMode>
    <threadCount>4</threadCount>
  </configuration>
</plugin>

Он породил 4 потока, каждый из которых работает со своим собственным jvm.

2 голосов
/ 31 августа 2010

Убедитесь, что вы получили сообщение в журнале, похожее на это

[INFO] Concurrency config is {perCoreThreadCount=false, threadCount=1, parallel=classes, configurableParallelComputerPresent=true}

Непосредственно перед этим заголовком:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

Это сообщение указывает, что параллельный верный провайдер Junit активен.

Если этого нет, то наверняка вы обнаружите другую версию junit, чем вы думаете.Все что ниже 4.7 не будет работать.Запустите mvn dependency: дерево, чтобы проверить, какая версия (версии) присутствует.

Вам также следует обновить систему до версии 2.6, поскольку исправлено несколько незначительных ошибок, связанных с параллельным запуском.По той же причине вы должны использовать последний джунит.

1 голос
/ 15 сентября 2011

Попробуйте изменить ваш forkMode с всегда на "никогда". Это не указано в их документации, но у вас не может быть вилки и параллели в это время (мы нашли это после копания через верный код.)

Как вы знаете, вы, вероятно, столкнетесь с тестами, которые не являются поточно-ориентированными из-за того, что многие тестовые / поддерживающие библиотеки (easymock, powermock и т. Д.) Лишают возможности параллельного тестирования.

1 голос
/ 16 июня 2011

Параллельный режим Surefire чрезвычайно глючит. Например, см. http://jira.codehaus.org/browse/SUREFIRE-747 и http://jira.codehaus.org/browse/SUREFIRE-730

Мне не удалось запустить ни одного параллельного теста (не говоря уже о разветвлении).

0 голосов
/ 08 сентября 2013

Верный 2.16 исправил параллельное выполнение относительно тестов JUnit.

0 голосов
/ 09 октября 2012

Не является ли параллельная установка атрибута TestNG only? согласно этому: http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#parallel

0 голосов
/ 25 февраля 2011

Вы уверены, что это не работает? Вы можете не получить большого ускорения, если ваши тесты не содержат много методов тестирования. С forkMode = всегда лучшее, что вы можете сделать, это запустить все методы тестирования в классе параллельно.

...