Предотвращение покрытия Python от включения пакетов сайтов виртуальной среды
Я новичок в освещении и столкнулся с какой-то странной проблемой. В моем охвате учитываются пакеты сайтов виртуальной среды.
Вот результат прогона покрытия:
coverage run test.py
....................
----------------------------------------------------------------------
Ran 20 tests in 0.060s
OK
(atcatalog)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [email protected]:~/workspace (git master) [19:58:45]
$ coverage report
Name Stmts Miss Cover
-----------------------------------------------------------------------------------------------------
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/__init__ 18 0 100%
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/_compat 38 20 47%
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/app 528 255 52%
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/blueprints 156 118 24%
.
.
.
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/urls 412 215 48%
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/utils 242 175 28%
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/wrappers 568 298 48%
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/wsgi 448 352 21%
atcatalog/__init__ 7 0 100%
atcatalog/views/__init__ 0 0 100%
atcatalog/views/publang 7 0 100%
atcatalog/views/pubtext 1 0 100%
atcatalog/views/userlang 13 0 100%
atcatalog/views/users 5 0 100%
atcatalog/views/usertext 14 0 100%
test 120 0 100%
-----------------------------------------------------------------------------------------------------
TOTAL 12530 8044 36%
(atcatalog)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [email protected]:~/workspace (git master) [19:58:55]
Вот структура моего каталога проекта, которая находится дома:
workspace/
├── README.md
├── atcatalog
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── static
│ ├── templates
│ └── views
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── publang.py
│ ├── publang.pyc
│ ├── pubtext.py
│ ├── pubtext.pyc
│ ├── userlang.py
│ ├── userlang.pyc
│ ├── users.py
│ ├── users.pyc
│ ├── usertext.py
│ └── usertext.pyc
├── requirements.txt
├── run.py
└── test.py
Сначала у меня была виртуальная среда внутри каталога проекта, и теперь она перемещалась в ~/Envs с virtualenvwrapper, но проблема не устранена.
run.py и test.py никоим образом не являются особенными, они оба импортируют приложение из atcatalog.
Я также попытался найти способы опустить каталог виртуальной среды, но google не дал ответа (на удивление).
Я не думаю, что целью освещения является тестирование уже проверенных сайтов-пакетов. Поэтому я бы исключил их из забега.
Как я могу выполнить, чтобы избежать покрытия, испытывающего мои сайты-пакеты?
Ответы
Ответ 1
Благодаря tknickman я понял: используйте
coverage run --source <path to project dir> test.py
или создать файл конфигурации .coveragerc, который находится в каталоге, в котором вы запускаете покрытие, со следующим содержимым:
[run]
source =
<path to project dir>
Это означает, что ваша виртуальная среда не установлена в каталоге проекта.
Если у вас есть виртуальная среда, установленная в каталоге проекта, вы можете использовать
coverage run --source <project path> --omit <pattern> test.py
Заметьте, что omit хочет шаблон файла, например
~/projectdir/venv/*
вместо пути.
Соответствующий .coveragerc будет выглядеть так:
[run]
source=
<path to project dir>
omit=
<path to project dir>/<name of virtual env>/*
Я все еще думаю, что, как и пакеты стандартной библиотеки, все пакеты, установленные под сайтом-пакетами, по умолчанию не должны покрываться.
Ответ 2
Попробуйте использовать py.test, а затем укажите свои параметры теста в файле setup.cfg. Сначала вам нужно будет установить pytest.
Например:
[pytest]
norecursedirs = build docs/_build *.egg .tox *.venv
python_files = tests/functional* tests/integration*
addopts =
#--verbose
--tb short
# Turn on --capture to have brief, less noisy output
# You will only see output if the test fails
# Use --capture no if you want to see it all or have problems debugging
--capture fd
# --capture no
# show extra test summary info as specified by chars (f)ailed, (E)error, (s)skipped, (x)failed, (X)passed.
- rfEsxX
--junitxml junit.xml
--cov workspace --cov-report xml --cov-report term-missing
Подробнее о настройке py.test вы можете узнать здесь: https://pytest.org/latest/customize.html
Ответ 3
Если вы используете pytest, вы можете указать эксклюзивные пути или файлы для тестирования в setup.cfg
(см. документы):
[pytest]
# a directory
testpaths = tests
# exact file(s)
python_files = tests/test1.py tests/test2.py
Похоже, если вы включите параметры python_files
и testpaths
, тогда будет использоваться только python_files
.