【QTP】【头脑风暴】如何在脚本运行时,Log中能记录当前进入的函数
上一篇 / 下一篇 2013-01-25 17:02:00 / 个人分类:QTP
在坛子里发了个帖子:
【头脑风暴】如何在脚本运行时,Log中能记录当前进入的函数
好吧,那我来抛砖引玉一下~比如:我在外部vbs文件中写入一段脚本,是个log工具的class:
Set Lg = new LogTools '实例化 LogTools Class LogTools Dim LogFileName 'log文件名 Dim LogFilePath 'log文件路径 Dim isPtLog '是否打印日志 Dim NowFunctionDir '当前Function的路径 Sub Class_Initialize Call NewLogFolder Call NewLogFile Depth = 0 End Sub Sub Class_Terminate End Sub '------------------------------------------------------------------------------ '返值:log文件名 Property Get getLogFileName() '处理 LogFileName If IsEmpty(LogFileName) Then LogFileName = "log" & getUniqueNumber & ".txt" End If getLogFileName = LogFileName End Property '------------------------------------------------------------------------------ '返值:log文件路径 Property Get getLogFilePath() '处理 LogFilePath If IsEmpty(LogFilePath) Then LogFilePath = Environment("TestDir") & "\LOG\" & getLogFileName getLogFilePath = LogFilePath End Property '------------------------------------------------------------------------------ '返值:当前Function的路径 Property Get getNowFunctionDir() getNowFunctionDir = NowFunctionDir End Property '------------------------------------------------------------------------------ '属性:是否打印 log Property Let isPrintLog(ByVal oValue) isPtLog = oValue isPrintLog = isPtLog End Property Property Get isPrintLog() If IsEmpty(isPtLog) Then '给默认值 isPtLog = True End If isPrintLog = isPtLog End Property '------------------------------------------------------------------------------ '作用:新建Log文件夹 Sub NewLogFolder() Dim FSO , FolderDir Set FSO = CreateObject("Scripting.FileSystemObject") FolderDir = Environment("TestDir") & "\LOG" If Not(FSO.FolderExists(FolderDir)) Then FSO.CreateFolder(FolderDir) End If Set FSO = Nothing End Sub '------------------------------------------------------------------------------ '作用:新建Log文件 Sub NewLogFile() '新建文件 Dim FSO Const ForReading=1,ForWriting=2,ForAppending=8 '参数赋值(1:只读,2:只写,3:追加) Set FSO = CreateObject("Scripting.FileSystemObject") '创建一个文本对象 Set LOGFILE = FSO.OpenTextFile(getLogFilePath,8,true) wait 3 Set LOGFILE = Nothing Set FSO = Nothing End Sub '------------------------------------------------------------------------------ '作用:重写 Log '参数:oWords:需要打印的内容 Sub Log(oWords) '是否打印的判断 If isPrintLog = False Then Exit Sub '处理打印内容 oWords = "[" & now & "] [" & NowFunctionDir & "] " & oWords 'Log 写入QTP print oWords 'LOG 写入外部文件 Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") Set ologFile = FSO.OpenTextFile(getLogFilePath, 8, true) ologFile.WriteLine (CStr(oWords)) ologFile.Close Set ologFile = Nothing Set FSO = Nothing End Sub '------------------------------------------------------------------------------ '作用:进入 Function 时的标记 '参数:oFunctionName:Function名 Sub GoIn(oFunctionName) NowFunctionDir = NowFunctionDir & ">>" & oFunctionName Log "-------------------进入<" & oFunctionName & ">-------------------" End Sub '------------------------------------------------------------------------------ '作用:出 Function 时的标记 Sub GoOut() Dim arrFunDir arrFunDir = split(NowFunctionDir , ">>" , -1 , 1) Log "-------------------退出<" & arrFunDir(ubound(arrFunDir)) & ">-------------------" NowFunctionDir = "" Dim i For i = 1 To ubound(arrFunDir) - 1 NowFunctionDir = NowFunctionDir & ">>" & arrFunDir(i) Next End Sub '------------------------------------------------------------------------------ '作用:得到一个唯一的值 Function getUniqueNumber() Dim yyyy,mm,dd,ss Dim nowtime nowDate = date nowTimer = cstr(int(timer)) yyyy = CStr(Year(nowDate)) mm = CStr(String(2 - Len(Month(nowDate)) , "0") & Month(nowDate)) dd = CStr(String(2 - Len(Day(nowDate)) , "0") & Day(nowDate)) ss = CStr(String(5 - Len(nowTimer) , "0") & nowTimer) GetUniqueNumber = yyyy & mm & dd & ss End Function End Class |
然后,在Action中随便写一点调用函数的测试脚本:
lg.Log "开始示范" Call Main Public Sub Main() lg.GoIn "Main" '---------------------------------------------------------- lg.Log "我在Main函数里111" Call test1() lg.Log "我在Main函数里222" lg.isPrintLog = False '关闭LOG打印 lg.Log "这个不会出现的" '---------------------------------------------------------- lg.GoOut End Sub Function test1() lg.GoIn "test1" '---------------------------------------------------------- lg.Log "我在test1函数里111" Call test2() lg.Log "我在test1函数里222" '---------------------------------------------------------- lg.GoOut End Function Function test2() lg.GoIn "test2" '---------------------------------------------------------- lg.Log "我在test2函数里" '---------------------------------------------------------- lg.GoOut End Function |
运行后,打印的结果是:
[2013/1/25 16:52:55] [] 开始示范
[2013/1/25 16:52:55] [>>Main] -------------------进入<Main>-------------------
[2013/1/25 16:52:55] [>>Main] 我在Main函数里111
[2013/1/25 16:52:55] [>>Main>>test1] -------------------进入<test1>-------------------
[2013/1/25 16:52:55] [>>Main>>test1] 我在test1函数里111
[2013/1/25 16:52:55] [>>Main>>test1>>test2] -------------------进入<test2>-------------------
[2013/1/25 16:52:55] [>>Main>>test1>>test2] 我在test2函数里
[2013/1/25 16:52:55] [>>Main>>test1>>test2] -------------------退出<test2>-------------------
[2013/1/25 16:52:56] [>>Main>>test1] 我在test1函数里222
[2013/1/25 16:52:56] [>>Main>>test1] -------------------退出<test1>-------------------
[2013/1/25 16:52:56] [>>Main] 我在Main函数里222
当然在这个脚本的目录下的LOG文件夹内,也会有个这样内容的文本文件。
但这段脚本有个小毛病,如果我用Exit Function写在中间,就必须在Exit Function前写上一句lg.Log,不然[]中的记录会错位。
但这段脚本有个小毛病,如果我用Exit Function写在中间,就必须在Exit Function前写上一句lg.Log,不然[]中的记录会错位。
请各位如果有什么想说的经过留言或到上面的地址里发帖。
畅所欲言~
相关阅读:
- 你没有准备好成为一个安全测试人员的前10个迹象 (xin_晴, 2013-2-07)
- 敏捷测试头脑风暴 (xin_晴, 2013-2-01)
- Loadrunner脚本开发的URL编码问题 (xin_晴, 2013-1-29)
- 敏捷测试与传统测试的区别 (xin_晴, 2013-2-07)
- 我的软件测试实践(敏捷测试+探索测试) (xin_晴, 2013-2-01)
- 论测试与开发的关系 (xin_晴, 2013-1-30)
- 软件测试执行时由广度优先到深度优先的逐渐转变 (xin_晴, 2013-2-04)
- 软件开发的几个模式对软件测试的影响 (xin_晴, 2013-2-04)
- 软件测试工程师工作定位之我见 (xin_晴, 2013-1-30)