<ruby id="h6500"><table id="h6500"></table></ruby>
    1. <ruby id="h6500"><video id="h6500"></video></ruby>
          1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>
            • 軟件測試技術(shù)
            • 軟件測試博客
            • 軟件測試視頻
            • 開(kāi)源軟件測試技術(shù)
            • 軟件測試論壇
            • 軟件測試沙龍
            • 軟件測試資料下載
            • 軟件測試雜志
            • 軟件測試人才招聘
              暫時(shí)沒(méi)有公告

            字號: | 推薦給好友 上一篇 | 下一篇

            軟件測試工具中QTP操作xml文件的方法及擴展QTP的.NET插件的問(wèn)題

            發(fā)布: 2010-8-30 10:03 | 作者: 網(wǎng)絡(luò )轉載 | 來(lái)源: 領(lǐng)測軟件測試網(wǎng)采編 | 查看: 269次 | 進(jìn)入軟件測試論壇討論

            領(lǐng)測軟件測試網(wǎng)

            軟件測試工具中QTP操作xml文件的方法及擴展QTP的.NET插件的問(wèn)題

            目前,企業(yè)中對XML的應用越來(lái)越廣泛,作為自動(dòng)化測試測試工程師,也應該掌握XML的讀寫(xiě)操作。
              以下我使用XML DOM技術(shù)演示一個(gè)例子,用以讀取XML指定節點(diǎn)的節點(diǎn)內容值。
              讀取函數原型 GetXml strXmlPath,nodeName
              這個(gè)函數的第一個(gè)參數表示xml文件所在路徑,第二個(gè)參數表示希望獲取到的xml節點(diǎn)名,請結合下列例子看
              首先,新建一個(gè)vbs文件(取個(gè)名字叫readXml.vbs),輸入代碼:
            Dim strXML
              GetXml "c:search.xml","TestResult"  '這個(gè)函數的第一個(gè)參數表示xml文件所在路徑,第二個(gè)參數表示希望獲取到的xml節點(diǎn)名,請結合下列例子看
            MsgBox strXML

            Function GetXml (ByVal strXmlFilePath,ByVal xmlNodeName)
                    Dim xmlDoc,xmlRoot
                   
                    Set xmlDoc = CreateObject("Microsoft.XMLDOM") '創(chuàng )建XML DOM對象
                    xmlDoc.async = False  '控制加載模式為同步模式(xml樹(shù)加載完畢后再執行后續代碼)
                    xmlDoc.load strXmlFilePath        '載入xml文件
                    If xmlDoc.parseError.errorCode <> 0 Then
                            MsgBox "XML文件格式不對,原因是:" & Chr(13) &  xmlDoc.parseError.reason
                            Exit Function               
                    End If
                    Set xmlRoot = xmlDoc.documentElement       
                    xmlRecursion xmlRoot,xmlNodeName        '調用xml遞歸函數傳入指定的根和節點(diǎn)名       
                    GetXml = True 'xmlRecursion (xmlRoot)
                   
            End Function

            Function xmlRecursion(byval xmlNode,byval strNodeName)
                    If xmlNode.nodeName = strNodeName And xmlNode.hasChildNodes Then
                            If  xmlNode.childNodes.item(0).nodeName = "#text" Then
                                    strXML = strXML & xmlNode.nodeName & ":" & xmlNode.childNodes.item(0).nodeValue & Chr(13)                                               
                            End If               
                    End If                       
                    If xmlNode.hasChildNodes Then
                            For Each childNodeItem In xmlNode.ChildNodes
                                    If childNodeItem.hasChildNodes Then
                                            xmlRecursion childNodeItem,strNodeName                               
                                    End If                       
                            Next
                    End If       
            End Function
             
            問(wèn)題:
              haschildnodes()這個(gè)方法好奇怪,明明已經(jīng)沒(méi)有子節點(diǎn)了,卻仍然返回true,
              比如<TestResult>1</TestResult>這個(gè)節點(diǎn),它的childNodes.item(0).nodeName竟然是“#text”,但是根據例子來(lái)看TestResult已經(jīng)沒(méi)有子節點(diǎn)了阿
            回答:
              因為在xml有一個(gè)特殊的“子節點(diǎn)”——文本節點(diǎn)。比如 <TestResult>100</TestResult>
              這個(gè)節點(diǎn)TestResult下并不是沒(méi)有子節點(diǎn),而是有一個(gè)文本節點(diǎn),這個(gè)節點(diǎn)的nodeName就是“#text”,而nodeValue是100.如果是 <TestResult/> 這種節點(diǎn)的話(huà),那么用hasChildNodes則返回False
             
            遍歷xml的代碼:
            Option Explicit
            Dim xmlDoc,myErr,strXML
            Set xmlDoc = CreateObject("Microsoft.XMLDOM")
            xmlDoc.async = False  
            xmlDoc.load "c:calc1.xml"
            If xmlDoc.parseError.errorCode <> 0 Then  
               Set myErr = xmlDoc.parseError
               MsgBox("XML Loads Failed. " & myErr.reason)
            Else
                    Set rootNode = xmlDoc.documentElement
                    Call rTravel(rootNode)
                    MsgBox strXML
            End If

            Sub rTravel (rNode)
                    Dim blnTwo,intTestCase,
                    blnTwo = False
                    iLen = rNode.childNodes.length
                    If iLen > 0 Then
                            For i = 0 To rNode.childNodes.length -1
                                    Set child = rNode.childNodes.item(i)
                                    Call rTravel(child)                       
                                    childtext = child.nodeValue                       
                                    strXML = strXML & childtext & chr(13)
                            Next
                    Else
                            Exit Sub               
                    End If
            End Sub


            方法二:
            Option Explicit
            Dim xmlDoc,myErr,strXML

            Set xmlDoc = CreateObject("Microsoft.XMLDOM")
            xmlDoc.async = False  
            xmlDoc.load "c:calc1.xml"
            If xmlDoc.parseError.errorCode <> 0 Then  
               Set myErr = xmlDoc.parseError
               MsgBox("XML Loads Failed. " & myErr.reason)
            Else
                    Set rootNode = xmlDoc.documentElement
                    Call rTravel(rootNode)
                    MsgBox strXML
            End If
            Sub rTravel (rNode)
                    Dim blnTwo,intTestCase,
                    blnTwo = False
                    iLen = rNode.childNodes.length
                    If iLen > 0 Then
                            For i = 0 To rNode.childNodes.length -1
                                    Set child = rNode.childNodes.item(i)
                                    Call rTravel(child)                       
                                    childtext = child.nodeValue                       
                                    strXML = strXML & childtext & chr(13)
                            Next
                    Else
                            Exit Sub               
                    End If
            End Sub


            以下是我今天試用QTP插件時(shí)的一些過(guò)程,大家可以看一下
            今天我試了一下QTP的.NET插件,QTP的.NET插件對于解決.NET控件識別和測試問(wèn)題非常重要,是測試.NET平臺程序必不可少的條件(包括測試.NET Windows Forms、.NET Web Forms、WPF控件)。.NET第三方控件或自定義的個(gè)性化控件的識別和測試問(wèn)題可通過(guò)QTP的.NET插件提供的擴展模塊來(lái)解決。

            QTP的.NET插件主要提供了兩種方式的擴展來(lái)支持個(gè)性化控件的測試:

            (1).NET DLL:使用其為VS.NET提供的Custom Server模板來(lái)創(chuàng )建用C#寫(xiě)的DLL來(lái)支持個(gè)性化控件的測試。

            (2)XML:使用XML文件來(lái)描述擴展。

            第一種方法的好處是可以充分利用開(kāi)發(fā)工具的優(yōu)勢,第二種方法則相對更便捷,可隨時(shí)進(jìn)行擴展,但是今天試用的結果是可實(shí)現錄制方面的擴展,在回放方面的擴展不能實(shí)現,不知道是不是還有什么訣竅沒(méi)掌握,QTP提供的幫助文檔在這方面也比較有限。
            在SwfConfig.xml文件中的擴展描述如下所示:

            <?xml version="1.0" encoding="UTF-8"?>
            <Controls>
              <Control Type="MyWindowsControlLibrary1.UserControl1">
                      <Settings>
                             <Parameter Name="ConfigPath">D:\Program Files\Mercury Interactive\QuickTest Professional\dat\ControlDefineXMLSample.XML
                             </Parameter>
                      </Settings>
                     <CustomRecord>
                             <Component>
                                    <Context>AUT-XML</Context>
                             </Component>
                      </CustomRecord>
                      <CustomReplay>
                            <Component>

                                   <Context>AUT-XML</Context>
                             </Component>
                      </CustomReplay>
              </Control>
            </Controls>

            ControlDefineXMLSample.XML的定義如下:
            <?xml version="1.0" encoding="UTF-8"?>
            <Customization>
                   <Record>
                          <Events>
                                 <Event name="MouseDown" enabled="true">
                                        <RecordedCommand name="MouseMove">
                                               <Parameter>                                
                                               EventArgs.X
                                              </Parameter>
                                               <Parameter lang="C#">
                                               Parameter = EventArgs.Y;
                                              </Parameter>
                                        </RecordedCommand>
                                 </Event>
                          </Events>
                   </Record>
                   <Replay>
                          <Methods>
                                 <Method name="SetValue">                    
                                  <Parameters>
                                               <Parameter type="int" name="X"/>
                                               <Parameter type="int" name="Y"/>
                                        </Parameters>
                                        <MethodBody>

                                               System.Windows.Forms.MessageBox.Show("Mouse Position at Record Time");

                                        </MethodBody>
                                 </Method>
                          </Methods>
                   </Replay>
            </Customization>

            基本上是按QTP的幫助文檔描述,以及它提供的一個(gè)小例子來(lái)寫(xiě)的。如果完全按其在NETExtensibility.chm文件中的“Example of a Control Definition XML File”這一節的例子來(lái)寫(xiě)則完全不能進(jìn)行錄制方面的擴展,它的例子如下:

            延伸閱讀

            文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/

            TAG: net NET Net qtp QTP xml XML Xml 工具 軟件測試


            關(guān)于領(lǐng)測軟件測試網(wǎng) | 領(lǐng)測軟件測試網(wǎng)合作伙伴 | 廣告服務(wù) | 投稿指南 | 聯(lián)系我們 | 網(wǎng)站地圖 | 友情鏈接
            版權所有(C) 2003-2010 TestAge(領(lǐng)測軟件測試網(wǎng))|領(lǐng)測國際科技(北京)有限公司|軟件測試工程師培訓網(wǎng) All Rights Reserved
            北京市海淀區中關(guān)村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
            技術(shù)支持和業(yè)務(wù)聯(lián)系:info@testage.com.cn 電話(huà):010-51297073

            軟件測試 | 領(lǐng)測國際ISTQBISTQB官網(wǎng)TMMiTMMi認證國際軟件測試工程師認證領(lǐng)測軟件測試網(wǎng)

            老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
              <ruby id="h6500"><table id="h6500"></table></ruby>
              1. <ruby id="h6500"><video id="h6500"></video></ruby>
                    1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>