Как только у вас появились первые тесты, было бы очень неплохо запускать их скопом каждый раз, когда добавляются или изменяются ваши тесты. Все хорошо, когда вы работаете один на проекте, а если же вместе с вами работает команда автоматизаторов, которые тоже каждый день коммитят новый код?!
Правильным решением тут было бы поднять сервер непрерывной интеграции и запускать тесты там. Но что делать, если вы работаете удаленно и все ваши коллеги тоже работают удаленно? Даже если кто-то из команды поставит сервер непрерывной интеграции у себя на локальной машине, то он не будет доступен другим. Тогда правильным решением было бы немного раскошелиться и купить место в облаках, например в 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}
Я понимаю, что это все прекрасно можно сделать с помощью сервера непрерывной интеграции, но в любом случае, это хорошие маленькие скрипты, которые хочется сохранить.