xslt - 任何人都有将 Boost.Test XML 日志转换为可呈现格式的 XSL?

标签 xslt continuous-integration cruisecontrol.net bamboo boost-test

我有一些 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/

相关文章:

Jenkins 'Trigger/call builds on other projects' 与当前项目版本

jakarta-ee - 使用 maven-surefire-plugin 或 maven-failsafe-plugin 运行 Selenium 测试?

java - 如何处理开源项目中的凭据

javascript - 从 javascript 获取变量,并将其转换为 xsl

xslt - XSL 中的 switch case

xml - 如何更改或重新分配 XSLT 中的变量?

visual-studio - 生成前任务-在CruiseControl.NET中删除工作副本

CruiseControl.Net 中的 Git 功能分支

svn - 将 Cruise Control .NET 作为服务运行

xml - 无法在 XSL-FO 中设置初始页码