Domanda

sto usando Hudson per costruire continuamente un Python del progetto. Prove di unità e di lavoro di copertura del codice grande, ma questo messaggio appare nella perforazione di Cobertura rapporto di copertura per i miei file che sono non unit test:

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.

La cosa strana è che il codice sorgente per i test di unità si trovano e visualizzati. Ho cercato di copiare manualmente i file di origine per altri file .py in ~/.hudson/jobs/<projectname>/cobertura (dove i test di unità vengono copiati), ma non ha funzionato.

Qualche suggerimento?

È stato utile?

Soluzione

Questo è un inferno di un brutto hack, ma la sua l'unica cosa che ho potuto venire con per fare finalmente il lavoro ... e dopo ore di usare Google e smanettare cercando di ottenere risultati, questa è l'unica cosa che ho si avvicinò con.

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

Questa è solo relpacing l'attributo nome dei tag classe XML e aggiungendo il percorso completo ai file di origine all'inizio. Basta fare in modo di aggiornare il report XML modello Cobertura per essere coverage2.xml (se questo è dove stai di tubazioni in uscita di sed a).

Sarebbe bello se il plugin Cobertura permetterebbe di immettere il percorso di origine simile a come il plugin Violazioni fa -. Purtroppo, per quanto io sappia, non

Spero che questo aiuta!

Altri suggerimenti

Il file di report Cobertura (che a questo punto è da qualche parte in $HUDSON/jobs/foo/workspace) deve contenere qualcosa di simile al principio:

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

Ha a che? Fare i percorsi puntano al posto giusto?

Un altro punto:. Quando si dice "build più recente", significa in realtà "più recente build stabile" (vale a dire la palla stato è blu, al contrario di giallo)

Per quanto mi riguarda le altre due soluzioni non hanno funzionato stand-alone, ma una combinazione di entrambi ha fatto:

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

Questo sostituisce solo un commento inserito da coverage.py con informazioni sulla posizione di origine.

La nostra soluzione era di alterare il nostro uso del compito cobertura-report formica per includere il percorso completo alla directory di origine, piuttosto che il percorso relativo.

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

In sostanza, il pathing relativo incluse nella relazione xml cobertura attraversa fino Hudson in modo tale che il plugin Cobertura non è possibile utilizzarlo per trovare il codice sorgente. Nel nostro caso, questo era stata sintomatica delle differenze tra come Hudson fa il suo pathing per i progetti di moduli singoli e progetti multi-modulo.

Il modo "corretto" per risolvere questo problema è quello di mettere il progetto sulla PYTHONPATH e l'esecuzione del test / copertura dall'esterno repo. Dal momento che sembra che si sta utilizzando Django, --settings prova django-admin.py = myproject.settings vi permetterà di fare questo.

-. Messaggio inserito da Pete in un commento, si è trasferito a rispondere

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top