Интеграция с Travis CI за 15 минут
Небольшими порциями мы продолжаем развивать formgear
, поскольку скорость не очень большая, а других дел тоже полно, то постепенно забываешь некоторые части кода. Внося изменения можно зацепить что-то, сломать обратную совместимость или просто допустить ошибку. Поэтому задача добавить тесты стала выглядеть уместной.
С тестами есть одна проблема, если они не запускаются, то в них нет никакого смысла. Вообще о тестировании я уже писал, в IT и программировании очень много bullshit'а и Карго Культа. Но тесты могут моментально стать золотыми если они будут участвовать в формировании обратной связи после каждого коммита программиста. Для того чтобы сформировать эту связь нужно средство непрерывной интеграции (continuous integration).
Для того чтобы эта интеграция работала пришлось дооформить formgear
в несколько шагов:
- Оформить как продукт, оформить
setup.py
. Эта часть уже была, потому что продукт доступен уже на pypi. - Сделать так чтобы продукт разворачивал свое окружение и устанавливал зависимости. Мы в этом продукте используем buildout.
- Сделать интеграцию с чем-то что будет тестировать, в данном случае
nose
прекрасно справляется. Особенно радует его поддержка doctest'ов. - Сделать интеграцию с каким-то средством непрерывной интеграции
- Собственно начать писать тесты
Первые два пункта были более-менее готовы, поэтому чуть подробнее об остальных.
В buildout.cfg
добавил вызов рецепта который устанавливает nose:
[buildout]
parts =
#…
test # + дополнительный пункт
[test]
recipe = pbp.recipe.noserunner
eggs =
coverage
${buildout:eggs}
working-directory = ${buildout:directory}
defaults =
--with-doctest # опция включает поиск тестов в документации в коде
Из средств публичной интеграции не так-то и сложно сделать выбор, во-первых их почти нет, во-вторых все используют сайт Travis-ci.org из-за их удобной интеграции с Github.
У них в официальной документации даются примеры использования с virtualenv, но на самом деле позволяют тестировать любые проекты, просто надо написать правильный файл с командами.
Собственно вся интеграция заняла несколько минут, добавил файл .travis.yaml
в корне проекта:
language: python
python:
- 2.7
- 3.3
install:
- python bootstrap.py #-c travis.cfg
- bin/buildout -N -t 3 #-c travis.cfg
script: bin/test
Обратите внимание как легко включить поддержку других версий python. Пока писал этот пост шутки ради включил последние версии и понял, что во-первых те пару тестов которые есть в formgear
не падают на 3.3, а во-вторых, что buildout
не запускается на 3.2.
Остальная интеграция тривиальна, вы логинитесь на сайт через Github и в настройках включаете какой проект надо тестировать. Вебхук включится автоматом.
Теперь осталось писать тесты.
Результаты выполнения приходят на почту. А на сайте или в документацию можно добавить такой баджик:
Ссылки
Дополнительные ссылки:
- Фоловьте formgear на Github, там же примеры
.travis.yml
иbuildout.cfg
- nose
- Travis-ci.org
- Buildout
- Рецепт pbp.recipe.noserunner
blog comments powered by Disqus
Support
If you like my posts, please support me on Gittip