2010-02-19 38 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