Тесты Ant Junit выполняются намного медленнее через ant, чем через IDE - что посмотреть? - PullRequest
9 голосов
/ 23 сентября 2008

Я запускаю свои тесты 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,067 с), занимает 4,632 с при запуске через Ant. В прошлом мне удавалось ускорить тестовые задачи, подобные этой, с помощью параметра junit fork, но, похоже, в этом случае это не помогает. Какие свойства или параметры я могу посмотреть, чтобы ускорить эти тесты?

Дополнительная информация:

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

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

Ответы [ 7 ]

4 голосов
/ 18 декабря 2008

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

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

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

4 голосов
/ 26 сентября 2008

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

1 голос
/ 24 сентября 2008

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

1 голос
/ 23 сентября 2008

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

(Ноль, что я хотел бы сделать, это убедиться, что моя задача ant использует ту же JVM, что и Eclipse, и что зависимости classpath и импортированные JAR действительно и действительно идентичны)

0 голосов
/ 17 июня 2017

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

0 голосов
/ 21 апреля 2016

Попробуйте установить для fork, forkmode и thread следующие значения:

<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 голосов
/ 27 октября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...