防止python覆盖范围包括虚拟环境站点包

防止python覆盖范围包括虚拟环境站点包,python,testing,virtualenv,code-coverage,python-coverage,Python,Testing,Virtualenv,Code Coverage,Python Coverage,我是新来的,遇到了一个奇怪的问题。我的报道将我的虚拟环境网站包考虑在内。 以下是覆盖率运行的输出: coverage run test.py .................... ---------------------------------------------------------------------- Ran 20 tests in 0.060s OK (atcatalog)- - - - - - - - - - - - - - - - - - - - - - - - -

我是新来的,遇到了一个奇怪的问题。我的报道将我的虚拟环境网站包考虑在内。 以下是覆盖率运行的输出:

coverage run test.py
....................
----------------------------------------------------------------------
Ran 20 tests in 0.060s

OK
(atcatalog)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -jmfrank63@fullstack-audio-text-catalog:~/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)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -jmfrank63@fullstack-audio-text-catalog:~/workspace (git master)       [19:58:55]
以下是我的项目目录的结构,它位于home下:

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
起初,我将虚拟环境放在项目目录中,现在使用VirtualEnvRapper将其移动到~/Envs,但问题仍然存在。 run.py和test.py在任何方面都不特殊,它们都从atcatalog导入应用程序。 我还试图找到省略虚拟环境目录的方法,但谷歌没有给出答案(令人惊讶)。 我不认为覆盖的目的是测试已经经过良好测试的站点包。所以我会把他们排除在外

如何避免测试我的站点软件包的覆盖率?

尝试在setup.cfg文件中使用并指定测试选项。您需要先pip安装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的更多信息:

多亏了我的理解:使用任意一种

coverage run --source <path to project dir> test.py
而不是路径

相应的.coveragerc如下所示:

[run]
source=
    <path to project dir>
omit=
    <path to project dir>/<name of virtual env>/*
[运行]
来源=
省略=
//*

我仍然认为,与标准库的包一样,默认情况下不应包括在站点包下安装的任何包。

如果使用pytest,您可以在
setup.cfg
()中指定要测试的独占路径或文件:


如果包含
python\u文件
testpath
参数,则只会使用
python\u文件

我会尝试使用py.test和coverage。当然,这是切换到不同测试框架的一个选项。但这并不能解释这里出了什么问题。没有任何教程显示这种行为。没有其他人有这个问题的记录。我可能做错了什么蠢事。当你移动虚拟环境时,你删除了旧的吗?工作区中ls-a的结果是什么/是旧的被删除。我还删除了.coverage文件。另外,输出显示coverage正在使用我的新虚拟环境,该环境明显位于我的项目目录之外。您对此进行了阅读吗?Hello@JohannesMariaFrank,我有一个包含python文件的文件夹,里面是venv-我正在尝试运行它,但我不知道该放什么,或者因为我正在该文件夹中运行它,文件在哪里-因此对我来说没有任何效果,如果我创建.coveragerc文件-我仍然不知道该放什么-我应该放吗“”-像空字符串还是空字符串?谢谢@Radek绝对路径应该很好,事实上,
~/projectdir/venv
是一个绝对路径,~resolves to
/home/Radek
C:\Users\Radek
。我已经像你说的那样做了@JohannesMariaFrank,得到了这个错误:在“/[path to my directory]中找不到“.main”模块/venv/include'Hi@Radek听起来像btw,如果你的
.coveragerc
文件在同一个位置,那么在你的
.coverage.py中执行
源=。
省略=。/venv/*
文件测试路径=测试-测试是一个文件夹吗?这个答案与最初的问题没有任何关系,这个问题是关于coverage.py而不是py.test的。
coverage run --source <project path> --omit <pattern> test.py
~/projectdir/venv/*
[run]
source=
    <path to project dir>
omit=
    <path to project dir>/<name of virtual env>/*
[pytest]
# a directory
testpaths = tests

# exact file(s)
python_files = tests/test1.py tests/test2.py