18
我正在使用CTest(CMake的一部分)进行自动化测试。如何在Hudson/Jenkins中获得CTest结果
如何在Jenkins仪表板中获得CTest结果?或者,换言之,我如何获得CTest以类似JUnit的XML输出?
我正在使用CTest(CMake的一部分)进行自动化测试。如何在Hudson/Jenkins中获得CTest结果
如何在Jenkins仪表板中获得CTest结果?或者,换言之,我如何获得CTest以类似JUnit的XML输出?
在詹金斯CMake的一部分(可能是通过CMake的插件制造)后,添加以下批处理脚本,或调整基础上的Linux:
del build_32\JUnitTestResults.xml
pushd build_32\Tests
"C:\Program Files\CMake 2.8\bin\ctest.exe" -T Test -C RelWithDebInfo --output-on-failure
popd
verify >nul
C:\Python27\python.exe external/tool/CTest2JUnit.py build_32/Tests external/tool/CTest2JUnit.xsl > build_32/JUnitTestResults.xml
build_32
是在C进行build目录插件Tests
是子目录哪里了所有的考试生活-T Test
使得CTEST输出XML(?!)verify >nul
将errorlevel重置为0,因为如果有任何测试失败,则Jenkins将返回> 0,这表示Jenkins将其解释为“整个构建失败”,我们不想要的Python脚本看起来像这样(在10分钟内砍死在一起,要小心):
from lxml import etree
import StringIO
import sys
TAGfile = open(sys.argv[1]+"/Testing/TAG", 'r')
dirname = TAGfile.readline().strip()
xmlfile = open(sys.argv[1]+"/Testing/"+dirname+"/Test.xml", 'r')
xslfile = open(sys.argv[2], 'r')
xmlcontent = xmlfile.read()
xslcontent = xslfile.read()
xmldoc = etree.parse(StringIO.StringIO(xmlcontent))
xslt_root = etree.XML(xslcontent)
transform = etree.XSLT(xslt_root)
result_tree = transform(xmldoc)
print(result_tree)
Testing/TAG
文件的第一行,因此额外的fopen的XSL看起来是这样的。这是相当小,但能够完成任务:[编辑]参见MOnsDaR的改进版本:http://pastebin.com/3mQ2ZQfa
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/Site/Testing">
<testsuite>
<xsl:apply-templates select="Test"/>
</testsuite>
</xsl:template>
<xsl:template match="Test">
<xsl:variable name="testcasename"><xsl:value-of select= "Name"/></xsl:variable>
<xsl:variable name="testcaseclassname"><xsl:value-of select= "FullName"/></xsl:variable>
<testcase name="{$testcasename}" classname="{$testcaseclassname}">
<xsl:if test="@Status = 'passed'">
</xsl:if>
<xsl:if test="@Status = 'failed'">
<error type="error"><xsl:value-of select="Results/Measurement/Value/text()" /></error>
</xsl:if>
<xsl:if test="@Status = 'notrun'">
<skipped><xsl:value-of select="Results/Measurement/Value/text()" /></skipped>
</xsl:if>
</testcase>
</xsl:template>
</xsl:stylesheet>
最后,检查‘发布JUnit测试结果’(或类似的,我的版本是法语),并设置XML路径build_32/JUnitTestResults.xml
那么,这是丑陋的。但是,仍然希望这有助于某人。并欢迎改进(从python运行ctest可能吗?使用Python插件的路径而不是C:...?)
非常感谢此解决方案。我目前正在玩它,它基本上适合我。 – MOnsDaR 2011-07-01 22:50:42
我增强了您的XSL代码以支持CTest XML输出的更多功能:http://pastebin.com/GAj7Fzqd它现在增加了测试的执行时间,如果发生错误,它将errortype和errorcode添加为信息。请评论是否有其他可添加到生成的JUnit-File的其他内容。 – MOnsDaR 2011-07-02 10:46:28
新版本支持 -JUnit标签并另外将属性存储为系统输出(因此可以在Jenkins中看到它们):http://pastebin.com/3mQ2ZQfa –
MOnsDaR
2011-07-02 12:13:38