多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

QTP操作xml文件的方法-自动化测试

更新时间:2022-06-01 09:03:29 作者:多测师 浏览:182

  目前,企业中对XML的应用越来越广泛,作为自动化测试的测试工程师,也应该掌握XML的读写操作。

  以下我使用XML DOM技术演示一个例子,用以读取XML指定节点的节点内容值。

  读取函数原型 GetXml strXmlPath,nodeName

  这个函数的第一个参数表示xml文件所在路径,第二个参数表示希望获取到的xml节点名,请结合下列例子看

QTP操作xml文件的方法-自动化测试

  首先,新建一个vbs文件(取个名字叫readXml.vbs),输入代码:

Dim strXML

  GetXml "c:search.xml","TestResult"  '这个函数的第一个参数表示xml文件所在路径,第二个参数表示希望获取到的xml节点名,请结合下列例子看

MsgBox strXML

Function GetXml (ByVal strXmlFilePath,ByVal xmlNodeName)

        Dim xmlDoc,xmlRoot

       

        Set xmlDoc = CreateObject("Microsoft.XMLDOM") '创建XML DOM对象

        xmlDoc.async = False  '控制加载模式为同步模式(xml树加载完毕后再执行后续代码)

        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递归函数传入指定的根和节点名       

        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

 

  问题:

  haschildnodes()这个方法好奇怪,明明已经没有子节点了,却仍然返回true,

  比如<TestResult>1</TestResult>这个节点,它的childNodes.item(0).nodeName竟然是“#text”,但是根据例子来看TestResult已经没有子节点了阿

  回答:

  因为在xml有一个特殊的“子节点”——文本节点。比如 <TestResult>100</TestResult>

  这个节点TestResult下并不是没有子节点,而是有一个文本节点,这个节点的nodeName就是“#text”,而nodeValue是100.如果是 <TestResult/> 这种节点的话,那么用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操作xml文件的方法,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部