如何为单个包生成覆盖率xml报告?

2024-07-05 10:02:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用鼻子覆盖率生成覆盖率报告。我现在只有一个包裹,ae,所以我指定只涵盖:

nosetests -w tests/unit --with-xunit --with-coverage --cover-package=ae

以下是结果,看起来不错:

^{pr2}$

但是,当我运行coverage xml时,coverage会带来更多的包,包括pythonemaillogging包,这些包与我的代码无关。在

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


Tags: devsrchome报告withcoverage覆盖率tests
3条回答

你试过:

coverage xml ae

我遇到了一个类似的问题,并用 omit选项解决了它。这使它运行得更快,并缩小了覆盖率.xml从2MB到70kB。在

 omit=PRE1,PRE2,...  Omit files when their filename path starts with one of
                      these prefixes.

我在Mac OS X上,所以省略了/Library/和/Applications/文件夹:

^{pr2}$

在其他系统上,您可能会发现 omit=/usr/更有帮助。在

我找不到这个问题的答案,所以我在处理之后将不需要的包元素剥离出来。此函数接受原始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)

为了解决我的问题,我这样称呼它:

^{pr2}$

相关问题 更多 >