51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 4898|回复: 11
打印 上一主题 下一主题

[讨论] 【头脑风暴】如何在脚本运行时,Log中能记录当前进入的函数

[复制链接]
  • TA的每日心情
    无聊
    2018-9-27 10:05
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]测试团长

    跳转到指定楼层
    1#
    发表于 2013-1-24 15:32:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 黑羽祭 于 2013-1-24 15:58 编辑

    头脑风暴一下,如何在脚本运行时,Log中能记录当前进入的函数
    各位都是如何实现的?
    如:进入函数A,再进入函数B
    就是能很清楚的打印出 [A>>B]这样的一个路径
    当脚本出现问题,能很容易定位到是在[A>>B]还是[A>>C]的问题。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2018-9-27 10:05
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]测试团长

    2#
     楼主| 发表于 2013-1-24 15:33:08 | 只看该作者
    大家随意发言~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    5 天前
  • 签到天数: 941 天

    连续签到: 3 天

    [LV.10]测试总司令

    3#
    发表于 2013-1-24 15:42:37 | 只看该作者
    进来支持下。。。不错的话题!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-9-27 10:05
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]测试团长

    4#
     楼主| 发表于 2013-1-25 09:06:30 | 只看该作者
    厄~肿么没人说话呢~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 1197 天

    连续签到: 2 天

    [LV.10]测试总司令

    5#
    发表于 2013-1-25 11:42:54 | 只看该作者
    因为不会啊 不会打log呢
    最好是写一个共通 然后每个函数调一下这个共通

    共通应该是
    你进入一个函数就取得函数名  不知道有没有这个方法
    返回一个执行结果
    然后拼呗
    =====
    A OK
    B NG
    ====
    A OK
    C OK
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-9-27 10:05
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]测试团长

    6#
     楼主| 发表于 2013-1-25 16:58:26 | 只看该作者
    本帖最后由 黑羽祭 于 2013-1-25 17:00 编辑

    回复 5# 赵佳乐SMILE


        好吧,那我来抛砖引玉一下~比如:我在外部vbs文件中写入一段脚本,是个log工具的class:
    1. Set Lg   = new LogTools      '实例化 LogTools

    2. Class LogTools
    3.     Dim LogFileName        'log文件名
    4.     Dim LogFilePath           'log文件路径
    5.     Dim isPtLog                 '是否打印日志
    6.     Dim NowFunctionDir    '当前Function的路径
    7.    
    8.     Sub Class_Initialize
    9.         Call NewLogFolder
    10.         Call NewLogFile
    11.         Depth = 0
    12.     End Sub

    13.     Sub Class_Terminate
    14.         
    15.     End Sub
    16.    
    17.     '------------------------------------------------------------------------
    18.     '返值:log文件名
    19.     Property Get getLogFileName()  
    20.         '处理 LogFileName
    21.         If IsEmpty(LogFileName) Then
    22.             LogFileName = "log" & getUniqueNumber & ".txt"
    23.         End If
    24.         
    25.          getLogFileName = LogFileName
    26.     End Property
    27.    
    28.     '------------------------------------------------------------------------
    29.     '返值:log文件路径
    30.     Property Get getLogFilePath()
    31.         '处理 LogFilePath
    32.         If IsEmpty(LogFilePath) Then LogFilePath = Environment("TestDir") & "\LOG\" & getLogFileName
    33.         
    34.         getLogFilePath = LogFilePath
    35.     End Property
    36.    
    37.     '------------------------------------------------------------------------
    38.     '返值:当前Function的路径
    39.     Property Get getNowFunctionDir()
    40.         getNowFunctionDir = NowFunctionDir
    41.     End Property
    42.    
    43.     '------------------------------------------------------------------------------
    44.     '属性:是否打印 log
    45.     Property Let isPrintLog(ByVal oValue)
    46.          isPtLog = oValue
    47.          isPrintLog = isPtLog
    48.     End Property
    49.     Property Get isPrintLog()
    50.         If IsEmpty(isPtLog) Then
    51.             '给默认值
    52.             isPtLog = True
    53.         End If
    54.         isPrintLog = isPtLog
    55.     End Property
    56.    
    57.     '------------------------------------------------------------------------
    58.     '作用:新建Log文件夹
    59.     Sub NewLogFolder()
    60.         Dim FSO , FolderDir
    61.         Set FSO = CreateObject("Scripting.FileSystemObject")
    62.         FolderDir = Environment("TestDir") & "\LOG"
    63.         If Not(FSO.FolderExists(FolderDir)) Then
    64.             FSO.CreateFolder(FolderDir)
    65.         End If
    66.         Set FSO = Nothing
    67.     End Sub
    68.    
    69.     '------------------------------------------------------------------------
    70.     '作用:新建Log文件
    71.     Sub NewLogFile()
    72.         '新建文件
    73.         Dim FSO
    74.         Const ForReading=1,ForWriting=2,ForAppending=8      '参数赋值(1:只读,2:只写,3:追加)
    75.         Set FSO = CreateObject("Scripting.FileSystemObject")    '创建一个文本对象
    76.         Set LOGFILE = FSO.OpenTextFile(getLogFilePath,8,true)
    77.         wait 3
    78.         Set LOGFILE = Nothing
    79.         Set FSO = Nothing
    80.     End Sub

    81.    '------------------------------------------------------------------------
    82.     '作用:重写 Log
    83.     '参数:oWords:需要打印的内容
    84.     Sub Log(oWords)
    85.         '是否打印的判断
    86.         If isPrintLog = False Then Exit Sub
    87.         
    88.         '处理打印内容
    89.         oWords = "[" & now & "] [" & NowFunctionDir & "] " & oWords
    90.         
    91.         'Log 写入QTP
    92.         print oWords
    93.         
    94.         'LOG 写入外部文件
    95.         Dim FSO
    96.         Set FSO = CreateObject("Scripting.FileSystemObject")
    97.         Set ologFile = FSO.OpenTextFile(getLogFilePath, 8, true)
    98.         ologFile.WriteLine (CStr(oWords))
    99.         ologFile.Close
    100.         Set ologFile = Nothing
    101.         Set FSO = Nothing
    102.     End Sub


    103.    '------------------------------------------------------------------------
    104.     '作用:进入 Function 时的标记
    105.     '参数:oFunctionName:Function名
    106.     Sub GoIn(oFunctionName)
    107.         NowFunctionDir = NowFunctionDir & ">>" & oFunctionName
    108.         Log "-----------------进入<" & oFunctionName & ">-----------------"
    109.     End Sub
    110.    
    111.    
    112.     '------------------------------------------------------------------------
    113.     '作用:出 Function 时的标记
    114.     Sub GoOut()
    115.         Dim arrFunDir
    116.         arrFunDir = split(NowFunctionDir , ">>" , -1 , 1)
    117.         Log "-----------------退出<" & arrFunDir(ubound(arrFunDir)) & ">-----------------"
    118.         
    119.         NowFunctionDir = ""
    120.         Dim i
    121.         For i = 1 To ubound(arrFunDir) - 1
    122.             NowFunctionDir = NowFunctionDir & ">>" & arrFunDir(i)
    123.         Next
    124.     End Sub
    125.    
    126.    
    127.     '------------------------------------------------------------------------------
    128.     '作用:得到一个唯一的值
    129.     Function getUniqueNumber()  
    130.         Dim yyyy,mm,dd,ss
    131.         Dim nowtime
    132.         nowDate = date
    133.         nowTimer = cstr(int(timer))
    134.         yyyy = CStr(Year(nowDate))
    135.         mm = CStr(String(2 - Len(Month(nowDate)) , "0") & Month(nowDate))
    136.         dd = CStr(String(2 - Len(Day(nowDate)) , "0") & Day(nowDate))
    137.         ss = CStr(String(5 - Len(nowTimer) , "0") & nowTimer)
    138.         GetUniqueNumber = yyyy & mm & dd & ss
    139.     End Function
    140.    
    141. End Class
    复制代码



    然后,在Action中随便写一点调用函数的测试脚本:
    1. lg.Log "开始示范"
    2. Call Main


    3. Public Sub Main()
    4.     lg.GoIn "Main"
    5.     '----------------------------------------------------------
    6.     lg.Log "我在Main函数里111"
    7.     Call test1()
    8.     lg.Log "我在Main函数里222"
    9.     lg.isPrintLog = False     '关闭LOG打印
    10.     lg.Log "这个不会出现的"
    11.     '----------------------------------------------------------
    12.     lg.GoOut
    13. End Sub

    14. Function test1()
    15.     lg.GoIn "test1"
    16.     '----------------------------------------------------------
    17.     lg.Log "我在test1函数里111"
    18.     Call test2()
    19.     lg.Log "我在test1函数里222"
    20.     '----------------------------------------------------------
    21.     lg.GoOut
    22. End Function

    23. Function test2()
    24.     lg.GoIn "test2"
    25.     '----------------------------------------------------------
    26.     lg.Log "我在test2函数里"
    27.     '----------------------------------------------------------
    28.     lg.GoOut
    29. 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,不然[]中的记录会错位




    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 1197 天

    连续签到: 2 天

    [LV.10]测试总司令

    7#
    发表于 2013-1-27 09:51:59 | 只看该作者
    回复 6# 黑羽祭


        好厉害。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2013-1-28 17:27:27 | 只看该作者
    好,学习学习。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2013-4-19 08:55:41 | 只看该作者
    不用那么复杂吧。创建一个文本对象,然后在调用函数的初始,用writeline("目前进入**函数")写到日志里面去就可以了啊。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-9-27 10:05
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]测试团长

    10#
     楼主| 发表于 2013-4-19 09:49:18 | 只看该作者
    回复 9# yuermoon


        终于有人回了。没错,是可以这样。
    我这也是个引子,我想能更清晰的记录一下当前位置,如果出现问题,方便查看嘛。
    如果遇到:
    Call A
    Function A()
        Call B
        print "出错"
    End Function
    Function B()
        print "出错"
    End Function
    这样的情况,只用进入时打印一下,就不知道那句出错是出错在FunctionA中还是FunctionB中,其实现在又点想法了,自己在优化试试
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-4-10 17:57
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]测试团长

    11#
    发表于 2013-4-19 09:50:49 | 只看该作者
    可以在每个函数里的开头加个“进入xx函数”log语句, 在函数最后再加个“退出xx函数”log语句, 如果函数中间有Exit Function, 那在Exit 之前加个“退出xx函数”的log语句, 只要一个函数有开始和退出Log, 就可以表示执行成功了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2018-9-27 10:05
  • 签到天数: 36 天

    连续签到: 1 天

    [LV.5]测试团长

    12#
     楼主| 发表于 2013-4-19 09:55:29 | 只看该作者
    回复 11# shingo0109


        是啊,我不就是这么做的嘛,只是在这个基础上加了个 路径的保证 和 文件存在否的保证,再加了个能随时打印文件名的Class参数,和一个是否打印LOG的开关量
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-5 23:22 , Processed in 0.074427 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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