Je reçois le message d'erreur "Des rapports de test ont été trouvés, mais aucun n'est nouveau. Des tests ont-ils été exécutés?" lorsque vous essayez d'envoyer des résultats de tests unitaires par courrier électronique. La raison en est que j'ai un travail Jenkins dédié qui importe les artefacts d'un travail de test sur lui-même et envoie les résultats du test par courrier électronique. La raison pour laquelle je le fais est que je ne veux pas que Jenkins envoie à tous les développeurs un courrier électronique au cours de la nuit :) je suis donc en train de "post-poning" l'envoi de courrier électronique puisque Jenkins lui-même ne prend pas en charge les notifications de courrier électronique retardé (malheureusement).
Cependant, au moment où le travail "envoyer les résultats du test par courrier électronique" est exécuté, les tests ont déjà pris plusieurs heures et le message d'erreur indiqué dans le titre de la question s'affiche. Des idées sur la façon de contourner ce problème?
Vous pouvez essayer de mettre à jour les horodatages des rapports de test en tant qu'étape de construction ("script d'exécution"). Par exemple.
cd path/to/test/reports
touch *.xml
La mise à jour de la dernière date de modification peut également être réalisée en dégradé même:
task jenkinsTest{
inputs.files test.outputs.files
doLast{
def timestamp = System.currentTimeMillis()
test.testResultsDir.eachFile { it.lastModified = timestamp }
}
}
build.dependsOn(jenkinsTest)
Comme mentionné ici: http://www.practicalgradle.org/blog/2011/06/incremental-tests-with-jenkins/
Exécutez cd path/to/test/reports touch * .xml
ne fonctionne pas pour moi, mais exécutez la commande suivante:
mvn clean test via la console ou via jenkins.
Cela génère de nouveaux rapports de tests.
Avait le même problème pour les travaux exécutés à plusieurs reprises (toutes les 30 minutes).
Pour le travail, allez dans Configurer, Construire, Avancé et dans la section Commutateurs, ajoutez:
Voici une version mise à jour pour Jenkinsfile (Declarative Pipeline):
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'make build'
}
}
stage('Test') {
steps {
sh 'make test'
script {
def testResults = findFiles(glob: 'build/reports/**/*.xml')
for(xml in testResults) {
touch xml.getPath()
}
}
}
}
}
post {
always {
archiveArtifacts artifacts: 'build/libs/**/*.jar', fingerprint: true
junit 'build/reports/**/*.xml'
}
}
}
vous pouvez ajouter la commande Shell suivante à votre section "Pre Steps" lorsque vous configurez votre travail sur Jenkins
mvn clean test
cela va nettoyer le test
Pour moi, des commandes comme chmod -R 775 test-results.xml
ou touch test-results.xml
ne fonctionnent pas en raison d'une erreur d'autorisation. Pour contourner le problème, vous devez définir un nouveau fichier dans les paramètres du rapport de test et commander de copier l’ancien fichier de rapport xml dans un nouveau fichier.
si vous utilisez l'esclave Windows, vous pouvez «toucher» les résultats en utilisant un pipeline groovy avec powershell
powershell 'ls "junitreports\\*.*" | foreach-object { $_.LastWriteTime = Get-Date }'
Assurez-vous que vous avez mentionné le chemin correct contre "Test report XMLs" dans la configuration de Jenkins, tel que "target/surefire-reports/*. Xml" Il n'est pas nécessaire de toucher * .xml car Jenkins ne se plaindra pas. bien que le fichier xml des résultats des tests ne change pas.
La solution pour moi était de supprimer node_modules
et de changer la version node
(de 7.1 à 8.4) sur Jenkins. C'est tout.
Cela se produit si vous utilisez un rapport de test qui n'est pas modifié par ce travail lors de cette exécution.
Si vous testez avec un fichier déjà créé, ajoutez la commande ci-dessous dans le travail jenkins sous Build> Execute Shell.
chmod -R 775 /root/.jenkins/workspace/JmeterTest/output.xml
echo " " >> /root/.jenkins/workspace/JmeterTest/output.xml
La commande ci-dessus change l'horodatage du fichier et l'erreur ne s'affichera donc pas.
Remarque: Pour obtenir la même chose dans Exécutez Shell au lieu de ci-dessus, n'essayez pas de renommer le fichier en utilisant move mv command etc. travaux.