2012-07-18 30 views
19

Tôi chạy thử nghiệm đơn vị của mình thành công với thử nghiệm google trong Jenkins, nhưng tôi không biết cách hiển thị tệp .xml được tạo bởi gtest. Người ta nói rằng thỏa mãn gtest định dạng JUnit, vì vậy những gì tôi thiết lập như sau:Sử dụng gtest trong jenkins

Screenshot

Nhưng nó kết thúc với các lỗi sau khi một tòa nhà.

No test report files were found. Configuration error?
Build step 'Publish JUnit test result report' changed build result to FAILURE
Finished: FAILURE

+1

Là result.xml nằm trong thư mục gốc không gian làm việc? Nếu bạn duyệt vùng làm việc của mình, bạn sẽ có thể tìm thấy tệp result.xml và đường dẫn chính xác của nó nằm ở đâu. – Arnestig

+0

@sti: Tôi đã thêm các lỗi chính xác và gốc của không gian làm việc của Jenkins ở đâu? –

Trả lời

7

Bạn đang chạy thử nghiệm có thể thực thi với cờ chính xác (ví dụ: --gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH])?

Từ --help đầu ra:

--gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH] Generate an XML report in the given directory or with the given file name. FILE_PATH defaults to test_details.xml.

1

Các lỗi trên trang cấu hình Jenkins là một chút của một cá trích đỏ.

Về cơ bản, điều đang xảy ra là báo cáo thử nghiệm tệp xml chưa được tạo bởi công việc xây dựng. Vì vậy, bạn nhận được lỗi này:

Recording test results 
No test report files were found. Configuration error? 

Tất nhiên, vị trí phải được định cấu hình chính xác. Cho rằng, xem bài này:

How to configure test-reports on Jenkins CI working with grails?

Vì vậy, làm thế nào để sửa lỗi? Điều quan trọng là để nghiên cứu đầu ra giao diện điều khiển để kiểm tra xem các thử nghiệm đã chạy thành công hay chưa. Rất có thể họ không làm vậy, và đó là lý do tại sao lỗi xảy ra.

Khi bạn chạy thử nghiệm thành công, giả định rằng bạn đã định cấu hình chính xác vị trí, bạn sẽ ổn.

Bạn đang sử dụng JUnit để nó sẽ là một dự án Java. Tôi sẽ lưu ý ở đây trong trường hợp nó có thể giúp đỡ người khác, rằng chúng tôi đang chạy Xcode. Các bài kiểm tra không được chạy.

Buried trong giao diện điều khiển đầu ra Jenkins ngay trên lỗi là ghi chú này:

note: RunUnitTests exited without running tests because TEST_AFTER_BUILD was set to NO. 

Popping trở lại vào Xcode, và thiết lập Kiểm tra các UnitTests mục tiêu Sau khi Build cờ để YES đã làm các trick. Đó là dưới mục Kiểm tra đơn vị. Bạn cũng có thể đặt cờ ở cấp Dự án và thay đổi mục tiêu thành 'Khác', đặt giá trị là $(inherited).

1

Tệp kết quả của bạn không được lưu trữ ở vị trí chính xác và plugin Jenkins không thể tìm thấy. Sau khi thử nghiệm của bạn được thực hiện và tệp XML được tạo ra để bạn lưu trữ nó ở bất cứ đâu?

Tôi khuyên bạn nên làm cho nó hoạt động bằng cách thay thế result.xml bằng '*' (giả sử đây là tệp XML duy nhất được lưu trữ ở đó) và nếu điều này sẽ hoạt động thì bắt đầu làm việc với tên tệp chính xác.

Chúng tôi đã gặp vấn đề tương tự trong cấu hình của chúng tôi. Đảm bảo rằng XML kết quả được tạo ra được lưu trữ trong đó plugin mong đợi đó là khóa. Bạn có thể xác định root không gian làm việc từ cấu hình dự án của bạn.

15

Câu trả lời của Fraser rất tốt và bạn cần xử lý thêm để chuyển đổi định dạng XML thành định dạng JTest thích hợp.

Trước tiên, bạn hỏi gtest để ra kết quả to XML sử dụng:

mygtestapp --gtest_output=xml:gtestresults.xml 

Sau đó, trong một kịch bản bạn cần phải thêm yếu tố phụ để đúng cờ bỏ qua các xét nghiệm như vậy. xử lý JTest Jenkin của yêu cầu kiểm tra bỏ qua chứa < bỏ qua > yếu tố chứ không chỉ thiết lập trạng thái để "notrun":

awk '{ if ($1 == "<testcase" && match($0, "notrun")) print substr($0,0,length($0)-2) "><skipped/></testcase>"; else print $0;}' gtestresults.xml > gtestresults-skipped.xml 
mv gtestresults.xml gtestresults.off 

Nếu hoạt động này trên một cửa sổ tập tin batch, đặt hành động awk bên trong một tập tin để tránh các vấn đề với dấu ngoặc kép. awk.progfile:

{ if ($1 == "<testcase" && match($0, "notrun")) print substr($0,0,length($0)-2) "><skipped/></testcase>"; else print $0;} 

Và tạo thêm trong file bat của bạn:

awk -f awk.progfile gtestresults.xml > gtestresults-skipped.xml 

Cuối cùng bạn chỉ bộ vi xử lý JTest như một bước Post-Build để đọc XML được chuyển đổi:

# Publish JUnit Test Result Report 
Test Report XMLs: gtestresults-skipped.xml 
+0

Bây giờ cũng có thể phân tích đầu ra googletest bằng plugin xUnit, tùy chọn "googletest 1.6". Dường như nó có thể đối phó với các bài kiểm tra bị vô hiệu hóa mà không có phép thuật 'awk', và hoạt động tốt với googletest 1.7. – avtomaton

0

Đây là một phiên bản hàng loạt cửa sổ để chuyển đổi google-test "notRun" thành junit "bỏ qua" qua loạt cửa sổ. Tôi biết rằng có nhiều cách thanh lịch hơn, nhưng điều này chỉ yêu cầu hàng loạt cửa sổ và thực hiện công việc

rem convert gtest xml to junit compatible format (replace notRun by skipped) 
IF EXIST %INTEXTFILE% (
    IF EXIST %OUTTEXTFILE% (
     del %OUTTEXTFILE% 
     waitfor fileSystemToDoItsStuff /t 1 
    ) 
    FOR /f "tokens=1,* delims=¶" %%A IN ('"type %INTEXTFILE%"') DO (
     ECHO."%%A" | findstr /C:"DISABLED_">nul & IF ERRORLEVEL 1 (
      SET modified=%%A 
     ) ELSE (
      SET string=%%A 
      SET modified=!string:/^>=^>^<skipped /^>^</testcase^>! 
     ) 
     ECHO !modified!>> %OUTTEXTFILE% 
    ) 
    del %INTEXTFILE% 
    waitfor fileSystemToDoItsStuff /t 1 
    move %OUTTEXTFILE% %INTEXTFILE% 
) 
Các vấn đề liên quan