2016-10-07 17 views
9

Tôi vừa bắt đầu với JenkinsLàm thế nào để truy cập đếm thử nghiệm Junit trong dự án Jenkins Pipeline

dự án tự do của tôi sử dụng để báo cáo kiểm tra JUnit kết quả trong Slack như thế này

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

Bây giờ tôi đã di chuyển cùng dự án đường ống dẫn và tất cả đều tốt, ngoại trừ thông báo Slack không có Trạng thái thử nghiệm

done MyPipelineProject #68 UNSTABLE 

Tôi hiểu rằng tôi phải tạo thông điệp để gửi tới Slack, một d Tôi đã làm điều đó ở trên bây giờ.

Vấn đề duy nhất là làm thế nào để đọc trạng thái thử nghiệm - số lượng trôi qua, đếm thất bại, vv này được gọi là "Tóm tắt thử nghiệm" trong Jenkins chùng-plugin commit, và đây là ảnh chụp màn hình testsummaryimage

Vậy làm thế nào để tôi truy cập vào các bài kiểm tra Junit đếm/chi tiết trong dự án Đường ống Jenkins? - để chúng được báo cáo trong thông báo.

CẬP NHẬT: Trong dự án Tự do, bản thân thông báo Slack có "tóm tắt thử nghiệm" và không có tùy chọn để chọn (hoặc không) cho bản tóm tắt thử nghiệm.

Trong dự án Đường ống, lệnh "junit" của tôi để "Xuất bản kết quả kiểm tra JUnit" trước khi gửi thông báo Slack.

Vì vậy, trong mã những dòng giống như thế này (đây là dòng cuối cùng của giai đoạn cuối cùng):

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

Làm thế nào nó hoạt động trong công việc FreeStyle cũ: DId plugin xây dựng thông báo Slack xây dựng bản tóm tắt thử nghiệm cho bạn? Nếu vậy, bạn có chạy "Xuất bản kết quả kiểm tra JUnit" trước khi gửi thông báo Slack không? – izzekil

Trả lời

12

Từ this presentation của Cloudbees tôi thấy rằng chúng ta có thể thông qua đối tượng "xây dựng". Mã có mã như

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

Nhưng currentBuild không cung cấp quyền truy cập vào testResultAction.

Vì vậy, hãy tiếp tục tìm kiếm và tìm thấy bài đăng này "react on failed tests in pipeline script". Có Robert Sandell đã cho "pro tip"

Pro tip, đòi hỏi một số "danh sách trắng tùy chỉnh":

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

này làm việc như một nét duyên dáng - Chỉ là tôi đã phải bỏ chọn "sandbox Groovy" hộp kiểm. Hiện tại, tôi có các thông tin này trong nhật ký dựng

Tests: 11/±0 failures of 2624 

Bây giờ tôi sẽ sử dụng điều này để chuẩn bị chuỗi thông báo khi không có kết quả kiểm tra.


UPDATE:

Cuối cùng, hàm tôi đã sử dụng để có được sản lượng như sau (Lưu ý "diff thất bại" sau khi thử nghiệm thất bại là rất hữu ích)

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

là như sau :

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

Để mở rộng câu trả lời của @ vikramsjn, dưới đây là những gì tôi sử dụng để tóm tắt kiểm tra e trong tôi 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 
} 

sau đó tôi sử dụng phương pháp này để nhanh chóng testSummary biến tôi:

def testSummary = getTestSummary() 

này sẽ trở lại một cái gì đó tương tự như:

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

Cảm ơn. Bài đăng của bạn nhắc tôi đăng chức năng của mình quá ... có thêm một bit nữa - the failureDiffString – vikramsjn

Các vấn đề liên quan