0

2つのxmlファイルがあります。次のxmlを持つProjectLog.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>

これらの2つのファイルは、テストの実行後に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">

テストに合格したかどうかを示します。現在、ProjectLog.xmlからテスト名と期間を取得するための次のXSLTがあります

<?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」から「status」を取得するように更新する方法がわかりません。

誰か助けてもらえますか?

ありがとう。

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 に答える