我们通过 Jenkins 服务器运行一组 Frank/Cucumber 测试来测试 iOS 应用程序。
测试在本地运行得很好,也可以在 jenkins 服务器上手动运行时运行。但是,在浏览 jenkins 时,我们偶尔会出现导致构建失败的错误,然后当我们再次运行 jenkins(即按"立即构建"按钮(而不更改任何内容时,这些错误可以正常工作。
我们运行以下代码来运行测试:
cucumber features/ipad --tags ~@ignore
然后,我添加了 rerun 参数以将失败的测试转储到文本文件中:
-f rerun -o rerun.txt
然后直接运行黄瓜重新运行.txt然后直接运行,所以我整个 comman 看起来像这样:
cucumber features/ipad --tags ~@ignore -f rerun -o rerun.txt; cucumber @rerun.txt
这工作正常,它会捕获失败的测试,并在其他测试后再次重新运行它们。
但是,即使重新运行通过,Jenkins 仍然将构建标记为失败。
有没有办法告诉 Cucumber 或 jenkins 忽略第一次测试运行,只将重新运行的测试标记为通过或失败?
还是有更整洁的方法可以解决这个问题?
谢谢
jenkins 脚本非常简单。当脚本失败时,即具有非零退出代码,生成将失败。
此外,如果您使用 junit 插件发布结果,请确保插件在结果中发现失败的测试时不会使您的构建失败。
但是,请尝试找到测试失败的原因。始终获取测试运行的应用程序日志,并检查其中发生的情况。如果自动测试不可靠,请使用手动测试。
此外,每当测试失败时,您可以使用黄瓜钩截取屏幕截图。当您尝试了解失败的测试时,这是一个很大的帮助。
对不起,如果我无知或不了解黄瓜的哲学,但考试失败通常是有原因的。通常,找出测试失败的原因,然后修复该问题(或测试(。
为了更直接地回答您的问题,您可以检查日志解析器插件。我的直觉告诉我,当测试用例失败时,Jenkins 正确地将作业标记为失败(或者更好的是不稳定(。
你不尝试使用groovy来获得测试结果
def getResults(){
AbstractTestResultAction testResultAction = currentBuild.rawBuild.getAction(AbstractTestResultAction.class)
def failCount = null
def failureDiffString = null
def totalCount = null
def passed = null
def passrate = null
if (testResultAction != null) {
failCount = testResultAction.failCount
totalCount = testResultAction.totalCount
passed = totalCount - failCount
passrate = (passed/totalCount*100).toInteger()
}
return passrate
}
你可以使用这样的东西:
if(getResults() >= 95){
currentBuild.result="SUCCESS"
} else {
currentBuild.result="FAILED"
throw new Exception("Pass rate lower than 95%")
}