我们通过jenkins服务器运行一组Frank / cucumber测试来测试iOS应用程序。
测试在本地运行正常,并且在jenkins服务器上手动运行时也是如此。然而,当经历jenkins时,我们偶尔会遇到错误导致构建失败,然后当我们再次运行jenkins(即按下“立即构建”按钮)而不改变任何内容时工作正常。
我们运行以下代码来运行测试:
cucumber features/ipad --tags ~@ignore
然后我添加了rerun参数以将失败的测试转储到文本文件中:
-f rerun -o rerun.txt
然后直接运行黄瓜rerun.txt,所以整个comman看起来像这样:
cucumber features/ipad --tags ~@ignore -f rerun -o rerun.txt; cucumber @rerun.txt
这样可以正常运行,它可以捕获失败的测试,并在其他测试后重新运行它们。
然而,即使重新运行,jenkins仍然将构建标记为失败。
有没有办法告诉黄瓜或詹金斯忽略第一次测试运行,只将重新运行测试标记为通过或失败?
或者有更简洁的方法吗?
由于
答案 0 :(得分:4)
jenkins脚本非常简单。当脚本失败时,构建失败,即具有非零退出代码。
此外,如果您使用junit插件发布结果,请确保在结果中找到测试失败时插件未失败。
但是,试着找出测试失败的原因。始终获取测试运行的应用程序日志,并检查那里发生的情况。如果自动测试不可靠,请使用手动测试。
此外,只要测试失败,您就可以使用黄瓜钩子截取屏幕截图。当你试图理解失败的测试时,这是一个很大的帮助。
答案 1 :(得分:1)
对不起,如果我无知或只是不理解黄瓜的哲学,但失败的测试通常有原因。通常,找出测试失败的原因,然后解决该问题(或测试)。
要更直接地回答您的问题,您可以查看Log Parser Plugin。我的直觉告诉我,当测试用例失败时,Jenkins正确地将作业标记为失败(或者更不稳定)。
答案 2 :(得分:0)
为什么你不尝试使用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%")
}