2012-02-16 46 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