Бегущий нос - с охватом, чтобы получить все файлы пакета, но не другие зависимости и библиотеки
Моя папка проекта (да - я знаю, что это лучшая практика) - это что-то вроде:
.
├── app.py
├── otherscript.py
├── tests/
└── tools/
├── __init__.py
└── toolfile.py
Мне нужно nose --with-coverage
, чтобы протестировать сценарии .py
в основной папке, tools
и исключить папку tests
(хотя я действительно не забочусь об исключении этого)
Когда я запускаю базовый
nose --with-coverage
Я получаю покрытие по всем установленным зависимостям и библиотекам (колбу, запросы и т.д.)
когда я запускаю
nose --with-coverage --cover-package=folder name (or . or ./)
Я получаю покрытие для папки тестов. tools/__init__.py
и app.py
, но не для остальных скриптов:
> (opentaba-server) D:\username\pathto\opentaba-server>nosetests --with-coverage -- cover-package=./ ... Name
> Stmts Miss Cover Missing
> ----------------------------------------------------------------------- Tests\functional_tests\test_return_json 26 0 100%
> Tests\unit_test\test_createdb 0 0 100%
> Tests\unit_test\test_scrape 0 0 100% app
> 63 15 76% 22, 24, 72-81, 8 8-106, 133 tools\__init__
> 0 0 100%
> ----------------------------------------------------------------------- TOTAL 89 15 83%
> ---------------------------------------------------------------------- Ran 3 tests in 5.182s OK
Когда я запускаю с --cover-inclusive flag
. Он просто терпит неудачу:
nosetests-scripts.py: error: no such option: --with-coverage
Я буду рад за любую помощь с этим
Ответы
Ответ 1
У меня была очень похожая проблема с сгенерированным кодом. Решение заключалось в том, чтобы исключить сгенерированный код или код инструмента в ваше дело только из отчетов.
Итак, теперь мы используем nosetests для запуска наших тестов, например
nosetests --with-coverage --cover-inclusive --cover-package=$(PACKAGE)
а затем мы создаем отчеты вручную, поэтому
coverage combine
coverage report --omit 'tools/*'
Таким образом, cover.py будет охватывать ваш пакет инструментов, но они не будут отображаться в отчетах.
Ответ 2
По умолчанию тесты не будут включены в отчет о покрытии. Вы можете заставить их отображаться (на самом деле очень хорошая идея, чтобы убедиться, что ваши тесты выполнены правильно, а дублированные тесты имен игнорируются) с помощью --cover-tests
В любом случае nosetests --help
- ваш друг. Скорее всего, флаг --cover-inclusive
убивает плагин плагина и другие параметры (для плагина) становятся недоступными. Вы можете попробовать отладить его, запустив нос через pdb
.
В качестве альтернативы вы можете запускать покрытие как автономный модуль, запускающий носовые тесты.
Ответ 3
мой файл tests/nose_setup_coverage.cfg:
[nosetests]
verbosity=1
detailed-errors=1
with-coverage=1
cover-html=1
cover-html-dir=../../out/cover
#this is the line that fixed my equivalent of your issue
#by "climbing up" from tests/ but skipping python **site-packages**
cover-package=..
where=/Users/jluc/kds2/py/tests
добавление cover-package=..
(в файле cfg) и выполнение изнутри каталога тестов заставили меня охватить все мои каталоги python, но не django и другие материалы сторонних разработчиков.
Это моя структура каталогов (минус некоторые вещи, отличные от Python):
.
├── lib
├── non_app
├── ps_catalog
├── pssecurity
├── pssystem
├── static
├── static_src
├── staticfiles
├── templates
├── tests
└── websec
last, хотя он не выглядит документированным, покрытие, как выполняется из nosetests, будет выбирать и использовать файл .coveragerc в текущем (тестовом) каталоге (вы не можете передать его через командной строки или в файле cfg носа, что для плагина крышки).
В этом файле раздел пропустить позволяет вам более тонкое управление, в котором каталоги должны исключаться:
omit=/Users/jluc/kds2/env/lib/python2.7/*
*/batch/*
/Users/jluc/kds2/py/non_app/*
*/migrations/*
выполнение тестов в bash:
nosetests -c nose_setup_coverage.cfg
p.s. добавив --cover-erase
к вышесказанному, сбрасывает покрытие