oftime999 发表于 2007-6-18 14:48:22

QTP日志实践的几点总结

背景:在日常使用QTP中,因为有QC的存在,导致了QTP的察看结果的功能并不是用的很顺手,所以笔者在脱离开QC的情况下,在工作实践中总结了QTP的日志实现的一些方法。
1、生成txt文件。这是从开发那边得到的启示。
首先定义一个sub:
Public Sub WriteLineToFile(message)
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fileSystemObj, fileSpec
Dim currentTime
currentDate = Date
currentTime = Time
testName = "log"
Set fileSystemObj = CreateObject("scrīpting.FileSystemObject")
fileSpec ="C:\" &testName& ".txt" 'change this according to your directory
If Not (fileSystemObj.FileExists(filespec)) Then
Set logFile = fileSystemObj.CreateTextFile(fileSpec, ForWriting, True)
logFile.WriteLine ("#######################################################################")
logFile.WriteLine (currentDate & currentTime & " Test: " & environment.Value("TestName") )
logFile.WriteLine ("#######################################################################")
logFile.Close
Set logFile = Nothing
End If
Set logFile = fileSystemObj.OpenTextFile(fileSpec, ForAppending, False, True)
logFile.WriteLine (currentDate & currentTime & " " & message)
logFile.Close
Set logFile = Nothing
Set fileSystemObj = Nothing
End Sub      
这样就能在txt中直接明了的看到自己的日志了。(个人感觉比看QTP的results好多了了,当然QTP自身的results还有错误图片等等,下面会介绍我的解决方案)

题外话:在实际应用中,我会在sub中增加一个flag,来标志不同的严重等级,在不同的情况下控制输出不一样类型的日志。
2、使用QTP自身的抓图功能
Public Function capture_desktop()
Dim datestamp
Dim filename
datestamp = Now()
filename = Environment("TestName")&"_"&datestamp&".png"
filename = Replace(filename,"/","")
filename = Replace(filename,":","")
filename = "C:\QTP_ScreenShots"&""&filename
Desktop.CaptureBitmap filename
Reporter.ReportEvent micFail,"image","<img src='" & filename & "'>"
End Function
该函数主要就是用到Desktop.CaptureBitmap的这个方法,把桌面的图片抓下来,这样比较自由的抓下任意时候桌面的图片,方便我们检查结果。

题外话:可以通过Function的返回值和上面提到的方法结合在一起的话,效果会更好的。
3、使用outlook发送邮件
Public Sub SendEmail(testname,strsubject,stremailcontent,attachment,strrecipient)
Set out = CreateObject("Outlook.Application")
Set mapi = out.GetNameSpace("MAPI")
Set email = out.CreateItem(0)
email.Recipients.Add(strrecipient)
email.Subject = strsubject
email.Body = stremailcontent
Set oAttachment = email.Attachments.Add(attachment)
email.Send
Set outlook = Nothing
Set mapi = Nothing
End Sub

题外话:假如我们把日志和抓图都结合在一起作为附件发出去的话,在自动化测试中后期会很有用,当然前提是不使用QC的情况下。

4、这是一个针对上面第3点如何把抓图放在一个doc中。
Set oWord = CreateObject("Word.Application")
oWord.DisplayAlerts = False
oWord.Visible = False
oWord.documents.open "testWordDoc.doc"
Set oDoc = oWord.ActiveDocument
Set oRange = oDoc.content
oRange.ParagraphFormat.Alignment = 0
oRange.insertafter vbcrlf '& " " & vbcrlf
oRange.collapse(0)
oRange.InlineShapes.AddPicture "ImagePath.bmp", False, True
oWord.ActiveDocument.Save
oWord.Application.Quit True
Set oRange = Nothing
Set oDoc = Nothing
Set oWord = Nothing
当然QTP和excel,word结合的不错的,所以在测试中灵活运动,效果会很好的。

wtucel 发表于 2007-6-18 23:19:10

mark 谢谢楼主的经验
我也是打算把测试的结果直接写入到一个文档中,这样直观,而且还不用再手动写测试报告了
没想到还可以把图片这些也插入到文档中

rivermen 发表于 2007-6-19 09:29:19

3,4有没有相关的参数解释,和使用范例?

call SendEmail ("aa","邮件主题","邮件内容","c:\邮件的附件.txt","接收地址@hotmail.com")

调用outlook的时候还有中断


[ 本帖最后由 rivermen 于 2007-6-19 10:19 编辑 ]

rivermen 发表于 2007-6-19 15:11:28

转载借鉴:
http://www.17testing.com/bbs/viewthread.php?tid=8092&extra=page%3D1

'粘贴我的试验成果:


' 脚本运行之初,最小化QTP窗口
MinimizeWindow


' 定义此次脚本运行的工作路径
Dim filepath
filepath=environment("TestDir")
bmpFileName=filepath & "\capture_desktop.bmp"

'在产生附件(抓屏和报告)之前,把同名的旧的文件删除
DeleteSource filepath

' 调用方法进行抓屏
call capture_desktop (bmpFileName)

' 创建Word对象作为测试报告,并把抓屏的图片插入到报告中
call CreateWord(filepath)

' 把Word测试报告作为附件进行发送
call SendEmail ("aa","邮件主题","邮件内容",filepath & "\TestReport.doc","aaa@126.com")

Public function capture_desktop (filepath)
'Dim datestamp
'Dim filename
'datestamp = Now()
'filename = Environment("TestName")&"_"&datestamp&".png"
'filename = Replace(filename,"/","")
'filename = Replace(filename,":","")
'filename = "C:\QTP_ScreenShots\"&""&filename
Desktop.CaptureBitmap filepath
'Reporter.ReportEvent micFail,"image","<img src='" & filename & "'>"
End function




Public Sub SendEmail(testname,strsubject,stremailcontent,attachment,strrecipient)
Set out = CreateObject("Outlook.Application")
Set mapi = out.GetNameSpace("MAPI")
Set email = out.CreateItem(0)
email.Recipients.Add(strrecipient)
email.Subject = strsubject
email.Body = stremailcontent
Set oAttachment = email.Attachments.Add(attachment)
email.Send
Set outlook = Nothing
Set mapi = Nothing
End Sub


Sub CreateWord(filepath)
   Set oWord = CreateObject("Word.Application")
        oWord.DisplayAlerts = False
        oWord.Visible = False

       
'oWord.documents.open "c:\testWordDoc1.doc"
'Set oDoc = oWord.ActiveDocument
Set oDoc=oWord.Documents.add
' 临时创建一个新的word对象,对象尚未命名


Set oRange = oDoc.content
oRange.ParagraphFormat.Alignment = 0
oRange.insertafter "这是一个测试报告:"
oRange.insertafter vbcrlf '& " " & vbcrlf
oRange.collapse(0)
oRange.InlineShapes.AddPicture filepath & "\capture_desktop.bmp", False, True

'oWord.ActiveDocument.Save
oDoc.saveas filepath & "\TestReport.doc"

oWord.Application.Quit True
Set oRange = Nothing
Set oDoc = Nothing
Set oWord = Nothing

End Sub



sub DeleteSource(filepath)
   On error resume next
        Set fso=CreateObject("Scripting.FileSystemObject")
        fso.deletefile filepath &"\capture_desktop.bmp"
        fso.deletefile filepath &"\TestReport.doc"
        Set fso=nothing
end sub



'MinimizeWindow()
Sub MinimizeWindow
        Dim objQTPWin
        Set objQTPWin = GetObject("" , "QuickTest.Application")
        objQTPWin.WindowState = "Minimized"
        Set objQTPWin = Nothing
'其中objQTPWin.WindowState还支持最大化"Maxmized"和恢复"Restored"状态,如果把上面的代码包装成一个函数,就是根据需要在测试运行中
'随时改变QTP窗口的状态了。

'除了最小化以外,还可以利用QTP窗口对象的Visible属性隐藏QTP窗口。
'Dim objQTPWin
'Set objQTPWin = GetObject("" , "QuickTest.Application")
'objQTPWin.Visible = False
'Set objQTPWin = Nothing

end sub

[ 本帖最后由 rivermen 于 2007-6-20 13:21 编辑 ]

rickcui 发表于 2007-6-19 15:44:32

这么强的帖子一定要留名!!

风过无息 发表于 2007-6-20 10:12:26

这个不是我在17testing的征文帖子,怎么被弄到这里来拉!

[ 本帖最后由 风过无息 于 2007-6-20 12:14 编辑 ]

冰焰琉璃 发表于 2007-6-20 11:19:19

9494sdlkfj4

LZ盗版

风过无息 发表于 2007-6-20 12:15:40

原帖由 rivermen 于 2007-6-19 09:29 发表 http://bbs.51testing.com/images/common/back.gif
3,4有没有相关的参数解释,和使用范例?

call SendEmail ("aa","邮件主题","邮件内容","c:\邮件的附件.txt","接收地址@hotmail.com")

调用outlook的时候还有中断
27653
关于这个问题,我是下载了一个CLICK YES的工具,自动帮我点击的,

liwens 发表于 2007-6-20 12:59:47

就是啊,是17testing的征文,转贴也说明出处啊。

阳光_测试_生活 发表于 2007-6-20 13:03:11

需要注明转载

wwwux 发表于 2007-6-20 14:26:48

楼主不厚道了!

rivermen 发表于 2007-6-20 15:28:15

后面的人有起哄的嫌疑了,BZ有没有编辑别人贴子的权限?声明一下转载自17testing的就是了

毕竟17testing 的这个贴:



我没有看过原文sdlkfj7

[ 本帖最后由 rivermen 于 2007-6-20 17:41 编辑 ]

风过无息 发表于 2007-6-20 17:24:53

楼上的,问题楼主照抄了,没有编辑啊!

wtucel 发表于 2007-6-22 00:06:20

现在知道怎么去写入WORD文档了,但是有个问题,我想按测试报告的模板那样用QTP写入到word中去,但是测试报告模板中有表格,也有的字体大小也不一样,怎么去实现??还有帖子的范列中也只是写入一行,如果我要写入多行又怎么办呢?

Jerry_zhiyuan 发表于 2007-6-23 16:10:30

支持一下,好东西

jane_li 发表于 2007-6-23 16:57:06

学习了
真是好资料

aishary 发表于 2007-6-25 13:28:49

暂时还没学到这地步,先收藏了。sdlkfj3

fionamm 发表于 2007-6-26 11:32:05

收藏了,日后将学习,呵呵sdlkfj3

gx020104010031 发表于 2007-6-26 16:53:44

好东西 要学习,大家共享吗!!!
不过,我怎么连QTP的使用都觉得困难呢,就不要说写脚本了sdlkfj7 sdlkfj7

zyezye_2005 发表于 2007-7-2 10:59:54

先收藏~
页: [1] 2
查看完整版本: QTP日志实践的几点总结