Continuous Integration в django проекте

Предпосылки

Проект относительно небольшой с командой из 4 разработчиков. Хотелось процесс разработки максимально приблизить к описанному в книге Continuous Integration: Improving Software Quality and Reducing Risk Были поставлены требования:

  • юнит-тестинг
  • проверка кода на соответствие стандартам
  • автоматизированный подъем проекта на сервере для тестирования
  • быстрый прогон тестов (до 10 секунд)

Юнит-тестинг

Доктест сразу отпал (с тдд маловато общего). В юнит-тестинге сразу столкнулся со сложностью:

  • The models.py file. The test runner looks for any subclass of unittest.TestCase in this module.
  • A file called tests.py in the application directory — i.e., the directory that holds models.py. Again, the test runner looks for any subclass of unittest.TestCase in this module
отсюда

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

С базой данной проблема решалась путем замены MySql на Sqlite (: memory: — она в оперативной памяти) во время тестинга (решение отсюда).

Для того чтоб тесты лежали в отдельной директории, в этой же директории был создан файлик suite.py, в котором приблизительно в таком виде все происходит Вот две функции из кода выше:

Для моков используем PyMock — довольно таки неудобная штука, в плане своих мало информативных эрроров (иннапроприейт экшн). Вроде есть либы получше.

Проверка кода на соответствие стандартам

Для проверки кода используется утилита pep8 Внедрялось с некоторым недовольством со стороны разработчиков. Но довольно таки полезная вещь для поддержания порядка в коде.

Билд-сервер

Можно сказать, что какой там билд сервер может быть в питоне и что там билдить. Я не знаю как его назвать иначе. В моем случае это сервер с Windows, на котором стоит TeamCity. Очень удобная штука в работе, с отличным веб интерфейсом. Конфигурить очень просто и быстро. Позволяет делать Pre-tested Commit (в моем случае не очень хорошо работало). Он периодично проверяет SVN (мы его используем) на наличие изменений и запускает билд скрипт- в моем случае это обычный build.bat файл, который делает апдейт из свн, выполняет тесты и рестартует Apache, который у нас на сервере. С этого момента проект можно открывать и тестировать на билд сервере. Участники проекта, в зависимости от конфигурации оповещений узнают об успешности или провале билда.

Реалии проекта и планы

Для команды это первый проект с использованием Contineous Integration. Как и первый серьезный django проект. Дедлайн как всегда очень рядом. Вероятно, не все звенья процесса разработки близки к идеалу, но процесс есть и работает. В планах внедрить Selenium тесты, cделать автоматизированный деплой проекта в продакшн.



Комментарии

  1. Октябрь 22nd, 2008 | 7:12 пп

    А почему использовался pep8, а не pylint?

  2. Кигорв
    Октябрь 22nd, 2008 | 7:25 пп

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

  3. Октябрь 23rd, 2008 | 1:14 дп

    А что используется для управления проекта? В смысле bug tracker, wiki и так далее.

    Использую trac + bitten (плагин для continuous integration) и очень советую. Все вместе поднимается за час.
    Selenium тоже отлично интегрируется с bitten и позволяет рисовать красивые графики. Вот пример bitten’а http://bitten.edgewall.org/build/trunk

    А насчет pylint’а, то помимо того что его можно прогонять как шаг при очередном build'e, он еще отлично интегрируется в eclipse+pydev что позволяет видеть не аккуратности и ошибки еще на этапе написания кода, до помещения в SVN.

  4. Кигорв
    Октябрь 23rd, 2008 | 12:56 пп

    Очень интересно.
    Мы используем самописный баг трекер для раздачи тасок (там ничего лишнего и заточено под нас). Инфу по проекту храним в обычном вики. Трек видели, но по сравнению с нашим интранетом выглядит монстрячно.

  5. Октябрь 23rd, 2008 | 1:49 пп

    Основная штука которая привлекает это то что в trac’е можно ставит ссылки на commit’ы и тикеты взаимно и не напрягаясь.

    Если нужна помощь с поднятием и/или интеграцией — пишите, поможем:)

  6. aRt
    Ноябрь 11th, 2008 | 7:40 дп

    Интересно почитать про первый опыт на джанго)))..
    Самому прийдется скоро фактически сделать тоже самое. Учтем опыт коллег))
    Помоему bitten для trac будет в самый раз.
    Спасибо за пост!

Оставь комментарий