Как ускорить выполнение теста Grails
При разработке приложения Grails 1.0.5 я в ужасе от того, насколько медленна команда grails test-app
. Несмотря на то, что фактические тесты занимают всего ~ 10 секунд, все выполнение сводится к
real 1m26.953s пользователь 0m53.955s sys 0m1.860s
Это включает загрузку grails, загрузку плагинов, компиляцию всего кода и т.д.
Любые подсказки о том, как ускорить выполнение grails test-app
, будут с благодарностью.
Ответы
Ответ 1
Вы можете использовать интерактивный режим, чтобы ускорить ваши тестовые прогоны.
Просто запустите
grails interactive
Затем введите
test-app
Первый раз будет таким же, как обычно, но каждый раз после этого будет значительно быстрее. В настоящее время есть некоторые проблемы с интерактивным режимом (например, исчерпание памяти после нескольких прогонов), но я все равно считаю, что это того стоит.
Ответ 2
Нет никаких жестких и быстрых правил для его ускорения, а проблемы с производительностью, которые вы видите, могут быть специфическими для вашего приложения.
Если ваш загрузочный захват занимает ~ 75 секунд, это звучит довольно долго. Я бы внимательно рассмотрел все, что у вас есть в файле Bootstrap.groovy, чтобы узнать, можно ли его уменьшить.
Есть ли у вас дополнительные плагины, которые вам могут не понадобиться (или это может привести к серьезному снижению производительности)?
Это может быть не для вас сейчас, но улучшения скорости в grails 1.1.1/ groovy 1.6.3 над grails 1.0.5/groovy 1.5.7 довольно значительны.
Еще одна вещь, которая действительно помогает мне при тестировании, заключается в том, чтобы указывать только тесты интеграции или только модульные тесты, если я работаю над тем или иным:
grails test-app -unit
grails test-app -integration
Вы также можете указать конкретный тестовый класс (без префикса "Тесты" ) для запуска одного теста, который может действительно помочь с TDD (например, для интеграции с MyServiceTests):
grails test-app -integration MyService
В grails 1.1.1 загрузочная загрузка с 5 плагинами и ~ 40 классами доменов занимает менее 20 секунд.
Ответ 3
Если вы все еще используете Groovy 1.5.x, вы могли бы сбрить несколько секунд, обновив до Groovy 1.6
Ответ 4
Теперь grails поставляется с http://grails.org/plugin/testing. это издевается над материалом домена, поэтому вы можете провести некоторое тестирование классов домена в качестве модульных тестов. они работают довольно быстро.
Ответ 5
Пожалуйста, см. мой ответ здесь. Плагин, полагающийся на плохо определенный артефакт maven, может заставить grails пойти и посмотреть каждый раз для более новой версии.
Грайлы очень медленно разрешают определенные зависимости
Ответ 6
Вы также можете параллельно запускать тесты на единицу и интеграцию - см. статью
Ответ 7
Увеличение параметров java memory/JVM может определенно ускорить процесс. Объем памяти, который вы можете дать, зависит от вашего оборудования.
Если вы используете grails из командной строки, установите переменную среды GRAILS_OPTS
. Добавьте что-то вроде ~/.bash_profile
export GRAILS_OPTS="-Xms3000M -Xmx3000M -XX:PermSize=256m -XX:MaxPermSize=512m"
Если вы используете GGTS (Eclipse), вам нужно добавить это в аргументы VM конфигурации запуска.
![GGTS vm args]()
Также есть несколько настроек JVM, которые можно изменить для увеличения скорости:
-XX:+UseCodeCacheFlushing
-XX:MaxInlineLevel=15
-noverify (turns off class validation)