51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4138|回复: 10
打印 上一主题 下一主题

[原创] 请教如何解析QTP自动生成的测试报告

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-1-27 13:33:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想获取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
                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

请教如何获取测试报告里Passed或Failed的字符串呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-1-27 13:39:59 | 只看该作者
如果想做自定义报告,pass和fail完全可以测试脚本中做验证点判断实现,不一定要读QTP的结果文件。。。
觉得麻烦直接封装函数,或者重写REPORT方法~
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2010-1-27 13:43:56 | 只看该作者
原帖由 zzxxbb112 于 2010-1-27 13:39 发表
如果想做自定义报告,pass和fail完全可以测试脚本中做验证点判断实现,不一定要读QTP的结果文件。。。
觉得麻烦直接封装函数,或者重写REPORT方法~

谢谢!
但是还有种异常错误的情况,如找不到对象这样的异常该怎么捕获呢?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2010-1-27 13:51:36 | 只看该作者
1.可以exist函数判断  根据它的返回值捕捉~
如果觉得每次写很繁琐,可以写进注册函数~
写入自定义日志也可以~可以方便查找~

2.场景恢复
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2010-1-27 14:07:22 | 只看该作者
其实要写入EXCEL测试结果,在你的自动化设计阶段就应该考虑进去

然后在写脚本的时候,就有很多验证点,凡是验证点不通过的则退出脚本,或者有的不严重的可以继续执行下去,但是写一个小小的程序,假设如果发生过错误的,就把标识符变量改成1,脚本的最后写个判断,IF OBJECT=1,则将FAILD写入EXCEL反之一样,给一个思路,其实脚本可以写的很活,写脚本前一定要经过设计
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2010-1-27 14:08:13 | 只看该作者
赞同2楼,没必要那么烦,去调XML里的节点内容
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2010-1-27 16:00:53 | 只看该作者
多谢两位!
又学到了东西~
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2010-1-27 20:08:26 | 只看该作者
呵呵,帮忙解决问题是一种态度
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2010-2-3 13:02:20 | 只看该作者
呵呵
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2012-5-29 10:20:28 | 只看该作者
1.前提:
我框架的大概是以下逻辑:
每一个用例脚本都写在vbs中以单个函数的形式存在(即:一个用例对应一个函数名,用例根据分类不同存在于不同的vbs文件中)。
运行所有的用例时,调一次QTP的Test,在Test的Action中使用Execute   functionName来循环执行我要执行的所有用例。
2.我现在想把每次运行时,每个用例的名称和运行结果写入Excle,如以下形式:
A   B        C
01  Login    Pass
02  Order    Fail
03  LogOut   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
   (******不知道我这么解决是否正确?如果不正确的话能否指点下??******)
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2012-5-29 20:18:55 | 只看该作者
zzxxbb和yujie两位,能不能帮我指点下思路?
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-22 07:59 , Processed in 0.073678 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表