当单元测试失败时,如何从Hudson发送电子邮件

3

我在Hudson构建后运行Selenium单元测试,并希望将其用于监视我的网站功能。

当构建成功时(这应该始终如此,因为它只包含单元测试),即使某些测试失败,Hudson也不会发送电子邮件。

使用email-ext,我可以在变得不稳定时发送电子邮件,但由于浏览器单元测试有些不稳定,我不希望在第一次失败时就发送电子邮件,而是更像连续3次失败或最近x分钟/运行的80%之类的内容。

最好根据测试名称或测试中定义的某些内容来基于规则集进行配置,以标记其为相关内容。

3个回答

1
当构建成功时(这应该总是如此,因为它只包含单元测试),即使某些测试失败,Hudson也不会发送电子邮件。
我不知道这是否是您想要修复的问题,但如果您使用参数
-Dmaven.test.failure.ignore=false

然后,如果测试失败,Hudson将使您的构建失败。

使用email-ext,当构建变得不稳定时,我可以发送电子邮件,但由于浏览器单元测试有些不稳定,因此我不希望它们在第一次失败时就发送邮件,而是更像连续3次或最近x分钟/运行的80%之类的情况。

您的单元测试是以分钟/运行为单位吗?这更像是性能测试而不是单元测试吗?如果它不是单元测试而是性能/负载测试,我们使用JMeter(Hudson有一个插件,Maven也有)取得了很好的效果,它允许我们设置何时将构建设置为不稳定或失败的百分比。


1

在不稳定/仍未稳定的构建情况下,使用脚本设置邮件内容怎么样?

在这里,您可以添加一些if条件,仅测试所需测试用例的年龄。

<%  if(build.testResultAction) {
    def rootUrl = hudson.model.Hudson.instance.rootUrl
    def jobName = build.parent.name

    def previousFailedTestCases = new HashSet()
    def currentFailedTestCase = new HashSet()

    if(build.previousBuild?.testResultAction){
        build.previousBuild.testResultAction.failedTests.each {
            previousFailedTestCases << it.simpleName +"." + it.safeName
        }
    }

    testResult.failedTests.each{tr ->
          def packageName = tr.packageName
          def className = tr.simpleName
          def testName = tr.safeName
          def displayName = className+"."+testName

          currentFailedTestCase << displayName
          def url = "$HUDSON_URL/job/$PROJECT_NAME/$BUILD_NUMBER/testReport/$packageName/$className/$testName"
          if(tr.age == 1){
            startedFailing << [displayName:displayName,url:url,age:1]
          } else{
            failing << [displayName:displayName,url:url,age:tr.age]
          }
    }

    startedPassing = previousFailedTestCases - currentFailedTestCase

    startedFailing = startedFailing.sort {it.displayName}
    failing = failing.sort {it.displayName}
    startedPassing = startedPassing.sort()
    } %>

源链接: http://techkriti.wordpress.com/2008/08/30/using-groovy-with-hudson-to-send-rich-text-email/


1

看起来你需要在Hudson中有两个任务,一个用于单元测试,另一个用于Selenium。

你希望第一个任务能够构建和运行单元测试,并让Hudson汇报单元测试结果。

在配置中的“后构建操作”下,你可以添加一个“要构建的项目”,并指定用于构建和运行Selenium以及报告结果的任务。

这样,你就可以将单元测试邮件通知的阈值设置得比Selenium结果更加严格。


我的项目只包含Selenium测试,它们直接作为Webdriver单元测试运行。 - RRZ Europe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接