Как создать отчет о покрытии в формате xml для одного пакета? - PullRequest
3 голосов
/ 19 февраля 2010

Я использую нос и покрытие для создания отчетов о покрытии. У меня сейчас только одна посылка, 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'

Есть ли способ сгенерировать XML только для пакета ae ?

Ответы [ 3 ]

3 голосов
/ 03 мая 2010

У меня была похожая проблема, и я решил ее с помощью опции --omit. Это позволило ему работать намного быстрее и уменьшило размер cover.xml с 2 МБ до 70 КБ.

--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/ более полезными.

0 голосов
/ 04 марта 2010

Мне не удалось найти ответ на этот вопрос, поэтому я удаляю ненужные элементы пакета после обработки.Эта функция берет исходный файл 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')
0 голосов
/ 26 февраля 2010

Вы пробовали:

coverage xml ae
...