Unit testing unittest失败时从hudson发送电子邮件
我在hudson构建之后运行Selenium单元测试。并想用它来监控我的网站功能 当构建成功时(应该始终如此,因为它只包含unittests),hudson不会发送电子邮件,即使某些测试失败 使用email ext,当浏览器变得不稳定时,我可以发送电子邮件,但由于浏览器单元测试有点不稳定,我不希望在第一次失败时发送电子邮件,更像是连续3次或最后x分钟/次运行的80% 最好是基于规则集的配置,该规则集基于testname或测试中定义的标记相关的东西 当构建成功时(应该始终如此,因为它只包含unittests),hudson不会发送电子邮件,即使某些测试失败 我不知道这是否是你想要解决的问题,但是如果你使用这个论点Unit testing unittest失败时从hudson发送电子邮件,unit-testing,selenium,nunit,hudson,Unit Testing,Selenium,Nunit,Hudson,我在hudson构建之后运行Selenium单元测试。并想用它来监控我的网站功能 当构建成功时(应该始终如此,因为它只包含unittests),hudson不会发送电子邮件,即使某些测试失败 使用email ext,当浏览器变得不稳定时,我可以发送电子邮件,但由于浏览器单元测试有点不稳定,我不希望在第一次失败时发送电子邮件,更像是连续3次或最后x分钟/次运行的80% 最好是基于规则集的配置,该规则集基于testname或测试中定义的标记相关的东西 当构建成功时(应该始终如此,因为它只包含unit
-Dmaven.test.failure.ignore=false
如果测试失败,Hudson将使您的构建失败
使用email ext,当浏览器变得不稳定时,我可以发送电子邮件,但由于浏览器单元测试有点不稳定,我不希望在第一次失败时发送电子邮件,更像是连续3次或最后x分钟/次运行的80%
您的单元测试是分钟/次?这更像是一个性能测试而不是一个单元测试吗?如果它不是一个单元测试,而是一个性能/负载测试,那么我们已经使用了JMeter(Hudson有一个插件,Maven也有一个插件),效果非常好,它允许我们设置%何时将构建设置为不稳定或失败 听起来你在哈德逊需要两份工作。一个用于单元测试,一个用于硒 您希望第一个作业构建和运行单元测试,并让hudson报告单元测试 在“生成后操作”下的配置中,您可以添加“要生成的项目”,并指定生成和运行selenium的作业,并报告这些结果
通过这种方式,您可以调整单元测试电子邮件的阈值,使其比selenium结果严格得多。如果仅在不稳定/仍然不稳定的构建中使用脚本来设置邮件内容如何 在这里,您可以添加一些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()
} %>
myproject只包含selenium测试,它们直接作为webdriver单元测试运行