0

我有 2 个 xml 文件。ProjectLog.xml 具有以下 xml

<?xml version="1.0" encoding="UTF-8"?>
<ProjectLog>
  <ProjectLogItem id="0" pid="-1" nety="False">       
    <No>1</No>
    <Name><![CDATA[CanEnterInvoice]]></Name>
    <StartTime>12/03/2012 11:55:59</StartTime>
    <EndTime>12/03/2012 11:58:26</EndTime>
    <RunTime>0:02:26</RunTime>
    <Details>&lt;a href="#" onclick="top.logtree_openNode('{85E6CF42-8907-4565-B7C5-487AA089CE5C}')"&gt;Details&lt;/a&gt;</Details>
    <Messages/>
  </ProjectLogItem>     
</ProjectLog>

和 root.xml

<?xml version="1.0" encoding="UTF-8"?>
<LogData name="DetailedTest" id="{719C8118-F2D1-4775-A46B-B9465ACBA1EC}" status="0">
  <Provider name="Project Log" schemaType="aqds:tree" href="ProjectLog.xml"/>
  <Provider name="Test Run Summary" schemaType="aqds:text" href="TestRunSummary.xml"/>
  <LogData name="CanEnterInvoice" id="{85E6CF42-8907-4565-B7C5-487AA089CE5C}" status="0">
    <Provider name="Project Log" schemaType="aqds:tree" href="CanEnterInvoice\ProjectLog.xml"/>
    <LogData name="Script Test Log [EnteringInvoice\EnteringInvoice]" id="{6B048A3D-0C3D-4FAC-9BA8-4703759F868D}" status="0">
      <Provider name="Test Log" schemaType="aqds:tree" href="CanEnterInvoice\ScriptTestLogEnteringInvoiceEnteringInvoice\TestLog.xml"/>
    </LogData>
  </LogData>
</LogData>

这两个文件是在运行测试后由 Testcomplete 生成的,我正在将 testcomplete 与 teamcity 集成。我正在使用 teamcity MSBuild 运行测试,然后在生成这些日志文件后,我将使用 XSLT 处理 ProjectLog.xml 并生成一个文本文件,teamcity 可以读取并显示测试结果。但是当从 ProjectLog.xml 文件中读取结果时,无法确定测试是否通过/失败。所以我需要使用root.xml文件来查找测试结果。“root.xml”文件中以下 xml 中的状态属性

<LogData name="CanEnterInvoice" id="{85E6CF42-8907-4565-B7C5-487AA089CE5C}" status="0">

告诉测试是否通过。现在我有以下 XSLT 从 ProjectLog.xml 获取测试名称和持续时间

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"
encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
       <xsl:for-each select="ProjectLog/ProjectLogItem">      

       ##teamcity[testStarted name='<xsl:value-of select="Name"/>']
       ##teamcity[testFinished name='<xsl:value-of select="Name"/>' duration='<xsl:value-of select="RunTime"/>']       
         </xsl:for-each>           
</xsl:template>
</xsl:stylesheet> 

但我不确定如何更新它以从“root.xml”中获取每个测试的“状态”。

有人可以帮忙吗?

谢谢。

4

1 回答 1

0

关于 XSLT 的问题,我无法为您提供帮助,但是,碰巧,我有一个脚本 ( VBScript ),它获取当前测试运行的摘要并将其以可读格式放入文本文件。该脚本应指定为项目中的最后一个测试项。希望这能有所帮助。

Sub ShowSummary
  summary = GetSummary
  Log.Message summary
  Call aqFile.WriteToTextFile("c:\MySummaryFile.txt", summary, aqFile.ctANSI, True)
End Sub

Function GetSummary
  tempFolder = aqEnvironment.GetEnvironmentVariable("temp") & "\" & GetTickCount & "\"

  aqFileSystem.CreateFolder tempFolder
  Call Log.SaveResultsAs(tempFolder, lsXML)

  Set xDoc = Sys.OleObject("MSXML2.DOMDocument.4.0")
  xDoc.load(tempFolder & "RootLogData.dat")                                              
  summaryFileName = xDoc.selectSingleNode("//Node[@name='item 0']/Prp[@name='filename']/@value").text
  xDoc.load(summaryFileName)

  GetSummary = "Total: "    & xDoc.selectSingleNode("Nodes/Node[@name='root']/Node[@name='summary']/Node[@name='total']/Prp[@name='total']/@value").text & VbCrLf &_
               "Executed: " & xDoc.selectSingleNode("Nodes/Node[@name='root']/Node[@name='summary']/Node[@name='executed']/Prp[@name='total']/@value").text & VbCrLf &_
               "Passed: "   & VarToStr(VarToInteger(xDoc.selectSingleNode("Nodes/Node[@name='root']/Node[@name='summary']/Node[@name='passed']/Prp[@name='total']/@value").text) + 1) & VbCrLf &_
               "Failed: "   & xDoc.selectSingleNode("Nodes/Node[@name='root']/Node[@name='summary']/Node[@name='failed']/Prp[@name='total']/@value").text

  Set xDoc = Nothing
  Call aqFileSystem.DeleteFolder(tempFolder, True) 
End Function
于 2012-03-13T06:51:00.603 回答