2016-10-07 112 views
9

我剛開始與詹金斯如何訪問JUnit測試計數詹金斯管道項目

我的自由泳項目中使用的鬆弛報告JUnit測試結果類似這樣的

MyJenkinsFreestyle - #79 Unstable after 4 min 59 sec (Open) 
Test Status: 
    Passed: 2482, Failed: 13, Skipped: 62 

現在我已經搬到同來管道工程,一切都只是鬆弛的通知好沒有測試狀態

done MyPipelineProject #68 UNSTABLE 

我明白我必須構造要發送的消息懈怠,一d我現在已經完成了上述工作。

唯一的問題是我怎麼讀取測試狀態 - 通過計數,計數不合格等 這就是所謂的「測試摘要」中詹金斯鬆弛插件commit,這裏是截圖 testsummaryimage

那麼,如何在Jenkins Pipeline項目中訪問Junit測試計數/細節? - 以便通知中報告這些信息。

更新: 在Freestyle項目中,Slack通知本身具有「測試摘要」,並且沒有選項可以選擇(或不選擇)測試摘要。

在Pipeline項目中,「發佈JUnit測試結果」的「junit」命令在發送Slack通知之前。

因此,在這些代碼行是這樣的(這是最後階段的最後幾行):

bat runtests.bat 
junit 'junitreport/xml/TEST*.xml' 
slackSend channel: '#testschannel', color: 'normal', message: "done ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)"; 
+0

它是如何工作在舊的FreeStyle作業中:DId Slack通知構建插件爲您構建測試摘要?如果是這樣,在發送Slack通知之前是否運行了「發佈JUnit測試結果」? – izzekil

回答

12

從CloudBees的的this presentation我發現,它應該通過「建」的對象是可能的。 它有一個像

def testResult = build.testResultAction 
def total = testResult.totalCount 

代碼,但currentBuild並不testResultAction提供接入。

因此不斷搜索,發現這個職位"react on failed tests in pipeline script"。 有羅伯特·桑德爾給"pro tip"

臨提示,需要一定的「自定義白名單」:

AbstractTestResultAction testResultAction = currentBuild.rawBuild.getAction(AbstractTestResultAction.class) 
if (testResultAction != null) { 
    echo "Tests: ${testResultAction.failCount}/${testResultAction.failureDiffString} failures of ${testResultAction.totalCount}.\n\n" 
} 

這工作就像一個魅力 - 只是,我不得不取消「Groovy的沙箱」複選框。 現在我有這些在構建日誌

Tests: 11/±0 failures of 2624 

現在我會用這個準備串在農閒通知與測試結果。


UPDATE:

最後,我用得到像下面這樣 輸出功能(測試失敗後,請注意「失敗差異」是非常有用的)

Test Status: 
    Passed: 2628, Failed: 6/±0, Skipped: 0 

是以下:

import hudson.tasks.test.AbstractTestResultAction 

@NonCPS 
def testStatuses() { 
    def testStatus = "" 
    AbstractTestResultAction testResultAction = currentBuild.rawBuild.getAction(AbstractTestResultAction.class) 
    if (testResultAction != null) { 
     def total = testResultAction.totalCount 
     def failed = testResultAction.failCount 
     def skipped = testResultAction.skipCount 
     def passed = total - failed - skipped 
     testStatus = "Test Status:\n Passed: ${passed}, Failed: ${failed} ${testResultAction.failureDiffString}, Skipped: ${skipped}" 

     if (failed == 0) { 
      currentBuild.result = 'SUCCESS' 
     } 
    } 
    return testStatus 
} 
6

要擴展@ vikramsjn的答案,這裏是我用來得到Ë測試總結我Jenkinsfile

import hudson.tasks.test.AbstractTestResultAction 
import hudson.model.Actionable 

@NonCPS 
def getTestSummary = { -> 
    def testResultAction = currentBuild.rawBuild.getAction(AbstractTestResultAction.class) 
    def summary = "" 

    if (testResultAction != null) { 
     def total = testResultAction.getTotalCount() 
     def failed = testResultAction.getFailCount() 
     def skipped = testResultAction.getSkipCount() 

     summary = "Test results:\n\t" 
     summary = summary + ("Passed: " + (total - failed - skipped)) 
     summary = summary + (", Failed: " + failed) 
     summary = summary + (", Skipped: " + skipped) 
    } else { 
     summary = "No tests found" 
    } 
    return summary 
} 

然後我用這個方法來實例化我testSummary變量:

def testSummary = getTestSummary() 

這將返回類似於:

"Test results: 
    Passed: 123, Failed: 0, Skipped: 0" 
+0

謝謝。你的帖子提醒我也發佈我的功能......還有一點 - failureDiffString – vikramsjn