如何在HudsonJenkins中获得CTest结果

如何在HudsonJenkins中获得CTest结果,第1张

如何在Hudson / Jenkins中获得CTest结果

在Jenkins中,在CMake部分(可能是通过CMake插件完成)之后,添加以下批处理脚本,或适应Linux上的构建:

del build_32JUnitTestResults.xmlpushd build_32Tests"C:Program FilesCMake 2.8binctest.exe" -T Test -C RelWithDebInfo --output-on-failurepopdverify >nulC:Python27python.exe external/tool/CTest2JUnit.py build_32/Tests external/tool/CTest2JUnit.xsl > build_32/JUnitTestResults.xml
  • build_32
    是CMake插件中的构建目录
  • Tests
    是我所有测试所在的子目录
  • -T Test
    使CTest输出为XML(?!)
  • verify >nul
    将错误级别重置为0,因为如果任何测试失败,CTest会返回> 0,Jenkins将其解释为“整个构建失败”,这是我们不希望的
  • 最后一行将CTest的XML转换为 最小的 JUnit xml。Python脚本和xslt位于源目录中,您可能需要更改它。

python脚本看起来像这样(在10分钟内被黑,请当心):

from lxml import etreeimport StringIOimport sysTAGfile = 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)
  • 它需要lxml,直接链接
  • 它带有两个参数,测试所在的目录(在build目录中)和一个xsl文件
  • 它仅读取最后的xml测试结果,并使用xsl对其进行转换,然后将其输出到stdout
  • Testing/TAG
    文件的第一行中包含“最后的xml测试” ,因此需要附加的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:…?)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5564804.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存