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

Предотвращение покрытия 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 не дал ответа (на удивление). Я не думаю, что целью освещения является тестирование уже проверенных сайтов-пакетов. Поэтому я бы исключил их из забега.

Как я могу выполнить, чтобы избежать покрытия, испытывающего мои сайты-пакеты?

4b9b3361

Ответ 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.