2015-10-16 91 views
1

我想获得一些在詹金斯运行的片状测试的可见性。詹金斯,Junit和片状测试处理程序插件

为了做到这一点,我安装了https://wiki.jenkins-ci.org/display/JENKINS/Flaky+Test+Handler+Plugin这似乎有这个目的。

所有的插件页面中指定的要求,被我安装(詹金斯版本,Junit的插件,等...)

满足安装该插件后后,建议

check on “Publish JUnit flaky test reports” under “Additional test report features.

和他们的屏幕截图显示

enter image description here

Maven项目的conf iguration不给我指定测试报告个XML的选项,看起来像这个:

enter image description here

虽然,当我运行詹金斯构建配置的项目,我得到的是一个空表:

enter image description here

项目配置的构建部分使用-Dsurefire.rerunFailingTestsCount=3选项。

我有点困惑,插件是不是与我的詹金斯安装行为或我失去了一些东西。

编辑:我一直试图版本1.0.3包含在其中一个答案提及该修补程序,并在作业执行我得到以下错误的末尾:

ERROR: Publisher 'Publish JUnit test result report' aborted due to exception: 
java.io.IOException: Unable to serialize [email protected]e9 
    at hudson.remoting.UserRequest.serialize(UserRequest.java:169) 
    at hudson.remoting.UserRequest.perform(UserRequest.java:129) 
    at hudson.remoting.UserRequest.perform(UserRequest.java:49) 
    at hudson.remoting.Request$2.run(Request.java:326) 
    at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
    at ......remote call to some.slave.com(Native Method) 
    at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1413) 
    at hudson.remoting.UserResponse.retrieve(UserRequest.java:221) 
    at hudson.remoting.Channel.call(Channel.java:778) 
    at com.google.jenkins.flakyTestHandler.plugin.JUnitFlakyTestDataPublisher.getTestData(JUnitFlakyTestDataPublisher.java:49) 
    at hudson.tasks.junit.TestDataPublisher.contributeTestData(TestDataPublisher.java:62) 
    at hudson.tasks.junit.JUnitResultArchiver.perform(JUnitResultArchiver.java:166) 
    at hudson.tasks.BuildStepCompatibilityLayer.perform(BuildStepCompatibilityLayer.java:75) 
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:779) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:726) 
    at hudson.model.Build$BuildExecution.post2(Build.java:185) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:671) 
    at hudson.model.Run.execute(Run.java:1766) 
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) 
    at hudson.model.ResourceController.execute(ResourceController.java:98) 
    at hudson.model.Executor.run(Executor.java:408) 
Caused by: java.io.NotSerializableException: com.google.jenkins.flakyTestHandler.junit.FlakyCaseResult$FlakyRunInformation 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) 
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
    at java.util.ArrayList.writeObject(ArrayList.java:762) 
    at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
    at java.util.ArrayList.writeObject(ArrayList.java:762) 
    at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
    at java.util.ArrayList.writeObject(ArrayList.java:762) 
    at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
    at hudson.remoting.UserRequest._serialize(UserRequest.java:158) 
    at hudson.remoting.UserRequest.serialize(UserRequest.java:167) 
    at hudson.remoting.UserRequest.perform(UserRequest.java:129) 
    at hudson.remoting.UserRequest.perform(UserRequest.java:49) 
    at hudson.remoting.Request$2.run(Request.java:326) 
    at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

这似乎只发生在从机上执行作业时,似乎在主机上正常工作。

编辑2:1.0.4修正了上面的问题。

编辑3:尽管1.0.4固定的序列化问题,该插件报告似乎仍然被打破。在下列情况下,例如:

wrong reporting

  • 工作#21成功运行
  • 工作#22跑去,有一个片状的测试,其中在第二次运行
  • 工作#23成功运行通过

该项目的报告是说有一个薄片测试,一个片状,0失败和0通过。我期望2次传球,0次失败和1次失误。

我错过了什么吗?

回答

2

我有同样的问题。看着主日志,事实证明,该插件不希望构建在从服务器上执行。这里面有修复该问题,我拉的请求 - https://github.com/jenkinsci/flaky-test-handler-plugin/pull/2

+0

可以请你在这里把解决方案“在修订汇总统计测试”? – manetsus

+0

@bezda,我一直在尝试1.0.3,其中应包括您的拉取请求,现在我得到一个新的错误,在我原来的帖子的底部描述。任何想法可能是由什么造成的? – supercalifragilistichespirali

+0

@bezda,1.0.4修复了问题 – supercalifragilistichespirali

2

如果我没有记错,我们定义了一个片状的测试是:

对于相同的代码版本,它既失败并传递。因此,如果你从不修改代码,即使你运行了100次,结果是50次通过和50次失败,我们仍然把它算作一个片断;如果它全部通过100次,那么它算作一次通过;否则如果全部失败100次,那就是一次失败。

如果您进行了一些更改并提交了另一个版本,然后再进行构建,那么它将会是一个新数字。

我相信如果你点击测试,那么你可以看到详细的通过/失败,这是你想要的?

看到https://wiki.jenkins-ci.org/display/JENKINS/Flaky+Test+Handler+Plugin

+0

感谢您的解释。 – supercalifragilistichespirali