Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing unittest失败时从hudson发送电子邮件_Unit Testing_Selenium_Nunit_Hudson - Fatal编程技术网

Unit testing unittest失败时从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

我在hudson构建之后运行Selenium单元测试。并想用它来监控我的网站功能

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

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

最好是基于规则集的配置,该规则集基于testname或测试中定义的标记相关的东西

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

我不知道这是否是你想要解决的问题,但是如果你使用这个论点

-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单元测试运行