请教如何解析QTP自动生成的测试报告
我想获取QTP自动生成的测试报告(test目录/Res*/Report/Results.xml)里的Passed或Failed的字符串,然后写到excel里去但是QTP的这个xml结果文件格式好像不是传统的<节点>值<节点>这样的结构,我用以下解析xml文档的vbs函数时报错“文档格式不正确,原因是:根据DTD/Schema,元素内容无效”
下面是网上找的xml文档的vbs代码,解析<节点>值<节点>这样的没问题:
'==================================================================
' Author: songfun
'
'Description :Read XML
'==================================================================
Dim strXML
GetXml "D:\snow\QTP\for topkick\FTP_Upload\Res11\Report\Results.xml","Action"'这个函数的第一个参数表示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
IfxmlNode.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
请教如何获取测试报告里Passed或Failed的字符串呢? 如果想做自定义报告,pass和fail完全可以测试脚本中做验证点判断实现,不一定要读QTP的结果文件。。。
觉得麻烦直接封装函数,或者重写REPORT方法~ 原帖由 zzxxbb112 于 2010-1-27 13:39 发表 http://bbs.51testing.com/images/common/back.gif
如果想做自定义报告,pass和fail完全可以测试脚本中做验证点判断实现,不一定要读QTP的结果文件。。。
觉得麻烦直接封装函数,或者重写REPORT方法~
谢谢!
但是还有种异常错误的情况,如找不到对象这样的异常该怎么捕获呢? 1.可以exist函数判断根据它的返回值捕捉~
如果觉得每次写很繁琐,可以写进注册函数~
写入自定义日志也可以~可以方便查找~
2.场景恢复 其实要写入EXCEL测试结果,在你的自动化设计阶段就应该考虑进去
然后在写脚本的时候,就有很多验证点,凡是验证点不通过的则退出脚本,或者有的不严重的可以继续执行下去,但是写一个小小的程序,假设如果发生过错误的,就把标识符变量改成1,脚本的最后写个判断,IF OBJECT=1,则将FAILD写入EXCEL反之一样,给一个思路,其实脚本可以写的很活,写脚本前一定要经过设计 赞同2楼,没必要那么烦,去调XML里的节点内容 多谢两位!
又学到了东西~ 呵呵,帮忙解决问题是一种态度:lol 呵呵 1.前提:
我框架的大概是以下逻辑:
每一个用例脚本都写在vbs中以单个函数的形式存在(即:一个用例对应一个函数名,用例根据分类不同存在于不同的vbs文件中)。
运行所有的用例时,调一次QTP的Test,在Test的Action中使用Execute functionName来循环执行我要执行的所有用例。
2.我现在想把每次运行时,每个用例的名称和运行结果写入Excle,如以下形式:
A B C
01Login Pass
02Order Fail
03LogOut Pass
3.我的实现方式和所遇到的问题:
法一: qtApp.Test.LastRunResults.Status
因为我执行我的用例脚本(实质为:函数)的实现办法为:调一次QTP的Test,在Test的Action中使用Execute functionName来循环执行我要执行的所有用例。
所以导致我获取到的qtApp.Test.LastRunResults.Status 永远为running(除非是QTP弹出的错误,才为Fail)
(******难道真的无法获取到每个测试用例(即函数的)的LastRunResults.Status吗??如果可以的话能否指点下思路???******)
法二:借助函数中的Exist或者检查点等写一个阀值来
比如函数Test的阀值PF(PF作为函数的返回值来使用):
Public Function Test()
If 1= 1 Then
Reporter.ReportEvent micPass,"提示信息: 成功!","进行数据库表检查!"
PF = "pass"
Else
Reporter.ReportEvent micPass ,"提示信息: 失败!","进行数据库表检查出错!"
PF = "fail"
End If
Test = PF
End Function
遇到的问题时因为我使用Execute functionName来执行用例,所以获取不到函数的返回值。
(******函数的返回值在哪,为甚么我获取不到函数的返回值??怎么获取函数的返回值????******)
最后我只能把PF写到环境变量Result里,直接通过获取函数的环境变量来获取函数的返回值,见下:
Public Function Test()
If 1= 1 Then
Reporter.ReportEvent micPass,"提示信息: 成功!","进行数据库表检查!"
PF = "pass"
Else
Reporter.ReportEvent micPass ,"提示信息: 失败!","进行数据库表检查出错!"
PF = "fail"
End If
Test = PF
Environment("Result") = Test
End Function
(******不知道我这么解决是否正确?如果不正确的话能否指点下??******) zzxxbb和yujie两位,能不能帮我指点下思路?
页:
[1]