11

Estoy usando Hudson para crear continuamente un proyecto Python. Las pruebas unitarias y cobertura de código funcionan muy bien, pero este mensaje aparece cuando la perforación en el Informe Cobertura Cobertura para mis archivos que son no pruebas unitarias:Hudson "El código fuente no está disponible."

Source code is unavailable.Some possible reasons are: 

* This is not the most recent build (to save on disk space, this plugin only keeps the most recent builds source code). 
* Cobertura found the source code but did not provide enough information to locate the source code. 
* Cobertura could not find the source code, so this plugin has no hope of finding it. 

Lo extraño es que el código fuente de la unidad las pruebas se encuentran y se muestran. Traté de copiar manualmente los archivos fuente para otros archivos .py en ~/.hudson/jobs/<projectname>/cobertura (donde las pruebas de la unidad se copian), pero no funcionó.

¿Alguna sugerencia?

Respuesta

6

Esto es un hack feo pero es lo único que se me ocurre para finalmente hacer que funcione ... y después de horas de buscar en Google y piratear tratando de obtener resultados, esta es la única cosa Se me ocurrio.

coverage run manage.py test 
coverage xml 
sed 's/filename="/filename="my\/path\//g' coverage.xml > coverage2.xml 

esto es sólo relpacing el atributo de nombre de archivo de las etiquetas XML de clase y añadiendo la ruta completa de los archivos de origen por el principio. Solo asegúrese de actualizar el patrón del informe Cobertura xml para que sea coverage2.xml (si es allí donde está canalizando la salida de sed).

Sería bueno si el complemento de Cobertura le permitiera ingresar la ruta de origen de manera similar a cómo lo hace el complemento Violations; desafortunadamente, hasta donde yo sé, no es así.

Espero que esto ayude!

+0

Esto no funciona para mí, con Jenkins. Probé una ruta absoluta a mi código fuente, y eso no funciona. He leído en https://github.com/gotwarlost/istanbul/issues/50 que la ruta debe ser relativa al directorio Cobdura Jenkins espacio de trabajo. Intenté eso y relativo al directorio del espacio de trabajo, pero ninguno de los dos funcionó. ¿Alguien puede ayudar? – Mawg

6

archivo de informes sobre Cobertura (que en este momento está en algún lugar $HUDSON/jobs/foo/workspace) tiene que contener algo como esto al principio:

<sources> 
    <source>/path/to/source</source> 
    <source>/another/path</source> 
</sources> 

¿Cuenta con eso? ¿Los caminos apuntan al lugar correcto?

Otro problema: cuando dice "compilación más reciente", en realidad significa "construcción estable más reciente" (es decir, la bola de estado es azul, en lugar de amarilla).

+0

No tiene ese elemento. He añadido manualmente dentro del elemento antes del elemento , pero ningún cambio. ¿Es ese el lugar apropiado? ¿Hay una manera de contar la cobertura para incluir el elemento cuando se genera? Además, todas las construcciones son estables. –

+0

1 Es importante que esos caminos son correctos. – Johan

4

Para mí las otras dos soluciones no funcionaron autónomo, sino una combinación de ambos hicieron:

... 
coverage xml 
sed 's/<!-- Generated by coverage.py: http:\/\/nedbatchelder.com\/code\/coverage -->/<sources><source>\/path\/to\/sourcefolder<\/source><\/sources>/g' 

Esto se reemplaza un comentario introducido por coverage.py con información sobre la ubicación de origen.

1

Nuestra solución fue alterar el uso de la tarea de informe de cobertura para incluir la ruta completa al directorio de origen en lugar de la ruta relativa.

<cobertura-report format="xml" destdir="${coverage.dir}" srcdir="${basedir}/${src.dir}"/> 

Básicamente, el encauzamiento relativa incluida en el informe XML Cobertura cruza hasta Hudson tal que la Cobertura Plugin no puede utilizarlo para encontrar el código fuente. En nuestro caso, esto fue sintomático de las diferencias entre cómo Hudson hace su ruta para proyectos de módulo único y proyectos de varios módulos.

-1

La forma "correcta" de solucionar esto es poner su proyecto en PYTHONPATH y ejecutar las pruebas/cobertura desde fuera de su repositorio. Como parece que estás usando Django, django-admin.py test --settings = myproject.settings te permitirá hacer esto.

- Iniciado por Pete en un comentario, se trasladó a contestar.

Cuestiones relacionadas