2009-06-02 3 views
22

При разработке приложения Grails 1.0.5 я потрясен тем, насколько медленна команда grails test-app. Несмотря на то, что фактические тесты занимают всего ~ 10 секунд, вся исполнение добавляет кКак ускорить выполнение теста Grails

реального 1m26.953s пользователя 0m53.955s SYS 0m1.860s

Это включает в Grails начальной загрузки, загрузки плагин , составление всего кода и т. д.

Любые подсказки о том, как ускорить выполнение grails test-app, были бы весьма признательны.

ответ

35

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

Просто запустите

grails interactive 

Затем введите

test-app 

В первый раз будет такой же, как обычно, но каждый раз после того, как это будет значительно быстрее. В настоящее время есть некоторые проблемы с интерактивным режимом (например, исчерпание памяти после нескольких прогонов), но я все равно считаю, что это того стоит.

+0

Блестящий! Спасибо. –

+6

Я просто рекомендую настроить ваше пространство пермгена более щедро, или вы закончите после дюжины циклов. Это то, что я использую: -XX: PermSize = 64m -XX: MaxPermSize = 512m – Kuukage

+1

Мы запускаем проект grails через Maven, в этом случае первая команда: mvn grails: exec -Dcommand = "interactive". –

1

Если вы все еще используете Groovy 1.5.x вы могли вероятно бриться несколько секунд обновление до Groovy 1.6

+0

Спасибо за ответ. Я не собираюсь делать этот шаг, так как я не уверен, что Grails 1.0.x будет работать с 1.6.x и 1.5.x. –

6

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

Если ваш бутстрапинг занимает ~ 75 секунд, это звучит довольно долго. Я бы внимательно рассмотрел все, что у вас есть в файле Bootstrap.groovy, чтобы узнать, можно ли его уменьшить.

Есть ли у вас дополнительные плагины, которые вам могут не понадобиться (или это может привести к значительному снижению производительности)?

Возможно, это не будет возможностью для вас прямо сейчас, но улучшения скорости в grails 1.1.1/groovy 1.6.3 над grails 1.0.5/groovy 1.5.7 довольно значительны.

Еще одна вещь, которая действительно помогает мне при тестировании, чтобы указать только интеграционные тесты или только юнит-тесты, если я workiing на один или другой:

grails test-app -unit 

grails test-app -integration 

Вы также можете указать конкретный класс теста (без «испытаний» префикс), чтобы запустить один тест, который может реально помочь с TDD (ех для «MyServiceTests» интеграция):

grails test-app -integration MyService 

в граалей 1.1.1, развернув с 5 плагинов и ~ классов доменов 40 занимает меньше 20 секунд.

+0

Спасибо за предложения - я бы хотел добавить, что это тоже мое медленное оборудование. Переезд на грабли 1.6.3 отсекает всего 5%. –

+1

@Robert Вы должны понимать groovy 1.6.3. –

1

Грааль теперь поставляется с http://grails.org/plugin/testing установлен. это издевается над материалом домена, поэтому вы можете провести некоторое тестирование классов домена как единиц тестов. они работают довольно быстро.

1

См. Мой ответ здесь. Плагин, полагающийся на плохо определенный артефакт maven, может заставить grails пойти и смотреть каждый раз на более новую версию.

Grails very slow to resolve certain dependencies

1

Вы можете запустить юнит и интеграционные тесты параллельно, а также - увидеть этот article

1

Увеличение Java параметры памяти/JVM может определенно ускорить процесс. Объем памяти, который вы можете дать, зависит от вашего оборудования.

Если вы используете grails из командной строки, установите переменную окружения GRAILS_OPTS. Добавить что-то вроде этого, чтобы ~/.bash_profile

export GRAILS_OPTS="-Xms3000M -Xmx3000M -XX:PermSize=256m -XX:MaxPermSize=512m" 

Если вы используете Ггц (Eclipse) вам необходимо добавить это к аргументам VM конфигурации запуска. GGTS vm args

Есть также несколько параметров виртуальной машины Java, которые могут быть изменены, чтобы увеличить скорость:

-XX:+UseCodeCacheFlushing 
-XX:MaxInlineLevel=15 
-noverify (turns off class validation) 
Смежные вопросы