Небольшими порциями мы продолжаем развивать 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 и в настройках включаете какой проект надо тестировать. Вебхук включится автоматом.

Теперь осталось писать тесты.

Результаты выполнения приходят на почту. А на сайте или в документацию можно добавить такой баджик:

Ссылки

Дополнительные ссылки:



blog comments powered by Disqus

Support

If you like my posts, please support me on Gittip

Published

15 November 2012

In tags we trust

Fork me on GitHub