2012-07-18 5 views
19

Ho eseguito correttamente il mio test di unità con il test di google in Jenkins, ma non so come mostrare il file .xml generato da gtest. Si dice che soddisfa GTEST formato JUnit, quindi quello che ho impostato è il seguente:Utilizzo di gtest in jenkins

Screenshot

Ma finisce con errori dopo un edificio.

No test report files were found. Configuration error?
Build step 'Publish JUnit test result report' changed build result to FAILURE
Finished: FAILURE

+1

È risultato.xml situato nella radice dell'area di lavoro? Se sfogli il tuo spazio di lavoro dovresti essere in grado di trovare il risultato.xml e il percorso esatto in cui si trova. – Arnestig

+0

@sti: ho aggiunto gli errori esatti e dov'è la radice dello spazio di lavoro di Jenkins? –

risposta

7

sono in esecuzione l'eseguibile di prova con le bandiere giuste (cioè --gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH])?

Dal --help uscita:

--gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH] Generate an XML report in the given directory or with the given file name. FILE_PATH defaults to test_details.xml.

1

L'errore nella pagina di configurazione Jenkins è un po 'di una falsa pista.

In sostanza, ciò che sta accadendo è che il file di report di test xml non è stato generato dal lavoro di compilazione. Quindi, è quindi ottenere questo errore:

Recording test results 
No test report files were found. Configuration error? 

Naturalmente, la posizione deve essere configurato correttamente. Per questo, vedi questo post:

How to configure test-reports on Jenkins CI working with grails?

Quindi, come per correggere l'errore? La chiave è studiare l'output della console per verificare se i test sono stati eseguiti correttamente. È probabile che non l'abbiano fatto, ed è per questo che è successo l'errore.

Una volta che i test sono stati eseguiti correttamente, supponendo di aver configurato correttamente la posizione, si dovrebbe essere ok.

Si sta utilizzando JUnit in modo che sia un progetto Java. Noterò qui nel caso in cui possa aiutare gli altri, che stessimo eseguendo Xcode. I test non venivano eseguiti.

Sepolto nella Jenkins output della console appena sopra l'errore è stato questa nota:

note: RunUnitTests exited without running tests because TEST_AFTER_BUILD was set to NO. 

Popping di nuovo in Xcode, e l'impostazione test del UnitTests del bersaglio dopo la generazione bandiera YES ha fatto il trucco. Questo è sotto la sezione Test unitario. Ovviamente puoi anche impostare la bandiera a livello di progetto e cambiare la destinazione su "Altro", impostando il valore $(inherited).

1

Il file dei risultati non è memorizzato nella posizione corretta e il plug-in Jenkins non riesce a trovarlo. Dopo aver eseguito i test e generato il file XML, lo memorizzi ovunque?

Suggerisco di farlo funzionare sostituendo result.xml con '*' (supponendo che questo sia l'unico file XML che dovrebbe essere memorizzato lì) e se questo sta per funzionare, quindi iniziare a lavorare sul nome corretto del file.

Abbiamo riscontrato lo stesso problema nella nostra configurazione. Assicurandosi che il risultato generato XML è memorizzato dove il plugin si aspetta che fosse la chiave. È possibile determinare la radice dello spazio di lavoro dalla configurazione del progetto.

15

La risposta di Fraser è buona ed è necessario un ulteriore processo per convertire il codice XML gtest nel formato JTest corretto.

In primo luogo si chiede GTEST e visualizza il risultato in XML utilizzando:

mygtestapp --gtest_output=xml:gtestresults.xml 

Poi in uno script è necessario aggiungere elementi in più per correttamente bandiera saltato i test in quanto tali. processore Jtest di Jenkin richiede che un test saltato contiene il <saltato> elemento e non solo lo stato di impostazione a "NotRun":

awk '{ if ($1 == "<testcase" && match($0, "notrun")) print substr($0,0,length($0)-2) "><skipped/></testcase>"; else print $0;}' gtestresults.xml > gtestresults-skipped.xml 
mv gtestresults.xml gtestresults.off 

Se l'esecuzione di questo su un file batch Windows, mettere l'azione awk all'interno di un file per evitare problemi con le virgolette. awk.progfile:

{ if ($1 == "<testcase" && match($0, "notrun")) print substr($0,0,length($0)-2) "><skipped/></testcase>"; else print $0;} 

E creare aggiungere nel file bat:

awk -f awk.progfile gtestresults.xml > gtestresults-skipped.xml 

Infine si punta il processore jtest come un post-generazione passo per leggere il codice XML convertito:

# Publish JUnit Test Result Report 
Test Report XMLs: gtestresults-skipped.xml 
+0

Ora è anche possibile analizzare l'output di googletest con il plugin xUnit, opzione "googletest 1.6". Sembra che possa gestire test disabilitati senza la magia di 'awk', e funziona correttamente anche con googletest 1.7. – avtomaton

0

Ecco una versione batch di Windows per convertire il test di google "notRun" in junit "saltato" via batch di Windows. So che ci sono modi più eleganti, ma questo richiede solo Windows batch e fa il lavoro

rem convert gtest xml to junit compatible format (replace notRun by skipped) 
IF EXIST %INTEXTFILE% (
    IF EXIST %OUTTEXTFILE% (
     del %OUTTEXTFILE% 
     waitfor fileSystemToDoItsStuff /t 1 
    ) 
    FOR /f "tokens=1,* delims=¶" %%A IN ('"type %INTEXTFILE%"') DO (
     ECHO."%%A" | findstr /C:"DISABLED_">nul & IF ERRORLEVEL 1 (
      SET modified=%%A 
     ) ELSE (
      SET string=%%A 
      SET modified=!string:/^>=^>^<skipped /^>^</testcase^>! 
     ) 
     ECHO !modified!>> %OUTTEXTFILE% 
    ) 
    del %INTEXTFILE% 
    waitfor fileSystemToDoItsStuff /t 1 
    move %OUTTEXTFILE% %INTEXTFILE% 
)