web-dev-qa-db-fra.com

Utiliser gtest en jenkins

J'ai réussi à exécuter mon test unitaire avec google test dans Jenkins, mais je ne sais pas comment afficher le fichier .xml généré par gtest. Il est dit que gtest satisfait le format JUnit, donc ce que j'ai défini est le suivant: 

 Screenshot

Mais il se termine avec des erreurs après un bâtiment.

Aucun fichier de rapport de test n'a été trouvé. Erreur de configuration?
L'étape de construction 'Publier le résultat du test JUnit' a modifié le résultat de la construction en ÉCHEC
Terminé: ÉCHEC

22
venus.w

La réponse de Fraser est bonne et vous avez besoin d'un traitement supplémentaire pour convertir le fichier XML gtest au format JTest approprié.

Tout d'abord, vous demandez à gtest de générer le résultat au format XML en utilisant:

mygtestapp --gtest_output=xml:gtestresults.xml

Ensuite, dans un script, vous devez ajouter des éléments supplémentaires pour signaler correctement les tests ignorés en tant que tels. Le processeur JTest de Jenkin nécessite qu'un test ignoré contienne l'élément <skipped> et pas seulement le statut "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

Si cela est exécuté sur un fichier de commandes Windows, placez l'action awk dans un fichier pour éviter les problèmes avec les guillemets. awk.progfile:

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

Et créez add dans votre fichier bat:

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

Enfin, vous pointez le processeur JTest en tant qu’étape post-génération pour lire le fichier XML converti:

# Publish JUnit Test Result Report
Test Report XMLs: gtestresults-skipped.xml
17
MattiasF

Exécutez-vous votre exécutable de test avec les indicateurs corrects (c.-à-d. --gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH])?

De la sortie --help:

--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.

8
Fraser

Votre fichier de résultats n'est pas stocké à l'emplacement correct et le plug-in Jenkins ne peut pas le trouver. Une fois vos tests exécutés et le fichier XML généré, le stockez-vous n'importe où? 

Je suggère d'essayer de le faire fonctionner en remplaçant result.xml par '*' (en supposant que c'est le seul fichier XML censé y être stocké) et si cela doit fonctionner alors commencez à travailler sur le nom de fichier correct. 

Nous avons eu le même problème dans notre configuration. S'assurer que le résultat XML généré est stocké là où le plug-in s'attend à ce que ce soit la clé. Vous pouvez déterminer la racine de l’espace de travail à partir de la configuration de votre projet. 

1
ratkok

L'erreur sur la page de configuration de Jenkins est un peu un harcèlement.

Essentiellement, le fichier XML du rapport de test n'a pas été généré par le travail de génération. Donc, vous obtenez alors cette erreur:

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

Bien sûr, l'emplacement doit être configuré correctement. Pour cela, voir ce post:

Comment configurer les rapports de test sur Jenkins CI travaillant avec grails?

Alors, comment réparer l'erreur? L'essentiel est d'étudier la sortie de la console pour vérifier si les tests ont été exécutés avec succès. Il y a des chances qu'ils ne l'aient pas fait, et c'est pourquoi l'erreur s'est produite.

Une fois que vous avez exécuté les tests avec succès, en supposant que vous avez correctement configuré l'emplacement, tout devrait bien se passer.

Vous utilisez JUnit, ce sera donc un projet Java. Au cas où cela aiderait les autres, je ferai remarquer que nous utilisions Xcode. Les tests n'étaient pas en cours.

La note suivante était enterrée dans la sortie de la console Jenkins juste au-dessus de l'erreur:

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

Revenir dans Xcode et définir l’option UnitTests de la cible Test après la construction sur YES a tout donné. Cela se trouve dans la section Unit Testing. Vous pouvez également bien sûr définir l'indicateur au niveau du projet et modifier l'objectif de la cible en "Autre", en définissant la valeur $(inherited).

1
Max MacLeod

Voici une version Windows batch pour convertir le test google-test "notRun" en junit "ignoré" via Windows batch Je sais qu'il existe des moyens plus élégants, mais celui-ci ne nécessite que Windows batch et fait le travail

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%
)
0
wuppi