目前,企业中对XML的应用越来越广泛,作为自动化测试的测试工程师,也应该掌握XML的读写操作。 以下我使用XML DOM技术演示一个例子,用以读取XML指定节点的节点内容值。
欢迎光临!4mC3atestingsfwtruE9
读取函数原型 GetXml strXmlPath,nodeName
欢迎光临!4mC3atestingsfwtruE9
这个函数的第一个参数表示xml文件所在路径,第二个参数表示希望获取到的xml节点名,请结合下列例子看
欢迎光临!4mC3atestingsfwtruE9
首先,新建一个vbs文件(取个名字叫readXml.vbs),输入代码:
CODE:
'==================================================================
欢迎光临!4mC3atestingsfwtruE9
Author : songfun
欢迎光临!4mC3atestingsfwtruE9
欢迎光临!4mC3atestingsfwtruE9
' Descrīption : Read XML
欢迎光临!4mC3atestingsfwtruE9
==================================================================
欢迎光临!4mC3atestingsfwtruE9
Dim strXML
欢迎光临!4mC3atestingsfwtruE9
GetXml "c:\search.xml","TestResult" '这个函数的第一个参数表示xml文件所在路径,第二个参数表示希望获取到的xml节点名,请结合下列例子看
欢迎光临!4mC3atestingsfwtruE9
MsgBox strXML
欢迎光临!4mC3atestingsfwtruE9
Function GetXml (ByVal strXmlFilePath,ByVal xmlNodeName)
欢迎光临!4mC3atestingsfwtruE9
Dim xmlDoc,xmlRoot
欢迎光临!4mC3atestingsfwtruE9
欢迎光临!4mC3atestingsfwtruE9
Set xmlDoc = CreateObject("Microsoft.XMLDOM") '创建XML DOM对象
欢迎光临!4mC3atestingsfwtruE9
xmlDoc.async = False '控制加载模式为同步模式(xml树加载完毕后再执行后续代码)
欢迎光临!4mC3atestingsfwtruE9
xmlDoc.load strXmlFilePath '载入xml文件
欢迎光临!4mC3atestingsfwtruE9
If xmlDoc.parseError.errorCode <> 0 Then
欢迎光临!4mC3atestingsfwtruE9
MsgBox "XML文件格式不对,原因是:" & Chr(13) & xmlDoc.parseError.reason Exit Function
欢迎光临!4mC3atestingsfwtruE9
End If
欢迎光临!4mC3atestingsfwtruE9
Set xmlRoot = xmlDoc.documentElement
欢迎光临!4mC3atestingsfwtruE9
xmlRecursion xmlRoot,xmlNodeName '调用xml递归函数传入指定的根和节点名
欢迎光临!4mC3atestingsfwtruE9
GetXml = True 'xmlRecursion (xmlRoot)
欢迎光临!4mC3atestingsfwtruE9
End Function
欢迎光临!4mC3atestingsfwtruE9
Function xmlRecursion(byval xmlNode,byval strNodeName) If xmlNode.nodeName = strNodeName And xmlNode.hasChildNodes Then
欢迎光临!4mC3atestingsfwtruE9
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
欢迎光临!4mC3atestingsfwtruE9
For Each childNodeItem In xmlNode.ChildNodes
欢迎光临!4mC3atestingsfwtruE9
If childNodeItem.hasChildNodes Then
欢迎光临!4mC3atestingsfwtruE9
xmlRecursion childNodeItem,strNodeName
欢迎光临!4mC3atestingsfwtruE9
欢迎光临!4mC3atestingsfwtruE9
Next
欢迎光临!4mC3atestingsfwtruE9
End If
欢迎光临!4mC3atestingsfwtruE9
End Function接着,自己构造一个xml文件(取个名字叫search.xml),如:
CODE:
<?xml version="1.0" encoding="GB2312"?>
欢迎光临!4mC3atestingsfwtruE9
欢迎光临!4mC3atestingsfwtruE9
<ROOT>
欢迎光临!4mC3atestingsfwtruE9
<TestCase>
欢迎光临!4mC3atestingsfwtruE9
<TestNumberOne>1</TestNumberOne>
欢迎光临!4mC3atestingsfwtruE9
<TestNumberTwo>2</TestNumberTwo>
欢迎光临!4mC3atestingsfwtruE9
<TestNumberThree>+</TestNumberThree>
欢迎光临!4mC3atestingsfwtruE9
<TestResult>3</TestResult>
欢迎光临!4mC3atestingsfwtruE9
</TestCase>
欢迎光临!4mC3atestingsfwtruE9
<TestCase>
欢迎光临!4mC3atestingsfwtruE9
<TestNumberOne>3</TestNumberOne>
欢迎光临!4mC3atestingsfwtruE9
<TestNumberTwo>2</TestNumberTwo>
欢迎光临!4mC3atestingsfwtruE9
<TestNumberThree>-</TestNumberThree>
欢迎光临!4mC3atestingsfwtruE9
<TestResult>1</TestResult>
欢迎光临!4mC3atestingsfwtruE9
</TestCase>
欢迎光临!4mC3atestingsfwtruE9
<TestCase>
欢迎光临!4mC3atestingsfwtruE9
<TestNumberOne>3</TestNumberOne>
欢迎光临!4mC3atestingsfwtruE9
<TestNumberTwo>7</TestNumberTwo>
欢迎光临!4mC3atestingsfwtruE9
<TestNumberThree>*</TestNumberThree>
欢迎光临!4mC3atestingsfwtruE9
<TestResult>21</TestResult>
欢迎光临!4mC3atestingsfwtruE9
</TestCase> <TestCase>
欢迎光临!4mC3atestingsfwtruE9
<TestNumberOne>2</TestNumberOne>
欢迎光临!4mC3atestingsfwtruE9
<TestNumberTwo>5</TestNumberTwo>
欢迎光临!4mC3atestingsfwtruE9
<TestNumberThree>/</TestNumberThree>
欢迎光临!4mC3atestingsfwtruE9
<TestResult>0.4</TestResult> </TestCase>
欢迎光临!4mC3atestingsfwtruE9
</ROOT>
然后,在QTP的expert view中调用刚才写的vbs文件:
欢迎光临!4mC3atestingsfwtruE9
executefile "c:\readXml.vbs"
点“Run”,就能看到这个效果了。
欢迎光临!4mC3atestingsfwtruE9
当然,如果你不用调用外部文件的方式,也可以,如下图。
欢迎光临!4mC3atestingsfwtruE9
欢迎光临!4mC3atestingsfwtruE9
欢迎光临!