在jenkins中使用gtest

时间:2012-07-18 11:47:37

标签: jenkins googletest

我在Jenkins中使用google测试成功运行了我的单元测试,但我不知道如何显示gtest生成的.xml文件。据说gtest满足JUnit格式,所以我设置如下:

Screenshot

但建筑物结束后会出现错误。

  

未找到任何测试报告文件。配置错误?
  构建步骤'发布JUnit测试结果报告'将构建结果更改为FAILURE
  完成:失败

5 个答案:

答案 0 :(得分:18)

Fraser的答案很好,您需要一些额外的处理才能将gtest XML转换为正确的JTest格式。

首先,您要求gtest使用以下结果将结果输出到XML:

mygtestapp --gtest_output=xml:gtestresults.xml

然后在脚本中,您需要添加额外的元素以正确标记跳过的测试。 Jenkin的JTest处理器要求跳过的测试包含< skipped>元素而不仅仅是将状态设置为“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文件中创建add:

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

最后,您将JTest处理器指向后构建步骤以读取转换后的XML:

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

答案 1 :(得分:8)

您是否使用正确的标记(即--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.

答案 2 :(得分:1)

您的结果文件未存储在正确的位置,Jenkins插件无法找到它。执行测试并生成XML文件后,是否将其存储在任何位置?

我建议尝试使用'*'替换result.xml使其工作(假设这是唯一应该存储在那里的XML文件),如果这样做,那么就开始处理正确的文件名。

我们在配置中遇到了同样的问题。确保生成的结果XML存储在插件期望的位置,这是关键。您可以从项目配置中确定工作区根目录。

答案 3 :(得分:0)

这是一个Windows批量版本,用于转换google-test&#34; notRun&#34;到junit&#34;跳过&#34;通过Windows批处理。我知道有更优雅的方式,但这只需要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%
)

答案 4 :(得分:0)

Jenkins具有xunit插件,可将googletest xml转换为junit格式:https://plugins.jenkins.io/xunit/

管道示例

..

其他有用的链接: