我收到错误“发现测试报告,但没有一个是新的。测试运行了吗?”当试图通过电子邮件发送单元测试结果时。原因是我有一个专门的Jenkins作业,它将工件从测试作业导入到自身,并通过电子邮件发送测试结果。我这样做的原因是因为我不希望Jenkins在晚上发送所有开发人员的电子邮件:)所以我“邮寄”电子邮件发送,因为Jenkins本身不支持延迟的电子邮件通知(遗憾的是)。
但是,当“通过电子邮件发送测试结果”作业执行时,测试时间已经过了几个小时,我得到了问题标题中指定的错误。关于如何解决这个问题的任何想法?
您可以尝试将测试报告的时间戳更新为构建步骤(“执行shell脚本”)。例如。
cd path/to/test/reports
touch *.xml
在Jenkins上配置作业时,可以将以下shell命令添加到“预备步骤”部分
mvn clean test
这将清理测试
我的解决方案是删除node_modules
并在jenkins上更改node
版本(从7.1到8.4)。而已。
更新上次修改日期也可以在gradle中实现:
task jenkinsTest{
inputs.files test.outputs.files
doLast{
def timestamp = System.currentTimeMillis()
test.testResultsDir.eachFile { it.lastModified = timestamp }
}
}
build.dependsOn(jenkinsTest)
如上所述:http://www.practicalgradle.org/blog/2011/06/incremental-tests-with-jenkins/
这是Jenkinsfile(声明性管道)的更新版本:
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'
}
}
}
执行cd path / to / test / reports touch * .xml
不适合我,但运行以下命令工作:
通过控制台或通过jenkins进行mvn清洁测试。
这会生成新的测试报告。
对于反复运行的工作(每30分钟)有同样的问题。
对于这项工作,请转到配置,构建,高级,并在交换机部分添加: - stacktrace --continue --rerun-tasks
确保你已经在jenkins配置下提到了“测试报告XML”的正确路径,例如“target / surefire-reports / * .xml”没有必要触摸* .xml,因为即使测试jenkins也不会抱怨结果xml文件不会更改。
如果你使用Windows slave,你可以使用带有powershell的groovy管道阶段“触摸”结果:
powershell 'ls "junitreports\\*.*" | foreach-object { $_.LastWriteTime = Get-Date }'
如果您使用的测试报告未在该运行中被该作业修改,则会发生这种情况。
如果您正在测试已创建的文件,请在Build> Execute Shell下的jenkins job中添加以下命令
chmod -R 775 /root/.jenkins/workspace/JmeterTest/output.xml
echo " " >> /root/.jenkins/workspace/JmeterTest/output.xml
以上命令更改文件的时间戳,因此错误不会显示。
注意:要在Execute Shell中实现相同而不是上面的操作,请不要尝试使用move mv命令重命名文件等。它不起作用,对更改文件时间戳的附加和删除只能起作用。