Django Framework / HowTo: continuous integration Django в Jenkins с помощью Selenium

в 8:45, , рубрики: continuous integration, django, Jenkins, selenium, Ubuntu, метки: , , , ,

Это шпаргалка раскрывающая раздел «Интеграция Selenium тестов» статьи Настройка Jenkins для django проекта с нуля. А именно как запускать Selenium тесты на удалённом сервере Jenkins у которого нет монитора и форточек.

Спасибо black_bunny за статью и она прекрасно покрывает установку и настрйоку Jenkins, но у меня сломалась пара костылей пока я всё это дело объединил в работающую систему с его же django-selenium. Теперь коротко и по делу.

Для справки: тестировочный сервер у меня Ubuntu 11.10 x64 без монитора и X.org и описываемое действо выполнено именно на нём.

Установка

Ставим и настраиваем Jenkins как описано в вышеупомянутой статье.

Для запуска тестов Selenium понадобится браузер и терминал вывода для этого самого браузера.

Ставим ему терминал:

sudo apt-get install xvfb 

и сам браузер:

sudo apt-get install --no-install-recommends firefox 

Для работы тестов также потребуется пара python пакетов. Тут можно подсмотреть как автоматизировать сборку тестового окружения. Собственно я использую тот самый fab скрипт с изменённой командой запуска. Её я укажу чуть позже.

Пакеты для работы Selenium тестов (ставятся через pip install):

selenium django-selenium 
Настройка

Сам автор django-selenium рекомендует использовать свой раннер тестов для запуска под Jenkins, но так как оно описано — оно не заработало, а когда я его подправил и оно заработало, то не стало учитывать настройку PROJECT_APPS для django-jenkins, т.е. запускало абсолютно все тесты из всех пакетов, используемых в проекте. Потому я предлагаю вам свой раннер, который запускается django-jenkins, прогоняет тесты которые положено для него, после чего уже запускает исключительно selenium тесты из django-selenium:

# -*- coding: utf-8 -*- from django_jenkins.runner import CITestSuiteRunner from django_selenium.jenkins_runner import JenkinsTestRunner, SeleniumTestRunner from django.test.testcases import TestCase from django.test.simple import reorder_suite   class ProjectRunner(JenkinsTestRunner):     """     Project test runner     """      def __init__(self, **kwargs):         super(ProjectRunner, self).__init__(**kwargs)         self.selenium_only = True      def build_suite(self, test_labels, **kwargs):         suite = SeleniumTestRunner.build_suite(self, test_labels, **kwargs)         suite.addTest(CITestSuiteRunner.build_suite(self, test_labels, **kwargs))          return reorder_suite(suite, (TestCase,)) 

Положите этот код в файл test_runner.py в корне Вашего проекта (скажем проект называется «project»).

Добавьте в настройки проекта:

SELENIUM_DISPLAY = ':99' JENKINS_TEST_RUNNER = 'project.test_runner.ProjectRunner' 

Запуск

В этом месте:

image

настройку проекта Jenkins следует немного подредактировать и заменить запускающую команду на:

xvfb-run ./manage.py jenkins 

В общем нужно поместить выполнение тестов в виртуальный фреймбуфер X.org, т.е. перед началом команды запускающей тесты нужно добавить xvfb-run. В конце можете добавить список приложений, хотя это особого смысла не имеет, т.к. у нас есть работающая настройка PROJECT_APPS.
Вот и всё — удачных тестов!

Автор: qnub


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js