2012-02-16 47 views
7

我已经在Groovy中编写了几个XMLUnit测试(适用于JUnit框架),并且可以根据groovy doco在命令行上轻松执行它们,但我不太明白我还需要为它做些什么生成Jenkins/Hudson(或其他)需要的显示合格/不合格结果(如this)和错误详细报告(如this)所需的xml输出。 (道歉图像业主)我将如何生成适用于Jenkins/Hudson消费的Groovy测试的JUnit测试报告?

目前,我的开球脚本是这样的:

def allSuite = new TestSuite('The XSL Tests') 

//looking in package xsltests.rail.* 
allSuite.addTest(AllTestSuite.suite("xsltests/rail", "*Tests.groovy")) 

junit.textui.TestRunner.run(allSuite) 

,这会产生这样的:

Running all XSL Tests... 
.... 
Time: 4.141 

OK (4 tests) 

我怎样才能让这个创建JUnit测试报告XML适合Jenkins/Hudson阅读的文件?

我是否需要用不同的JUnit跑步者开始测试?

我看过this答案,但想避免写我自己的测试报告输出。

+1

你在使用一些测试框架吗?你用什么来建立这个项目? – 2012-02-16 14:08:20

+0

有没有反感使用像Gradle/Maven/Ant这样的构建工具? – 2012-02-19 05:10:47

+0

@Eric这是一个侧面项目,希望快速启动和运行。然而,我可能会走上学习和使用Gradle的道路,就像我在“要学习的东西”一样。 – 2012-02-19 09:06:02

回答

4

经过一点点掏腰包,我已经采取了埃里克温德林的建议,并与Gradle一起。

为此,我将groovy单元测试移到了必需的目录结构src/test/groovy /中,其中支持资源(输入和期望输出XML文件)进入/ src/test/resources /目录。

所有必需的库都在构建中进行了配置。gradle这个文件,所描述的(将其全部)在这里:

apply plugin: 'groovy' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    testCompile group: 'junit', name: 'junit', version: '4.+' 

    groovy module('org.codehaus.groovy:groovy:1.8.2') { 
     dependency('asm:asm:3.3.1') 
     dependency('antlr:antlr:2.7.7') 
     dependency('xmlunit:xmlunit:1.3') 
     dependency('xalan:serializer:2.7.1') 
     dependency('xalan:xalan:2.7.1') 
     dependency('org.bluestemsoftware.open.maven.tparty:xerces-impl:2.9.0') 
     dependency('xml-apis:xml-apis:2.0.2') 
    } 
} 

test { 
    jvmArgs '-Xms64m', '-Xmx512m', '-XX:MaxPermSize=128m' 

    testLogging.showStandardStreams = true //not sure about this one, was in official user guide 

    outputs.upToDateWhen { false } //makes it run every time even when Gradle thinks it is "Up-To-Date" 
} 

这适用Groovy插件,设置使用Maven来获取指定的依赖关系,然后增加了一些额外的价值,以内置的“测试”任务。

有一件额外的事情是让Gradle每次都运行我所有的测试,而不仅仅是它认为是新的/改变的测试,这使Jenkins可以很好地运行。

我还创建了一个gradle.properties文件通过企业代理/防火墙等,以获得:

systemProp.http.proxyHost=10.xxx.xxx.xxx 
systemProp.http.proxyPort=8080 
systemProp.http.proxyUser=username 
systemProp.http.proxyPassword=passwd 

有了这个,我创建了一个“自由风格”项目詹金斯说民调我们的Mercurial回购定期和每当任何人提交一个更新的XSL回购所有的测试将运行。

我最初的目标之一是能够生成标准的Jenkins/Hudson合格/不合格图形和JUnit报告,这是成功的:Pass/FailJUnit Reports

我希望这可以帮助其他有类似要求的人。

0

由于您要求将报告公开给Jenkins/Hudson,因此我假设您有一个Maven/Ant/etc版本可以运行。如果这是真的,解决方案很简单。

首先,Groovy和Java JUnit测试几乎没有区别。因此,您只需将Ant/Maven junit任务/插件添加到您的构建中,并让它执行Groovy junit测试(就像使用Java编写时那样)。该执行将创建测试报告。从那里,您可以简单地配置您的Hudson/Jenkins构建,以查看构建过程中创建测试报告的目录。

+0

不,我不使用像Maven或Ant这样的构建框架,它仅仅是单元测试的集合。没有构建,只有一系列的测试,希望每次启动时都有合格/不合格的计数。 – 2012-02-16 23:33:34

0

您可以编写自己的自定义RunListener(或SuiteRunListener)。它仍然需要你编写一些代码,但它比你提供了链接的脚本更清洁。如果您愿意,我可以向您发送我为JavaScript编写的用于Jasmine的JUnit记者的代码,并且您可以将它“翻译”为Groovy。

2

我发现来引导这个东西的最快方法是使用Gradle

# build.gradle 
apply plugin: 'groovy' 

task initProjectStructure() << { 
    project.sourceSets.all*.allSource.sourceTrees.srcDirs.flatten().each { dir -> 
     dir.mkdirs() 
    } 
} 

然后运行gradle initProjectStructure和移动源到src/main/groovy和测试test/main/groovy

看起来很多(真的是< 5分钟的工作),但你可以免费获得很多东西。现在您可以运行gradle test,它将运行您的测试并生成JUnit XML,您可以在项目目录中使用build/test-reports

+1

非常感谢您使用Gradle。虽然我的回答(很明显)解决了我的问题,但50点赏金是你的。 – 2012-02-24 12:47:12

+0

谢谢:) - 我想你会爱上Gradle的。 – 2012-02-24 13:58:59