2008-09-23 6 views
9

Я запускаю тесты junit через ant, и они работают значительно медленнее, чем через IDE. Мой муравей вызов:Ant 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 ухудшить производительность, создав новый процесс для запуска одного теста? Каков результат, когда вы его не используете? – 2008-09-23 19:13:09

+1

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

+0

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

ответ

1

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

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

+1

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

1

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

4

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

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> элемента делает тесты работают намного Быстрее. Также удалите форматирующие элементы, которые вам не нужны.