我正在使用鼻子和覆盖率来生成报道报告。我现在只有一个包, ae ,所以我指定只涵盖:
nosetests -w tests/unit --with-xunit --with-coverage --cover-package=ae
以下是结果,看起来不错:
Name Stmts Exec Cover Missing
----------------------------------------------
ae 1 1 100%
ae.util 253 224 88% 39, 63-65, 284, 287, 362, 406
----------------------------------------------
TOTAL 263 234 88%
----------------------------------------------------------------------
Ran 68 tests in 5.292s
然而,当我运行coverage xml
时,覆盖范围会包含更多不必要的包,包括与我的代码无关的python email 和 logging 包。
如果我运行coverage xml ae
,我会收到此错误:
No source for code: '/home/wraith/dev/projects/trimurti/src/ae':
[Errno 21] Is a directory: '/home/wraith/dev/projects/trimurti/src/ae'
有没有办法只为 ae 包生成XML?
答案 0 :(得分:3)
我遇到了类似的问题,并使用--omit
选项解决了这个问题。这使得它运行得更快,并将coverage.xml的大小从2MB减少到70kB。
--omit=PRE1,PRE2,... Omit files when their filename path starts with one of
these prefixes.
我在Mac OS X上,所以省略了/ Library /和/ Applications /文件夹:
$ coverage xml --omit=/Library/,/Applications/
在其他系统上,您可能会发现--omit=/usr/
更有帮助。
答案 1 :(得分:0)
我无法找到答案,所以我在处理后剥离了不需要的包元素。此函数采用原始XML文件,要检查的元素名称,要检查的属性,要保留的模式(或单词列表)以及新文件的目标文件路径。
from lxml import etree
def keep(self, xmlfile, elem_name, attr_name, pattern, dst):
try:
rep = re.compile(pattern)
except TypeError:
# Create regex pattern if a list is given.
# TypeError: unhashable type: 'list'
rep = re.compile("|".join(pattern))
dom = etree.parse(xmlfile)
for node in dom.findall('//%s' % elem_name):
if not rep.search(node.get(attr_name)):
node.getparent().remove(node)
dom.write(dst)
为了解决我的问题,我这样称呼它:
keep('coverage.xml', 'package', 'name', 'ae|tests', 'wanted-coverage.xml')
答案 2 :(得分:-1)
你有没有尝试过:
coverage xml ae