我有一些 C++ 项目正在运行 cruisecontrol.net .作为构建过程的一部分,我们编译并运行 Boost.Test单元测试套件。我将这些配置为转储 XML 日志文件。虽然格式类似于 JUnit/NUnit,但并不完全相同(并且缺少一些信息),因此 Cruisecontrol.net 无法获取它们。我想知道是否有人已经创建(或知道)现有的 XSL 转换,它将 Boost.Test 结果转换为 JUnit/NUnit 格式,或者直接转换为可呈现的 (html) 格式。
谢谢!
最佳答案
我正在努力推出我自己的 Boost.Test -> JUnit XSL。请注意,这旨在使用 Boost.Test 的 XML 报告输出 - 而不是日志输出。这是一项正在进行的工作 - 这是我目前所拥有的:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
<xsl:output method="xml"
indent="yes"/>
<xsl:template match="TestResult">
<test-results>
<xsl:attribute name="total">
<xsl:value-of select="sum(./TestSuite/@test_cases_passed) + sum(./TestSuite/@test_cases_failed) + sum(./TestSuite/@test_cases_skipped) + sum(./TestSuite/@test_cases_aborted)"/>
</xsl:attribute>
<xsl:attribute name="failures">
<xsl:value-of select="sum(./TestSuite/@test_cases_failed) + sum(./TestSuite/@test_cases_aborted)"/>
</xsl:attribute>
<xsl:attribute name="skipped">
<xsl:value-of select="sum(./TestSuite/@test_cases_skipped)"/>
</xsl:attribute>
<xsl:attribute name="not-run">
<xsl:value-of select="sum(./TestSuite/@test_cases_skipped)"/>
</xsl:attribute>
<xsl:call-template name="testSuite" />
</test-results>
</xsl:template>
<xsl:template name="testSuite">
<xsl:for-each select="TestSuite">
<test-suite>
<xsl:call-template name="testAttributes" />
<results>
<xsl:call-template name="testSuite" />
<xsl:for-each select="TestCase">
<test-case>
<xsl:call-template name="testAttributes" />
</test-case>
</xsl:for-each>
</results>
</test-suite>
</xsl:for-each>
</xsl:template>
<xsl:template name="testAttributes">
<xsl:attribute name="name">
<xsl:value-of select="@name"/>
</xsl:attribute>
<xsl:attribute name="success">
<xsl:choose>
<xsl:when test="@result = 'passed'">True</xsl:when>
<xsl:when test="@result != 'passed'">False</xsl:when>
</xsl:choose>
</xsl:attribute>
<xsl:attribute name="executed">True</xsl:attribute>
<xsl:attribute name="time">0</xsl:attribute>
<xsl:attribute name="asserts">
<xsl:value-of select="@assertions_failed + @assertions_passed"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
我已将此集成到我的构建过程中,并且它被 ccnet 很好地接收和处理。它并不完美,但比我之前完全没有报告的情况要好得多。我愿意接受有关如何将 Boost.Test 数据映射到 JUnit 报告的“总计”、“失败”、“跳过”和“未运行”字段的建议。此外,不幸的是,错误详细数据(指示故障的性质和发生故障的文件/行号)仅打印到日志中,而不是报告中,因此我必须“合并”两者才能获得所有我最希望拥有的数据。
关于xslt - 任何人都有将 Boost.Test XML 日志转换为可呈现格式的 XSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2969131/