我的项目文件夹(是的 - 我知道这是最佳做法)类似于:
.
├── 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
我很乐意为此提供任何帮助
答案 0 :(得分:12)
我对生成的代码有一个非常类似的问题。解决方案是仅从报告中排除生成的代码或工具代码。
所以我们现在使用nosetests来运行我们的测试,比如
nosetests --with-coverage --cover-inclusive --cover-package=$(PACKAGE)
之后,我们手动创建报告,所以
coverage combine
coverage report --omit 'tools/*'
因此,coverage.py将涵盖您的工具包,但它们不会出现在报告中。
答案 1 :(得分:5)
我的 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's **site-packages**
cover-package=..
where=/Users/jluc/kds2/py/tests
添加cover-package=..
(在cfg文件中)并在tests目录中执行,让我覆盖了所有的python目录,但不包括django和其他第三方的东西。
这是我的目录结构(减去一些非Python的东西):
.
├── lib
├── non_app
├── ps_catalog
├── pssecurity
├── pssystem
├── static
├── static_src
├── staticfiles
├── templates
├── tests
└── websec
最后,虽然它似乎没有记录,但是从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
添加到上面,重置覆盖
答案 2 :(得分:1)
默认情况下,测试不会包含在覆盖率报告中。您可以使用--cover-tests
无论如何,nosetests --help
是你的朋友。最有可能--cover-inclusive
标记终止覆盖插件,其他选项(对于插件)变得不可用。您可以尝试通过pdb
启动鼻子来调试它。
作为替代方案,您可以将覆盖作为独立模块启动鼻子测试。