4

我正在使用鼻子覆盖率来生成覆盖率报告。我现在只有一个包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,coverage 会引入不必要的包,包括与我的代码无关的python电子邮件日志记录包。

如果我运行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?

4

3 回答 3

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/更有帮助。

于 2010-05-03T05:49:53.423 回答
0

你试过了吗:

coverage xml ae
于 2010-02-26T03:44:57.860 回答
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')
于 2010-03-04T05:47:49.257 回答