2010-02-19 64 views
3

我使用机头覆盖范围生成覆盖率报告。我只有一个包,现在,AE,所以我设定只涵盖:如何为单个包生成coverage xml报告?

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 电子邮件日志记录与我的代码无关的软件包。

如果我跑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

我没能找到这个问题的答案,所以我处理后,剥离不必要的包装元素了。此函数接受原始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') 
-1

你尝试:

coverage xml ae 
+0

我得到以下错误:没有源代码:'/ home/matthew/dev/projects/trimurti/src/ae':[Errno 21]是一个目录:'/ home/matthew/dev/projects/trimurti/src/ae' – 2010-02-26 16:23:23

3

我有一个类似的问题,并与--omit选项解决它。这使得它运行速度更快,并将coverage.xml的大小从2MB减小到70kB。

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

我在Mac OS X,所以我省略了/库/和/应用/文件夹:

$ coverage xml --omit=/Library/,/Applications/ 

在其他系统上,你会发现--omit=/usr/更有帮助。

+0

太棒了!有没有办法做到没有完整的路径? – 2010-05-04 02:01:20

+0

您不必提供完整路径,只是绝对路径的前缀(第一部分)。如果这就是你要求的,我认为你不能使用相对路径。 – user163159 2010-05-21 06:01:38