2012-07-18 20 views
19

我在Jenkins中成功運行了我的谷歌測試的單元測試,但我不知道如何顯示由gtest生成的.xml文件。據說,GTEST滿足JUnit的格式,所以我設置如下:在jenkins中使用gtest

Screenshot

但它與建築物的錯誤後結束。

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

+1

是否result.xml位於工作空間根目錄中?如果你瀏覽你的工作區,你應該能夠找到它所在的結果文件。 – Arnestig 2012-07-18 12:28:40

+0

@sti:我添加了確切的錯誤,Jenkins的工作空間根在哪裏? – 2012-07-19 01:17:11

回答

7

您是否正在使用正確的標誌運行測試可執行文件(即--gtest_output=xml[:DIRECTORY_PATH\|:FILE_PATH])?

--help輸出:

--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

詹金斯配置頁上的錯誤是有點紅鯡魚。

本質上,發生的情況是測試報告xml文件尚未由構建作業生成。所以,你然後得到這個錯誤:

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

當然,位置必須正確配置。對於這一點,看到這個帖子:

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

那麼,如何修正這個錯誤?關鍵是要研究控制檯輸出以檢查測試是否成功運行。他們沒有機會,這就是錯誤發生的原因。

一旦你的測試運行成功,假設你正確配置了位置,你應該沒問題。

您正在使用JUnit,因此它將成爲一個Java項目。我會在這裏注意到它可以幫助其他人,我們正在運行Xcode。測試沒有運行。

在詹金斯控制檯輸出只是上述錯誤埋有張紙條:

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

膨化回的Xcode,並設置UnitTests目標的測試版本後標誌YES的伎倆。這是在單元測試部分。您當然也可以在項目級別設置標誌,並將目標更改爲「其他」,並將值設置爲$(inherited)

1

您的結果文件沒有存儲在正確的位置,Jenkins插件找不到它。在執行測試並生成XML文件後,是否將其存儲在任何地方?

我建議嘗試使用'*'替換result.xml(假設這是應該存儲在那裏的唯一XML文件),如果這樣做會起作用,那麼就開始使用正確的文件名。

我們在配置中遇到同樣的問題。確保生成的結果XML存儲在插件期望的關鍵位置。您可以從項目配置中確定工作空間根目錄。

15

Fraser的答案很好,您需要一些額外的處理將gtest XML轉換爲正確的JTest格式。

首先,你問GTEST輸出結果XML使用:

mygtestapp --gtest_output=xml:gtestresults.xml 

然後在腳本中,你需要添加額外的元素,以正確的標誌跳過的測試本身。詹的JTEST處理器需要一個跳過的測試包含<跳過>元素,而不僅僅是設置狀態爲「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 

如果Windows批處理文件運行此,把awk的行動文件,以避免出現問題裏面與報價。 awk.progfile:

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

,並創建你的bat文件添加:

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

最後你點JTEST處理器作爲後生成步驟來讀取XML轉換:

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

現在還可以使用xUnit插件「googletest 1.6」選項解析googletest輸出。它似乎可以在不使用'awk'魔法的情況下處理禁用的測試,並且可以與googletest 1.7一起正常運行。 – avtomaton 2016-11-06 17:11:23

0

這是一個windows批處理版本,用於將谷歌測試「notRun」轉換爲通過Windows批處理「跳過」的junit。我知道有更多優雅的方式,但這隻需要windows批處理並執行作業

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% 
)