Думаю ни для кого не секрет, что в 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
. Я на этом моменте очень сильно злился!