Ant Junit тесты работают намного медленнее через ant, чем через IDE - на что смотреть?


9

Я запускаю тесты junit через ant, и они работают значительно медленнее, чем через IDE. Мой муравей вызов:

<junit fork="yes" forkmode="once" printsummary="off"> 
     <classpath refid="test.classpath"/> 
     <formatter type="brief" usefile="false"/> 
     <batchtest todir="${test.results.dir}/xml"> 
      <formatter type="xml"/> 
      <fileset dir="src" includes="**/*Test.java" /> 
     </batchtest> 
    </junit> 

Тот же самый тест, который работает в почти мгновенно в моем IDE (0.067s) принимает 4.632s при запуске через Ant. Раньше я мог ускорить тестовые проблемы, подобные этому, используя параметр junit fork, но в этом случае это, похоже, не помогает. Какие свойства или параметры можно посмотреть, чтобы ускорить эти тесты?

Подробнее:

Я использую заявленное время от IDE против времени, что JUnit задачи выходов. Это не общая сумма времени, указанная в конце хода муравья.

Итак, странно, эта проблема разрешилась сама. Что могло вызвать эту проблему? Система работает на локальном диске, так что это не проблема.

+1

Не было бы fork = yes ухудшить производительность, создав новый процесс для запуска одного теста? Каков результат, когда вы его не используете? 23 сен. 082008-09-23 19:13:09

+1

с forkmode = "once" Я думал, что он будет запускать все тесты junit в отдельном отдельном потоке. Нет никакого существенного изменения формальности между fork = "no и fork =" yes ". 23 сен. 082008-09-23 19:20:11

  0

Вы используете время выполнения Ant или JUnit? Ant делает гораздо больше работы (определяя, какие тесты запускать, возможно, компилировать), чем просто запускать тест через IDE 23 сен. 082008-09-23 21:18:10

1

Сложно сказать с этой информацией. Первое, что я хотел бы сделать, это посмотреть результаты теста и определить, работает ли все отдельные тесты равномерно медленнее или его можно сузить до определенного подмножества тестовых случаев.

(The zero'th, что я хотел бы сделать, это убедиться, что мой муравей задача использует ту же JVM, как Eclipse, и что зависимости пути к классам и импортированные баночки и в самом деле идентичны)

+1

Ящики и JVM одинаковы. Кажется, что по всему тесту любой тест, который проходит в <1,0 секунды в среде IDE, проходит через 3,5-4,5 секунды через ant. 23 сен. 082008-09-23 19:21:22


1

Может быть, вы видите, что потому что Eclipse делает инкрементную компиляцию, а Ant - нет. Можете ли вы подтвердить, что это время тратится только на тестовую цель?

  0

Я также вижу задачу 'junit' долгое время - это не фаза компиляции. Фактическое время, о котором сообщает JUnit, невелико (например: «Пробелы тестов: 21, Ошибки: 0, Ошибки: 0, Истекшее время: 0,034 сек»), поэтому я ожидаю, что пришло время проведенных между тестовыми наборами, которые складываются. Запуск всех тестов в IntelliJ занимает около двух секунд, однако запуск их с помощью задачи 'junit' Ant занимает более 20 секунд. 30 дек. 122012-12-30 19:14:26


4

Вот слепое предположение: попробуйте увеличить максимальный размер кучи, доступный для разветвленной виртуальной машины, используя вложенный тег <jvmarg>, чтобы установить опцию -Xmx.

  0

Я собирался предложить это, а также увеличить размер кучи, доступный для Ant сам, также. 24 окт. 082008-10-24 19:21:33


0

Для справки я нашел свою проблему. Мы использовали программный obfuscator для этого проекта, а часть строкового шифрования этого обфускатора была установлена ​​как «максимальная». Это замедлило любую операцию, в которой присутствовали строки.

Прерывание строкового шифрования в более быстром режиме устраняет проблему.


4

Я предполагаю, что это потому, что ваш антскрипт выводит результаты в файлы XML, тогда как среда IDE хранит их в памяти. Для записи файла требуется больше времени, чем не писать файл.

todir="${test.results.dir}/xml" 

Это часть < batchtest> вызов, который сообщает ему, чтобы вставить результаты в этот каталог. Похоже, что оставить его просто говорит, что он придерживается результатов в «текущем каталоге», что бы это ни было. На первый взгляд я ничего не видел, чтобы все это перевернуло.


0

Try установка вилки, forkmode и нити для этих значений:

<junit fork="yes" forkmode="perTest" printsummary="off" threads="4"> 
    <classpath refid="test.classpath"/> 
    <formatter type="brief" usefile="false"/> 
    <batchtest todir="${test.results.dir}/xml"> 
     <formatter type="xml"/> 
     <fileset dir="src" includes="**/*Test.java" /> 
    </batchtest> 
</junit> 

Также см https://ant.apache.org/manual/Tasks/junit.html


0

Для меня, добавив forkmode="once" для <junit> элемента и добавление usefile="false" для <formatter> элемента делает тесты работают намного Быстрее. Также удалите форматирующие элементы, которые вам не нужны.