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

时间:2016-09-16 03:25:59

标签: xml xslt

我正在使用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>中的任何一个失败,则整个测试用例<TestResult>应计为失败。

我可以使用

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

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

对于上面的XML示例,输出应为

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

1 个答案:

答案 0 :(得分:1)

这是一个可能的解决方案:

<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