2016-10-07 3 views
9

Я только начал с ДженкинсКак получить доступ к пунктам тестирования JUnit в проекте Дженкинс Pipeline

Мой фристайл проект используется для отчета 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

Итак, как мне получить доступ к списку/деталям Junit тестов в проекте Jenkins Pipeline? - чтобы они сообщались в уведомлениях.

UPDATE: В проекте Freestyle само уведомление о слаге имеет «итоговую сводку теста», и нет возможности выбрать (или нет) для сводки теста.

В проекте 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 создает сводку тестов для вас? Если да, выполнили ли вы «Опубликовать результаты теста JUnit» перед отправкой уведомления Slack? – izzekil

ответ

12

От this presentation из Cloudbees я обнаружил, что это должно быть возможно через «построить» объект. имеет код, как

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

Но currentBuild не обеспечивает доступ к testResultAction.

Так что продолжал поиск и нашел этот пост "react on failed tests in pipeline script". Там Роберт Sandell дал "pro tip"

Pro наконечник, требует «пользовательского белого списка»:

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

 Смежные вопросы

  • Нет связанных вопросов^_^