¿Cómo se genera el informe XML cobertura de un solo paquete?
-
21-09-2019 - |
Pregunta
Estoy usando nariz y Cobertura para generar informes de cobertura. Sólo tengo un paquete en este momento, ae , de modo especifico para cubrir sólo eso:
nosetests -w tests/unit --with-xunit --with-coverage --cover-package=ae
Y aquí están los resultados, los cuales se ven bien:
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
Sin embargo cuando corro coverage xml
, la cobertura tira en paquetes más de lo necesario, incluyendo Python correo electrónico y Registro paquetes que no tienen nada que ver con mi código.
Si me quedo coverage xml ae
, me sale este error:
No source for code: '/home/wraith/dev/projects/trimurti/src/ae':
[Errno 21] Is a directory: '/home/wraith/dev/projects/trimurti/src/ae'
¿Hay una manera de generar el XML para sólo el ae paquete?
Solución 2
Yo no era capaz de encontrar la respuesta a esta, por lo que estoy extracción de los elementos de los paquetes no deseados tras la transformación. Esta función toma el archivo original XML, el nombre del elemento para comprobar, su atributo para comprobar, el patrón (o lista de palabras) desea guardar, y una ruta de archivo de destino para el nuevo archivo.
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)
Para resolver mi problema, estoy llamando de esta manera:
keep('coverage.xml', 'package', 'name', 'ae|tests', 'wanted-coverage.xml')
Otros consejos
He tenido un problema similar y lo resolvió con la opción --omit
. Esto hizo que se ejecute mucho más rápido y reduce el tamaño de coverage.xml de 2MB a 70kB.
--omit=PRE1,PRE2,... Omit files when their filename path starts with one of
these prefixes.
Estoy en Mac OS X, por lo que omite la Biblioteca / / y / Aplicaciones / carpetas:
$ coverage xml --omit=/Library/,/Applications/
En otros sistemas, es posible --omit=/usr/
más útiles.
¿Usted intentó:
coverage xml ae