Как запустить автоматические Grails тесты с помощью shell scripting?

Как только у вас появились первые тесты, было бы очень неплохо запускать их скопом каждый раз, когда добавляются или изменяются ваши тесты. Все хорошо, когда вы работаете один на проекте, а если же вместе с вами работает команда автоматизаторов, которые тоже каждый день коммитят новый код?!

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

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

  • Автоматическое скачивание последней версии файлов с версионного конроля git
  • Запуск тестов c помощью grails
  • Отправка емейлов участникам команды с результатами прогона в формате JUnit

Я реализовал два скрипта, один - для запуска всех тестов и второй - для того, чтобы запускать тесты несколько раз.

run.sh

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }cd /home/polusok/Work/project/ BRANCH=$1 if [ -e $1 ]; then BRANCH="develop" fi TEST=$2 if [ -e $2 ]; then TEST="" fi #git pull origin $BRANCH git fetch --all git checkout origin/$BRANCH

grails clean
grails -Dgrails.testing.functional.baseUrl=http://localhost:8080/ -Dwebdriver.browser=firefox test-app selenium: $TEST

tar cfz …/test-report.tgz ./target/test-reports/* -v

if [ -e $2 ]; then
TEST=“all tests”
fi

mutt -e “set content_type=text/html” -s “project latest test report on $BRANCH for $TEST” -a …/test-report.tgz target/test-reports/html/alltests-fails.html target/test-reports/html/alltests-errors.html – test1@gmail.com test2@gmail.com test3@gmail.com < target/test-reports/html/overview-summary.html{/syntaxhighlighter}

run-loop.sh

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }for (( i = 0 ; i <= $3 ; i++ ))
do
cd /home/polusok/Work/project/
./run.sh $1 $2
done{/syntaxhighlighter}

И запуск тестов:

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }./run.sh develop tests.cms.test

./run-loop.sh develop tests.cms.* 10{/syntaxhighlighter}

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