1

我们正在通过 jenkins 服务器运行一组 Frank/cucumber 测试来测试 iOS 应用程序。

测试在本地运行得很好,在 jenkins 服务器上手动运行时也是如此。但是,当通过 jenkins 时,我们偶尔会遇到导致构建失败的错误,然后当我们再次运行 jenkins(即按下“立即构建”按钮)时,它可以正常工作,而无需更改任何内容。

我们运行以下代码来运行测试:

cucumber features/ipad --tags ~@ignore

然后我添加了 rerun 参数以将失败的测试转储到文本文件中:

-f rerun -o rerun.txt

然后直接运行 cucumber rerun.txt ,所以整个命令看起来像这样:

cucumber features/ipad --tags ~@ignore -f rerun -o rerun.txt; cucumber @rerun.txt

这工作正常,它捕获失败的测试,并在其他测试之后再次重新运行它们。

然而,即使重新运行通过,詹金斯仍然将构建标记为失败。

有没有办法告诉 cucumber 或 jenkins 忽略第一次测试运行,只将重新运行的测试标记为通过或失败?

或者有没有更简洁的方法来解决这个问题?

谢谢

4

3 回答 3

4

jenkins 脚本非常简单。当脚本失败时构建失败,即具有非零退出代码。

此外,如果您使用 junit 插件发布结果,请确保插件在结果中发现测试失败时不会使您的构建失败。

但是,尝试找出测试失败的原因。始终获取测试运行的应用程序日志并检查那里发生了什么。如果自动化测试不可靠,请使用手动测试。

此外,您可以在测试失败时使用黄瓜钩子截取屏幕截图。当您试图了解失败的测试时,这将有很大帮助。

于 2013-09-26T17:31:03.277 回答
1

对不起,如果我一无所知或者只是不了解黄瓜的哲学,但失败的测试通常是有原因的。一般来说,找出你的测试失败的原因,然后解决这个问题(或你的测试)。

要更直接地回答您的问题,您可以查看Log Parser Plugin。我的直觉告诉我,当测试用例失败时,Jenkins 正确地将作业标记为失败(或者更好地标记为不稳定)。

于 2013-09-26T16:10:36.823 回答
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%")
    }
于 2017-04-10T16:08:57.417 回答