27 января 2012 г.

Пару заметок о coverage, nosetests и lettuce

Думаю ни для кого не секрет, что в nosetests уже есть встроенная поддержка coverage, однако там нет очень важной фичи coverage, а именно возможности дополнять файл данных после каждого следующего запуска тестов (опция -a --append в coverage run).

Зачем это может понадобится? Самый простой пример: если в проекте есть и юнит тесты, и интеграционные, и не дай бог тесты, работающие с реальными данными :) Т.е. если мы запускаем все тесты перед деплоем не просто nosetests ..., а связкой из nosetests ... && nosetests ... && nosetests ..., в таком случае добавление --with-coverage в каждую итерацию nosetests даст нам три совсем ненужных таблицы покрытия, где каждая таблица будет отличаться от предыдущей и смерджить их воедино не выйдет - а это совсем не то, что нам надо.

Что делать? На самом деле ничего сложного, просто меняем:

$ nosetests --with-coverage ... && \
  nosetests --with-coverage ... && \
  nosetests --with-coverage ...

на:

$ coverage run `which nosetests` ... && \
  coverage run -a `which nosetests` ... && \
  coverage run -a `which nosetests` ... && \
  coverage report -m

В итоге получим то, чего добивались, а именно таблицу покрытия кода всеми тестами.

И да, раз уже заговорили про coverage, вы не забываете про использование .coveragerc? Очень полезная вещь!

Так что теперь, если в проекте используются и lettuce, и nosetests - посчитать покрытие кода не составит особого труда, используя coverage run `which lettuce` ... && coverage run -a `which nosetests` ...

И последнее на сегодня, при запуске lettuce тестов, не забывайте указывать путь не к директории, в которой есть features, а к самой директории features. Я на этом моменте очень сильно злился!

blog comments powered by Disqus