使用XSLT从XML测试用例中获取节点计数



我有以下XML测试用例。

<?xml version="1.0" encoding="UTF-8"?>
<TestResultArray xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <TestResult>
      <Name>Test1</Name>
      <Date>9/15/2016</Date>
      <Time>4:09 PM</Time>
      <Id>697</Id>
      <Steps>
         <TestStep>
            <Number>2</Number>
            <Status>PASS</Status>
         </TestStep>
         <TestStep>
            <Number>3</Number>
            <Status>PASS</Status>
         </TestStep>
         <TestStep>
            <Number>4</Number>
            <Status>PASS</Status>
         </TestStep>
      </Steps>
   </TestResult>
   <TestResult>
      <Name>Test2</Name>
      <Date>9/15/2016</Date>
      <Time>4:09 PM</Time>
      <Id>697</Id>
      <Steps>
         <TestStep>
            <Number>2</Number>
            <Status>FAIL</Status>
         </TestStep>
         <TestStep>
            <Number>3</Number>
            <Status>PASS</Status>
         </TestStep>
         <TestStep>
            <Number>4</Number>
            <Status>PASS</Status>
         </TestStep>
      </Steps>
   </TestResult>
   <TestResult>
      <Name>Test3</Name>
      <Date>9/15/2016</Date>
      <Time>4:09 PM</Time>
      <Id>697</Id>
      <Steps>
         <TestStep>
            <Number>2</Number>
            <Status>FAIL</Status>
         </TestStep>
         <TestStep>
            <Number>3</Number>
            <Status>FAIL</Status>
         </TestStep>
         <TestStep>
            <Number>4</Number>
            <Status>FAIL</Status>
         </TestStep>
      </Steps>
   </TestResult>
</TestResultArray>

我试图获得测试用例的总数,通过的数量和失败的测试用例的数量。

要求是如果<TestStep>中的任何一个是FAIL,则整个测试用例<TestResult>应被计数为FAIL。

我可以用

得到测试用例的总数
<tr>
<td>    <xsl:value-of select="count(TestResultArray/TestResult)" /> </td>
</tr>

如何使用XSLT获得通过和失败的测试用例<TestResult>(不是<TestStep>)的总数?

对于上面的XML示例,输出应该是
Total Testcase = 3,
Passed = 1,
Failed = 2

这里有一个可能的解决方案:

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">
  <xsl:output method="text" />
  <xsl:template match="/*">
    <xsl:text>Total Testcase = </xsl:text>
    <xsl:value-of select="count(*)"/>
    <xsl:text>,&#xa;</xsl:text>
    <xsl:text>Passed = </xsl:text>
    <xsl:value-of select="count(*[not(Steps/*/Status = 'FAIL')])"/>
    <xsl:text>,&#xa;</xsl:text>
    <xsl:text>Failed = </xsl:text>
    <xsl:value-of select="count(*[Steps/*/Status = 'FAIL'])"/>
    <xsl:text>&#xa;</xsl:text>
  </xsl:template>
</xsl:stylesheet>

在源XML上运行时,产生以下结果:

Total Testcase = 3,
Passed = 1,
Failed = 2

最新更新