51Testing软件测试论坛

标题: 请教如何将qtp的测试结果输出 [打印本页]

作者: hotmail624    时间: 2007-7-5 19:50
标题: 请教如何将qtp的测试结果输出
大家好
想问一个问题,

如 我测试一个用例 ,名为A
我也执行了这个用例

现在我想当我执行完 这个用例

我不用去result里面去看我的运行结果

我直接生成到一个excel文件理

summary里面的状态,直接告诉我 这个用例是pass 还是failed


请问我该如何操作呢 多谢了/

xlApp.SheetsInNewWorkbook=1  
set xlBook=xlApp.WorkBooks.Add
Set xlSheet=xlBook.WorkSheets(1)
xlSheet.name="测试报告"
xlSheet.Cells(1,1)="脚本名称"
xlSheet.Cells(1,2)="测试结果"
'依次根据测试结果设置xlSheet.Cells(i,1)和xlSheet.Cells(i,2)
'xlSheet.Cells(2.1)="自动测试"
'xlSheet.Cells(2.2)="pass"
xlBook.SaveAs "D:\Boss_AutoTest\Auto_test.result.xls"
xlBook.close
xlApp.Quit '结束EXCEL对象
Set xlApp = Nothing '释放xlApp对象


'依次根据测试结果设置xlSheet.Cells(i,1)和xlSheet.Cells(i,2)  也就是这一部分的实现方式.
作者: ybbiagu    时间: 2007-7-5 21:12
程序写的不错啊,这样就行了呀,把写的操作放到脚本里就好了,
if  true  then   
   result = "pass"
else
   result = "failed"
end if
xlsheet.cells(i,2)=result
这样不行吗?
作者: hotmail624    时间: 2007-7-5 21:18
目前 我就是不知道如何能拿到本次运行的结果 也就是
if  true  then   
   result = "pass"
else
   result = "failed"
end if
判断哪个变量?以及我如何拿到我当前的测试脚本的名字,来作为的我的测试用例名称./
多谢了
呵呵

你的true和false通过什么来判断,
作者: winfood    时间: 2007-7-5 23:02
我也比较关注这个问题,但是暂时没有时间来解决。单独的QTP工具除了固定格式的测试结果,好像没有其他输入测试结果的功能。

我觉得单单从外部准备好Excel或者其他格式的文件来记录测试结果并不够,因为QTP没有提供True和False的机制(没有查到)。这种解决方法可能需要和测试脚本里面主动输出结果相结合才算完整。举例来说,在一个脚本里面设计一个Boolean型的变量,然后随着脚本的执行给该变量赋True或者False。在测试脚本的最后把该值转化为结果输出到外部报告中:

  1. Dim blnTestResult
  2. blnTestResult= True

  3. 'Code blocks
  4. '... ...

  5. 'Here is an instance of Checkpoint, consolidate the return value from the checkpoint with blnTestResult
  6. blnTestResult = CBool(blnTestResult and ***.Check(CheckPoint(***)))

  7. 'Code blocks
  8. '... ...

  9. 'Here's an instance of the method Exist
  10. If ***.Exist(1) Then
  11.     blnTestResult = CBool(blnTestResult and True)
  12. Else
  13.     blnTestResult = CBool(blnTestResult and False)
  14. End If

  15. 'Code blocks
  16. '... ...

  17. 'Output the test result to your external report file
  18. '----It means the test case passed if blnTestResult equals to True
  19. '----Otherwise it means failed
  20. If blnTestResult Then
  21.     ... ...
  22. Else
  23.     ... ...
  24. End If
复制代码

[ 本帖最后由 winfood 于 2007-7-5 23:06 编辑 ]
作者: MarsNoNo    时间: 2007-7-6 02:39
我还有点不太明白LZ的意思,有点糊涂~~~说说我的想法吧。你能不能把你所有的用例都写在一个xls文件中,利用QTP的数据驱动,将所有的输入都读出来,执行之~~~,再取得QTP输出的实际结果和你xls文件中的预期结果进行比较,一致,“pass”;相反,“failed”。最后,把你所得到的实际结果和所跑用例的状态再写进刚才的那个xls文件中,分别以不同的字体颜色来表示,就可以了啊!
p.s.:太晚了,脑子有点不好使,代码就不写了,能不能这样搞,xls文件内容如下:
caseID            input1         input2     expvalue     actvalue      result
1                     **              **           ***             **          failed
2                      *              ***          ***            ***          pass
.....................................................

哦,改xls字体颜色用的函数为:xlSheet.cells(i,j).font.color = vbred/vbgreen/vbbule........
作者: danmy    时间: 2007-7-6 09:17
我一般是在action中加一个输出参数,将该参数输出到结果中。另外专门写一个日志函数
作者: danmy    时间: 2007-7-6 09:21
原帖由 MarsNoNo 于 2007-7-6 02:39 发表
我还有点不太明白LZ的意思,有点糊涂~~~说说我的想法吧。你能不能把你所有的用例都写在一个xls文件中,利用QTP的数据驱动,将所有的输入都读出来,执行之~~~,再取得QTP输出的实际结果和你xls文件中的预期结果进 ...


这位老兄的想法也是我最近在考虑的

但是excel中的代码读入后能被qtp正确执行嘛?qtp如何识别这些脚本?
作者: hotmail624    时间: 2007-7-6 10:33
我现在考虑 是否可以这样

我在每个检查点地方都会给我返回一个值,也就是checkpoint的地方,然后 我的action的true or  false  由所有的检查点的值 &出来,\如果所有的检查点的数据都是true 那么我的action就是true,然后写入日志
如果任意一个为false的话,那么我的action就是false.

这样不知道 QTP里面支持不支持,

不好意思 我刚搞这个东西,

另外还有一点的是,我通过什么函数或者方法或者属性 来拿到当前执行的脚本的名称..
因为我的case的名称和我的脚本的名称是一一对应
作者: hotmail624    时间: 2007-7-6 10:37
大家谁有现成的 能提供看看么 .
作者: pzhirui    时间: 2007-7-6 17:12
标题: 回复 #9 hotmail624 的帖子
学习中!
作者: MarsNoNo    时间: 2007-7-6 17:14
我用XP带的计算器做了一个简单的test,没考虑输出和输入参数这些问题,就只是为了说明QTP对xls文件的读写,我把要用到的xls文件也附上。我也是菜鸟,希望高手多多指点啊,大家共同学习进步嘛,代码如下:

Set xlApp = CreateObject("Excel.Application")
xlApp.application.visible=true
Set xlbook=xlApp.WorkBooks.Open("d:\nonodata.xls")
Set xlSheet = xlBook.Worksheets("Sheet1")
systemutil.Run "C:\windows\system32\calc.exe"

For i=2 to 5
        input1= xlSheet.cells(i,2).value
        expression = xlSheet.cells(i,3).value
        input2= xlSheet.cells(i,4).value
        expresult = xlsheet.cells(i,5).value
       
Window("计算器").Activate
Window("计算器").Type cstr(input1)
Window("计算器").WinButton("operator").SetTOProperty "text",cstr(expression)
Window("计算器").WinButton("operator").Click
Window("计算器").WinEdit("Edit").Type cstr(input2)
Window("计算器").WinButton("=").Click

outvalue = cstr(window("计算器").WinEdit("Edit").GetROProperty ("text"))
Window("计算器").WinButton("C").Click
actresult = replace(outvalue,".","")
If trim(cstr(expresult)) <> trim(cstr(actresult)) Then
        reporter.ReportEvent 1,"测试结果","失败"
        xlsheet.cells(i,7) = "NOK"
        xlsheet.cells(i,7).font.color = vbred
else
        reporter.ReportEvent 0,"测试结果","成功"
        xlsheet.cells(i,7) = "OK"
        xlsheet.cells(i,7).font.color = vbgreen
End If
xlSheet.cells(i,6) = actresult
xlSheet.cells(i,6).font.color = vbblue
Next
Window("计算器").Close

xlbook.save
xlApp.DisplayAlerts = False
xlbook.close(true)
xlApp.quit
Set excel=nothing



xls文件内容如下:

caseID        input1        expression        input2        expresult        actresult        conclusion
1        4        +        2        6               
2        3        -        2        1               
3        3        *        5        15               
4        6        /        2        20

我的QQ:15736525

[ 本帖最后由 MarsNoNo 于 2007-7-6 17:24 编辑 ]
作者: winfood    时间: 2007-7-6 20:56
原帖由 hotmail624 于 2007-7-6 10:33 发表
我现在考虑 是否可以这样

我在每个检查点地方都会给我返回一个值,也就是checkpoint的地方,然后 我的action的true or  false  由所有的检查点的值 &出来,\如果所有的检查点的数据都是true 那么我的action就是 ...

首先,你的想法没有问题。我在4楼的回帖已给了建议和Sample Code,再结合你自己的结果输出到外部Excel部分就完整了。Sample Code好像没有人看sdlkfj8

第二,获得当前脚本名称的方式是用QTP的环境对象(Environment)查询内置环境变量TestDir。

  1. MsgBox Environment.Value("TestName")
  2. 'Or
  3. MsgBox Environment("TestName")
复制代码

如果想了解详细情况,可以到QTP帮助里面查一下环境对象(Environment Object)和QTP的内置环境变量(Built-in Environment Variables)。
作者: xxxxwjj    时间: 2007-7-6 21:08
标题: 回复 #1 hotmail624 的帖子
用日志的形式就行
先建立个函数
Sub WriteLogMsg(str1)
Dim fso, MyFile
set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists(Environment("LogDir")+"QTPLog"+CStr(Date)+".txt") = false) Then
        fso.CreateTextFile(Environment("LogDir")+"QTPLog"+CStr(Date)+".txt")
End If
Set MyFile = fso.OpenTextFile(Environment("LogDir")+"QTPLog"+CStr(Date)+".txt", 8, True)
MyFile.WriteLine(str1)
MyFile.Close
Set MyFile=nothing
Set fso=nothing
End Sub


在脚本中调用
可以在脚本文件夹下生成个TXT文件

比如IF BROWSERS()............="....."
           WriteLogMsg(......)
例行工事
作者: pzhirui    时间: 2007-7-8 18:10
标题: 回复 #13 xxxxwjj 的帖子
学习中!
作者: danmy    时间: 2007-7-9 09:43
原帖由 hotmail624 于 2007-7-6 10:33 发表
我现在考虑 是否可以这样

我在每个检查点地方都会给我返回一个值,也就是checkpoint的地方,然后 我的action的true or  false  由所有的检查点的值 &出来,\如果所有的检查点的数据都是true 那么我的action就是 ...



这样肯定是可行的,脚本名称你可以在action里设定一个变量记录action的名称,写日志的时候把这个变量写进去就行了
作者: 笨笨小七    时间: 2011-10-26 09:29
回复 11# MarsNoNo


    请教个问题,我复制你的代码过来运行,自己添加了对象,怎么运行不成功?
作者: woddebbmm    时间: 2012-5-2 11:38
很关注这个问题 ,,强烈顶!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2