Подтвердить что ты не робот

Бегущий нос - с охватом, чтобы получить все файлы пакета, но не другие зависимости и библиотеки

Моя папка проекта (да - я знаю, что это лучшая практика) - это что-то вроде:

.
├── 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

Я буду рад за любую помощь с этим

4b9b3361

Ответ 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 к вышесказанному, сбрасывает покрытие