未来已来

发布新日志

  • 高薪的秘诀

    2008-09-12 15:08:26

         
         早晨来到公司打开msn就有个学员跟我说要跳曹了,这个工作她就待了几个月,从去年12月到现在总共的工作时间才不到1年,现在薪水已经5k了,虽然这个不是提高最快的,发展最快的(去年9月份毕业的学员到今年4月份的时候薪水有拿到6k的,学员之中很多这样的例子)但是真的为她开心。  
         每个人在职业发展的过程中都会遇到困惑,最近经常被人问到的就是如何才能提高阿,将来怎么走,每个人的发展都有自己的特点,是不可以复制的。但是有些是可以借鉴的。
         就说这个学员是从培训出发最后都到现在这个地步的,记得刚开始来到51testing面试入学,基础不是很好,在整个培训的过程中学习也不是最好的,当期班跟他在一起的学员有出去就拿薪水8k的,有的出去过了一段时间就成为测试主管的,测试经理的,她出去的第一个工作新水起点低,当时老师们帮他分析觉得她在这个公司待一段时间,应该对以后发展会很有力,她在这家公司坚持了半年,因为她选择的这家公司跟我们北京的公司就是楼上楼下,她每次在工作中遇到问题了就以上洗手间的名义,从楼上跑下来问老师。我经常开玩笑和她说小心你们公司怀疑你身体有问题吧你开除了,记得有一次她的主管留了个任务写一个脚本可以监控网站如果出现问题就发短信给相关人,当时她自己想了一个办法利用qtp的检查点的功能+飞信的短信功能开发了一套监控脚本,至今在项目里应用,但是在开发脚本的过程中遇到了问题飞信识别对象不成功,回访脚本失败,是我利用业务时间帮她把脚本完善。她通过一次次这样的解决问题的过程中得到了锻炼。过了半年在北京就业老师的帮助下她找到了一家新的公司,薪水提高了了一块,过了几个月现在薪水已经到了5k了。
         这个女孩子的开始的第一份工作可能对很多人眼里并不是很好,薪水低 内部测试流程不正规,而且进去了可能还会觉得学不到东西,但是进公司之后她把每一个任务都当成一次锻炼机会,当成不可能的任务来完成。最后掌握了自己要掌握的东西,最近还有一个女孩子问我如何才能让他在30岁的时候拿到薪水月薪1w,因为觉得现在在公司根本学不到东西,目标很好也完全有可能来完成,我就问你的近期目标是什么,比如下一个工作拿到的薪水是多少有目标么,如果为了完成下一个目标你做好什么准备了?她说下一个工作希望是5k(她做工作已经2年多了),一个工作两年的人应该完全可以实现的。然后我问了下她的做测试项目的情况,都是一些根项目相关的,问了些配置管理 测试管理 需求管理的问题,发觉他真的很难找到更好的工作,薪水更高的工作,因为根本就没有积累,虽然有两年作项目的经验,但是根本就没有收获,只是为了完成任务而完成任务,从来没有思考过如何去做好她的工作,也就是如何才能真正的把测试工作做好,真正的能提高软件的测试质量。可能第二个女孩子就不知道怎么才能做好,怎么做才能使对的,因为毕竟前面那个学员他经过培训知道什么是对的,怎么做好是有方向,但是这个应该不是理由,很多人没有经过培训也做得很不错,关键是对待工作的态度,有些人经常把项目紧没时间当成理由,只要有心什么时候都可以学习的,什么时候都可以提高的,关键是思考,总结。
         记得我工作一年多的时候,就有家公司给我offer做测试经理,后来有一家公司的技术总监问我你工作年限这么短,年龄这么小为什么当测试经理,我说有些人工作了很久但是没有思考和总结过,做了10年还是一样的,有些人思考和不断总结提高,做一年可能胜过人家的十年。
         如何才能提高薪水让职业发展好,我觉得很重要的一点是工作的态度,对待自己手里工作的态度,而不是这山望着那山高。我一个很好的朋友最近应聘成功了北京一家公司的测试经理,薪水是年薪28w,他的第一个工作公司里就有几个测试,现在这家公司已经发展成为上千人的公司,他当时工作了一段时间,觉得里面很乱,写了一篇文章关于如何提高公司测试团队的文章,发给了公司的技术总监,虽然总监不认可但是我们可以看出来一个他很想把工作做好,也努力为了把这份工作做好而不断提高自己的能力,后来他又涉及到别的领域,工作内容虽然发生变化,但是他还是不断的思考自己的工作如何才能做好,经过了几年现在他的薪水也涨到了可观的地步。其实这让我想起来刚到北京的时候我大学同学吃饭的时候说的一句话:
        “要做就做最好,如果有一天你不做了,不是你不能做,而是你不想做了”
         
        其实提高薪水的秘诀没有什么,就是把你承担的工作做好。现在很多公司都在想搞自动化测试性能测试搞单元测试,其实从本质上来说都是想把测试的工作做好,如果你想提高薪水那就从现在开始把你做的工作做好,你就会有提高你就会想办法接触各种技术,然后把技术应用到你的项目中,你想把工作做好,就会去思考会去总结,就会有提高,有心得,就会有很丰富的经验。
      

    附:

    日期  时间  发送者  接收者  消息 
    2008-09-12  9:49:17  小熊猫(xx)  pcl  朴老师,呵呵 
    2008-09-12  9:49:17  小熊猫(xx)  pcl  忙不? 
    2008-09-12  9:49:23  pcl  小熊猫(xx)  怎么了 
    2008-09-12  9:49:39  小熊猫(xx)  pcl  朴老师,我换工作了 
    2008-09-12  9:50:03  小熊猫(xx)  pcl  呵呵,我前几天到xx网面试,要5K,人家同意了,我已经跟他们签了聘用合同,xx.xx号上班 
    2008-09-12  9:50:30  pcl  小熊猫(xx)  真快 这才1年啊 
    2008-09-12  9:50:36  小熊猫(xx)  pcl  嘿嘿,谢谢朴老师哦,那时候我在xx还是对的,对我以后的发展很有帮助 
    2008-09-12  9:51:17  pcl  小熊猫(xx)  哈哈 做人先抑后杨 
    2008-09-12  9:51:26  pcl  小熊猫(xx)  你看一年的发展就上来了  
    2008-09-12  9:51:48  小熊猫(xx)  pcl  对啊,那时候xx的工资那么低,但是起点还算可以,而且没有那时候的积淀,我工资不会到5000的 
    2008-09-12  9:51:48  小熊猫(xx)  pcl  嘿嘿,朴老师,你啥时候回北京啊? 
    2008-09-12  9:51:49  小熊猫(xx)  pcl  我和老赵去请你吃饭去 
    2008-09-12  9:52:05  小熊猫(xx)  pcl  朴老师,老赵可能今天去sohu笔试,不知道结果呢 
    2008-09-12  9:52:54  pcl  小熊猫(xx)  真好啊 你们都拿到高新才好呢 
    2008-09-12  9:55:52  小熊猫(xx)  pcl  恩,朴老师,那时候,要是没有你和邹老师,韩老师还有徐老师的帮助,我肯定不会到现在这个薪水的 
    2008-09-12  9:56:09  pcl  小熊猫(xx)  也有你自己的功劳  
    2008-09-12  9:56:18  pcl  小熊猫(xx)  关键是你自己 如果你不听话别人也帮不了你 
    2008-09-12  9:56:36  小熊猫(xx)  pcl  恩,是,不过那时候我也最多就忍了半年就走了啊,呵呵 
    2008-09-12  9:57:11  小熊猫(xx)  pcl  恩,朴老师,你大概啥时候回北京啊? 
    2008-09-12  9:57:29  pcl  小熊猫(xx)  我要等一段时间把 
    2008-09-12  9:57:42  pcl  小熊猫(xx)  也想早点回去 

  • 自动化测试代码赏析

    2008-09-11 11:43:37

    如果你有兴趣,请把代码分析的结果写下来,因为看别人的代码,是提高自己自身能力的最快途径之一,当下公司招聘很多都需要测试人员懂工具,有的公司在面试过程中还拿出代码让测试人员来读,分析代码的结果是什么。古人说 "熟读唐诗三百首,不会做诗也会吟",希望你也成为一个自动化测试开发高手:

    代码 一:

    txtSearch = "T"
    Set edtxt = CreateObject("Wscrīpt.Shell")
    Browser(" ").Page(" ").WebEdit(" ").Click
    edtxt.SendKeys(txtSearch)
    Set edtxt = Nothing

    rowCount = Browser(" ").Page(" ").WebTable(" ").GetROProperty("rows")
    For j = 1  to rowCount
          strTxt =  Browser(" ").Page(" ").WebTable(" ").GetCellData(j,1)
          strColor = Browser(" ").Page(" ").WebTable(" ").Object.rows(j-1).cells(1).currentStyle.backgroundColor

           If strColor = "#fffde8" Then
                reporter.ReportEvent micDone, "Text Highlighted", "The text  """&strTxt&""" is highlighted."
            strPos = left(strTxt,1)
                If (Trim(txtSearch) = Trim(strPos)) Then
                          reporter.ReportEvent micPass, "Highlighted", "First Letter of highlighted text  """&strTxt&""" starts with """&strPos&"""."
                Else
                       reporter.ReportEvent micFail, "Highlighted", "Text  """&strTxt&""" doesn't start  with letter """&strPos&"""."
                End If
           End If
    Next

    代码 二:

    Set ōbjDesc = Descrīption.Create()
    objDesc("micclass").Value = "WebEdit"

    Set ōbjWE = Browser().Page().ChildObjects(objDesc)
    objWECount = objWE.Count

    For i = 0 to objWECount-1
         Set ōbjCP = objWE(i).Object
         ChkPointWE = objCP.IsContentEditable
         Print objWE(i).GetROProperty("name")
         Print ChkPointWE
    Next

    代码 三:自动化测试框架代码,本框架基于SAFFRON(mercury)框架为基础实现的针对mercury自带的网上售票系统的关键字数据驱动其中SAFFRON(mercury)部分:

    框架核心代码:

    '************************************************************
    ' S.A.F.F.R.O.N. Prototype 1.1'
    ' Simple Automation Framework For Remarkably Obvious Notes
    ' Copyright © 2006 Mercury Interactive Corporation
    '
    ' Notes:
    '
    ' Requires QuickTest Professional 9.1
    '
    ' Author       : Adam Gensler
    ' Created      : July 12, 2006
    ' Last Updated : September 11, 2006
    '
    ' This prototype framework is provided AS IS, and is meant
    ' to be used for instructional purposes.
    '
    ' This framework is a prototype, and is not supported
    ' by Mercury Interactive.
    '
    '************************************************************
    initialized = false
    thirdlevel = ""
    level = ""
    desc = ""
    object = ""
    objectDescrīption = ""

    levelsubdescrīptiondelimiter = ","
    leveldescdelimiter = "|"
    objectdelimiter = "|"
    leveldelimiter = "|"
    objectsDescrīptiondelimiter = "|"

    webLevels = "Browser|Page|Frame"
    webLevelsDesc = "micclass:=Browser|micclass:=Page|micclass:=Frame|"
    objects = "Link|WebButton|WebList|WebEdit"
    objectsDescrīption = "micclass:=Link|micclass:=WebButton|micclass:=WebList|micclass:=WebEdit"

    ' Generates a generic descrīption based up on the "level" viarable
    ' levelstr - will be one of the values that is in the level array
    ' returns - string representative of the object hierarchy
    Public Function GenerateDescrīption (levelstr)
     l = IndexOf(level, levelstr)
     If l >=0 Then
      fdesc = level(0) & "(" & Quote(desc(0)) & ")."
      If l >= 1 Then
       fdesc = fdesc + level(1) & "(" & Quote(desc(1)) & ")."
       If 2 >= l Then
        If thirdlevel <> "" Then
         fdesc = fdesc + level(2) & "(" & Quote(desc(2)) & "," & Quote("name:=" & thirdlevel) & ")."
        End If
       End If
      End If
     End If
       GenerateDescrīption = fdesc
    End Function

    ' Generates an object descrīption based upon the object, and objectDescrīption arrays
    ' obj - name of the object in the object array
    ' prop - additional property to help uniquely identify the object
    ' returns - a string representative of the object descrīption
    Public Function GenerateObjectDescrīption (obj, prop)
     i = IndexOf(object, obj)
     ndesc = ""
       If i <> -1 Then
      ndesc = obj & "(" & Quote(objectDescrīption(i)) & "," & Quote(prop) & ")."
     End If
     GenerateobjectDescrīption = ndesc
    End Function

    ' given an array, returns the index of the value to search for
    ' ary - an array
    ' str - value to search for in an array
    ' returns - index in array
    Public Function IndexOf (ary, str)
     val = -1
     For i = 0 to UBound(ary)
      If ary(i) = str Then
       val = i
      End If
     Next
     IndexOf = val
    End Function

    ' configures framework to work within the context of a specific frame
    ' val - the Name of the frame to work within -- use Object Spy if you don't
    '       already know the frame name
    Public Function WorkInFrame (val)
     Report micPass, "Enter Frame", "Entered scope of frame " & Quote(val)
     thirdlevel = val
    End Function

    ' configures the framework to work outside the context of a specific frame
    Public Function StopWorkingInFrame
     Report micPass, "Exit Frame", "Exited scope of frame " & Quote(thirdlevel)
     thirdlevel = ""
    End Function

    ' generates a string with embedded/surrounding quotes
    Public Function Quote (txt)
     Quote = chr(34) & txt & chr(34)
    End Function

    ' navigate to a site if the browser is already opened, otherwise run initialization
    Public Function BrowseTo (url)
     thirdlevel = ""
     Report micPass, "Navigate to URL", "Navigating to URL: " & Quote(url)
     If initialized Then
      Execute GenerateDescrīption("Browser") & "Navigate " & Quote(url)
     Else
      Launch "website", url
     End If
     Reporter.Filter = rfDisableAll
    End Function

    ' waits for the web page to finish loading
    Public Function AutoSync
        Execute GenerateDescrīption("Browser") & "Sync"
    End Function

    ' close all opened browsers
    Public Function CloseBrowsers
     If Browser("micclass:=Browser").Exist (0) Then
      Browser("micclass:=Browser").Close
     End If
     While Browser("micclass:=Browser", "index:=1").Exist (0)
      Browser("index:=1").Close
     Wend
     If Browser("micclass:=Browser").Exist (0) Then
      Browser("micclass:=Browser").Close
     End If
    End Function

    ' prepares the framework for usage, and configures all internal framework
    ' variables and structures
    ' apptype - used to launch different types of applications based
    '           upon different technologies -- currently there is only web
    ' val     - string that represents what to launch
    ' returns - always returns true
    Public Function Launch (apptype, val)
     If "website" = apptype Then
      thirdlevel = ""
      Report micPass, "Initialize", "Initializing Framework"
      level = split(webLevels, leveldelimiter, -1, 1)
      desc = split(webLevelsDesc, leveldescdelimiter, -1, 1)
      object = split(objects, objectdelimiter, -1, 1)
      objectDescrīption = split(objectsDescrīption, objectsDescrīptiondelimiter, -1, 1)
      CloseBrowsers
      Set IE = CreateObject("InternetExplorer.Application")
      IE.visible = true
      IE.Navigate val
      While IE.Busy
       wait 1
      Wend
     End If
     initialized = true
     Launch = true
    End Function

    ' Verify the Existence of an object
    ' objtype - values should be limited to values in the object array
    ' text    - multi-purpose argument that indicates what to verify
    '         - for a link, or button, it's the text of the control
    '         - for a list, it's the name of the control
    '         - for a frame, it's the name of the frame
    Public Function Verify (objtype, text)
       rval = false
     localDesc = ""
     estr = ""
     If thirdlevel <> "" Then
      localDesc = GenerateDescrīption(level(2))
     Else
      localDesc = GenerateDescrīption(level(1))
     End If

       AutoSync()

     Select Case objtype
     Case "Page"
      Execute "rval = " & GenerateDescrīption(level(1)) & "Exist (0)"
      If rval Then
       Execute "title = " & GenerateDescrīption(level(1)) & "GetROProperty(" & Quote("title") & ")"
       If title = text Then
        rval = true
       Else
        rval = false
       End If
      End If
     Case "CurrentFrame"
      If thirdlevel <> "" Then
       estr = "rval = " & localDesc
      End If
     Case "Link"
      estr =  "rval = " & localDesc & GenerateObjectDescrīption("Link", "innertext:=" & text)
     Case "WebButton"
      estr = "rval = " & localDesc & GenerateObjectDescrīption("WebButton", "value:=" & text)
     Case "WebList"
      estr = "rval = " & localDesc & GenerateObjectDescrīption("WebList", "name:=" & text)
     Case "WebEdit"
      estr = "rval = " & localDesc & GenerateObjectDescrīption("WebEdit", "name:=" & text)
     End Select

     If estr <> "" Then
      Execute estr + "Exist (0)"
     End If

     If rval Then
      Report micPass, objtype & " Verification", "The " & objtype & " " & Quote(text) & " was verified to exist"
     Else
      Report micFail, objtype & "  Verification", "The " & objtype & " " & Quote(text) & " was not found"
     End If

     If "True" = rval Then
      rval = True
     Else
      rval = False
     End If

       Verify = rval
    End Function

    ' Activates an object based upon its object type
    ' objtype - the type of object should be limited to values in the object array
    ' text    - identifying text for the control - for a link, it's the text of the link
    Public Function Activate (objtype, text)
     localDesc = ""
     If thirdlevel <> "" Then
      localDesc = GenerateDescrīption(level(2))
     Else
      localDesc = GenerateDescrīption(level(1))
     End If

     AutoSync() 

     Select Case objtype
     Case  "Link"
      Execute localDesc & GenerateObjectDescrīption("Link","innertext:=" & text) & "Click"
      Report micPass, "Link Activation", "The Link " & Quote(text) & " was clicked."
     Case "WebButton"
      Execute localDesc & GenerateObjectDescrīption("WebButton", "value:=" & text) & "Click"
      Report micPass, "WebButton Activation", "The WebButton " & Quote(text) & " was clicked."
     End Select
    End Function

    ' Selects a specific value from a listbox, or combobox
    ' objname - name of the control -- use Object Spy if you don't know the name property
    ' text    - the item in the combobox to select
    Public Function SelectFromList (objname, text)
     localDesc = ""
     rv = ""
     rval = false
     If thirdlevel <> "" Then
      localDesc = GenerateDescrīption(level(2))
     Else
      localDesc = GenerateDescrīption(level(1))
     End If

     AutoSync() 

     localDesc = localdesc & GenerateObjectDescrīption("WebList", "name:=" & objname)

     Execute "cnt = " & localDesc & "GetROProperty(" & Quote("items count") & ")"
     For i = 1 to cnt
      Execute "rv = " & localDesc & "GetItem (" & i & ")"
      If rv = text Then
       rval = true
      End If
     Next

     If rval Then
      Execute localDesc & "Select " & Quote(text)
     End If
     If rval Then
      Report micPass, "WebList Selection", "The WebList item " & Quote(text) & " was selected."
     Else
      Report micFail, "WebList Selection", "The WebList item " & Quote(text) & " was NOT found."
     End If

     SelectFromList = rval
    End Function

    ' Enters text into an edit field
    ' objname - name of the control -- use Object Spy if you don't know what it is
    ' text    - the text to enter into the control
    Public Function EnterTextIn (objname, text)
     localDesc = ""
     rval = true
     If thirdlevel <> "" Then
      localDesc = GenerateDescrīption(level(2))
     Else
      localDesc = GenerateDescrīption(level(1))
     End If

     AutoSync()

     localDesc = localdesc & GenerateObjectDescrīption("WebEdit", "name:=" & objname)
     Execute localDesc & "Set (" & Quote(text) & ")"
     Report micPass, "Enter Text", "Text: " & Quote(text) & " was entered into " & Quote(objname)
     EnterTextIn = rval 
    End Function

    ' Obtains text from a control
    ' objtype - is the type of control the get the text from
    ' objname - is the name of the control -- use Object Spy if you don't know the name
    ' returns - the text of the control
    Public Function GetTextFrom (objtype, objname)
     text = ""
     localDesc = ""
     If thirdlevel <> "" Then
      localDesc = GenerateDescrīption(level(2))
     Else
      localDesc = GenerateDescrīption(level(1))
     End If

     AutoSync()

     Select Case objtype
      Case "WebEdit"
       Execute "text = " & localDesc & GenerateObjectDescrīption("WebEdit", "name:=" & objname) & "GetROProperty (" & Quote("value") & ")"
      Case "WebList"
       Execute "text = " & localDesc & GenerateObjectDescrīption("WebList", "name:=" & objname) & "GetROProperty (" & Quote("value") & ")"
     End Select
     Report micPass, "Capture Text", "Text: " & Quote(text) & " was captured from the control " & Quote(objname)
     GetTextFrom = text
    End Function

    ' Wrapper for the Reporter.Report Event method
    ' - could be used to create custom reports more easily
    ' See Reporter.ReportEvent documentation for usage
    Public Function Report (status, objtype, text)
     Reporter.Filter = rtEnableAll
     Reporter.ReportEvent status, objtype, text
     Reporter.Filter = rfDisableAll
    End Function

    基于此框架的qtp网上售票的系统的框架代码例子想要的人请加: pcl2004_19@hotmail.com

  • 轮回 - 北京 - 上海 - 北京

    2008-09-09 19:02:15

      

          有的时候人总也想不到自己的将来,下一步会往哪里走,记得大学毕业的时候我没有想过要去北京,但是最后到了北京,没有想到2年之后去上海还是去了上海,没有想到回到北京,却回到了北京,一切都是意外,但是一切又是好像那么顺其自然。

         我经常把测试行业比作一个江湖,记得zee有一次到51testing跟我们北京的就业学员说,说他是小混子,我是大混子(我认识他的时候他还在上学,从他在苏州去了上海最后到北京一直都有联系,也算是有缘分)。当初我走上这个我认为是江湖的地方(在bbs上帮别人解决问题),我认识了jackei(陈雷),sincky(张振兴),xueqin(丁雪芹),normal(酸辣土豆丝 原先在中国测试社区上的rational的斑竹),oldsidney(现在都成了做爸爸的人),sunshinelius(柳胜)等等,而且认识了我现在的老板 导师 朋友 兄弟 bwf(李波,王威,周峰),最后因为这个江湖加入了51testing。

        说起来sincky和我的关系很特殊,记得我第一次见测试行业的网友就是sincky,第一次见面吃饭是在肖家河农大对面的白鸭梨,当时他还脖子上带着ibm的门卡,对我说哪个门卡如果丢了要赔10000,呵呵,也不知道是不是真的。算是缘分把,2005年他加入了51testing我们又成为了同事,当时51testing也很艰苦,来了大家都是一心想要做出点事情和成绩,都是为未来而奋斗,由于我们的住宿不是很好,后来李波(我把bwf看作自己的大哥)还把自己的房子借给我们住,我和sincky都是北方人在南方不习惯,特别是sincky吃不好也睡不好,不过每天忙得也算是自得其乐。这样我们坚持了1年多,由于李波的房子卖了,我和sincky也不得不离开,也是因为这样在bwf的帮助下我们买了自己的第一套房子,有了一个我们安身的地方。以为一切都会安定,没想到买房子的当年年底我就离开了上海去了北京,建立了北京51testing。

       我离开上海不久,sincky由于个人原因离开了51testing,一年我们见面的机会很少,每次见面都聊到后半夜,离开的日子很想念他。前一段时间我刚到深圳认识了一位朋友,她那里有个职位觉得sincky很合适,就推荐了sincky,今天得到消息,这个职位基本上搞定,但是需要他回北京工作,sincky在上海结婚,房子在上海,老婆还是上海人,现在要离开上海回到北京重新发展了。人生际遇 希望每个人都有好的发展和机遇。

       

      

  • 解决RationalRobot获取htmlTableCell数据的技术

    2008-09-09 12:53:45

        昨天有位朋友通过msn加我,想解决RationalRobot如何获得HtmlTable中的Cell的数据问题,他在网上通过寻找以前的(2004-2005)年的帖子找到我,希望能解决这个问题,在论坛上大家给出的答案都是要扩展robot开发dll或者是解析网页,但是具体如何做没有给出代码,其实这个问题这么做就复杂了,robot我觉得是一个很不错的工具,2004年我写了很多关于robot心得的文章,记得第一篇在网络上发表的文章robot识别datagrid控件对象就是为了帮一个广州朋友解决问题得出的心得.
       问题是这样如何用rational robot获得htmltablecell的内容,这个robot本身确实做的不是很好,获得cell的数据需要根据索引来进行定位,我们先看如何获得htmltable的内容,我写了一个html页面文件代码如下:
    <HTML>
    <HEAD><TITLE>test</TITLE></HEAD>
    <BODY>
    <TABLE id=testaa>
       <TR>
          <TD>Jones</TD>
       </TR>
       <TR>
          <TD>Smith</TD>
       </TR>
       <TR>
        <TD>Harry</TD>
       </TR>
    </TABLE>
    </BODY>
    </HTML>
    保存为html文件后用ie打开,然后编写robot自动化测试代码如下:
    Sub Main
       Dim Value as variant
        Window SetContext, "Caption=test - Microsoft Internet Explorer",""
        Browser NewPage,"",""
        SQAGetProperty "Type=HTMLTable;HTMLId= testaa","InnerText",value
        SQAConsoleWrite "Value : "& value
    End Sub
    获得数据为 jones Smith Harry
    如何用robot获得其中cell中的单独数据呢,其实robot把html中的cell识别成htmltablecell对象,而获得其中的内容需要根据index来定位,我这个测试页面只有一个table,那么它的第一个cell的index就是1,第二个cell的index就是2
    所以修改自动化测试脚本代码看如何获得第一个 第二个 第三个cell的数据,修改代码如下:
    Sub Main
        Dim Result As Integer
        Dim iCellCount as Integer
        Dim Value as variant
        for iCellCount=1 to 3 
            Window SetContext, "Caption=test - Microsoft Internet Explorer",""
            Browser NewPage,"",""
            SQAGetProperty "Type=HTMLTableCell;index="+ iCellCount,"outerText",value
            SQAConsoleWrite Cstr(i iCellCount)+"Value : "& value
         next iCellCount 
    End Sub

    如果网页中有3个table,每个table横三行竖三列
    table 1
    ---------------------------
      1  |     2      |      3 
    ---------------------------
      4  |     5      |      6 
    ---------------------------
    table 2
    ---------------------------
      1  |     2      |      3 
    ---------------------------
      4  |     5      |      6 
    ---------------------------
    table 3
    ---------------------------
      1  |     2      |      3 
    ---------------------------
      4  |     5      |      6 
    ---------------------------
    如果要获得第二个table中的第一个cell中的内容,那么index就是7

    以上为利用robot自身解决获得cell表格内容的方法,当然还有其他网友提供的解析页面文件的方法,利用dom技术。

  • Qtp 9.5 温柔破解试验 一步破解成功

    2008-09-08 11:10:39

        
           周末在家休息,打开qtp想调试一些写的代码,但是发现qtp9.5过期,本人很懒实在厌烦重新安装系统,到网上看资料发现都是先破解qtp8.2或者9.2然后卸载8.2或者9.2版本然后在安装9.5版本,那有没有办法直接破解呢?
          思考:8.2到9.2的破解方式是把mgn-mqt82.exe文件拷贝到C:\Program Files\Mercury Interactive和qtp同级目录,然后执行该破解文件,但是到了9.5版本安装路径变成C:\Program Files\HP了,我想肯定是是否是文件夹路径改变后导致破解不成功,所以先在系统中创建了C:\Program Files\Mercury Interactive文件夹,然后把mgn-mqt82.exe拷贝到文件夹下,执行该破解文件,意想不到的事情发生,系统错误mgn-mqt82报错,不管三七二十执行QTP 9.5,发现破解没有完成。
               既然不行换个思路,以前我用mgn-mqt82.exe破解8.2的时候,经常发现破解不成功的问题,就到C:\Program Files\Common Files\Mercury Interactive\License Manager文件夹下去修改LSERVRC文件,删除里面的生成代码,再次执行mgn-mqt82.exe,反复几次就可以达到破解8.2的目的。
              既然这样我就到C:\Program Files\Common Files\Mercury Interactive\文件夹下,发现没License Manager文件夹,也没有生成LSERVRC文件,那我就手工创建该文件夹,做好该工作之后,然后再C:\Program Files\Mercury Interactive文件夹,执行mgn-mqt82.exe,执行成功,没有报错,既然没有报错,那就继续我把C:\Program Files\Common Files\Mercury Interactive\License Manager\LSERVRC中产生的生成的字符串拷贝出来,然后拷贝到qtp的license向导中,破解成功。
         呵呵,功夫不负有心人,试验成功
        
         破解步骤:
         1.安装qtp
         2.拷贝mgn-mqt82.exe到C:\Program Files\Mercury Interactive(创建)文件夹下
         3.创建C:\Program Files\Common Files\Mercury Interactive\License Manager文件夹
         4.执行mgn-mqt82.exe
         5.打开qtp9.5,然后安装license,copy文件C:\Program Files\Common Files\Mercury Interactive\License Manager\LSERVRC中#之前的字符串
          如:
       3QVWCPPOS5NGGFM6KPX64EQFSH6INFRJIVMC5WZ4XIIFIXX86UCPIP4M686DZKV9NANA9BUP# "QuickTestPro" version "6.0", no expiration date, exclusive
    JZ7F79F6YQQFVUWNG2V7AW22K537DOELQYNX6VSCNCZ9J8M2QW9OXO5DSEQKUZA46X5BO# "FT-Unified" version "1.0", no expiration date, exclusive
        就拷贝#号前的3QVWCPPOS5NGGFM6KPX64EQFSH6INFRJIVMC5WZ4XIIFIXX86UCPIP4M686DZKV9NANA9BUP 然后paste到license向导中的license输入的地方,就可以了
         恭喜成功了
  • 一个工作任务的解决方法

    2008-09-07 23:21:58

     有个网友接到工作任务产生测试数据,具体任务如下:
    “我们老大给了个这个的任务给我:
      质量:重复率<0.1%,相似率<10%
      数据根据该字段的类型和长度生成, 涵盖各种情况,包括边界值,异常值....字符串要包含所有字符集,规定的所有长度,时间跨度取前后3年以上,枚举字段要随机取完所有值....
      特殊要求:
      固定在一个字段里放测试标识,如在作者字段的前两个字符为"测试",便于识别和删除...”
      他的解决问题思路是通过lr把现有数据库中的数据导入到参数文件中,然后发送给服务器(不知道他为什么从数据库中读取数据,然后再发送),导入到file中遇到问题是 lr报错 “check file format”。经过交流之后我们把他的问题简单化,其实就是一个目标产生数据,但是中间遇到的是两个问题,一个是数据来源问题  一个是数据如何发送问题

     1.数据来源,如果是要网页文件信息,从他的方法来看,是利用lr读取数据库,那么我们来看看结合lr如何做呢?首先是利用vc写一个dll,从服务器上读取字段内容,然后在lr中读取该代码,2007年的时候当时帮大连的一个朋友写过一个dll代码,就是读取oracle数据库字段内容的,然后再lr中使用。根据以上思路写了个vc中伪代码(伪代码就是没有经过调试,或者没有实现完全的代码)如下:
       _ConnectionPtr pConnection;
    _RecordsetPtr pRecordSet;
    ICfxDataAdoPtr pCfxDataAdo;

    pRecordSet.CreateInstance(__uuidof(Recordset));
    pConnection.CreateInstance(__uuidof(Connection));

     // Read from database
     pConnection->ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=";
     pConnection->Open("","","",-1);
     pRecordSet = pConnection->Execute("SELECT * FROM xxx",NULL,-1);
     //获得pRecordSet字段数据
       
      pRecordSet->Close();
      pConnection->Close();
     
        以上代码可以封装成函数放入dll后,在lr中调用dll,lr中的代码伪代码如下,

       
        rc=lr_load_dll("xxx.dll");
     if( rc != 0 ){
      lr_error_message("lr_load_dll of advapi32.dll failed. Aborted for rc=%d",rc);
      lr_abort();
     }else{
               strcpy(data,dll中调用返回的函数数据);
               web_submit_form 发送出去要发送的数据包

     }

           我们在换一个思路,如果就是为了得到html这样的数据,那么我们是否可以自己写代码得到网站上任何的Html代码作为自己的数据,用vbs写了段代码:
       Set XML = CreateObject("Microsoft.XMLHTTP")
       XML.Open "GET", "http://www.51testing.com", False
       XML.Send
       vResponse = XML.responseText
       MsgBox vResponse
       以上代码调试通过
     
       2.如何发送数据包
         方法可以是利用lr发送,可以是直接发送请求,我们看如何直接发送请求,代码如下:
         Dim xmlhttp
        Set xmlhttp = New MSXML2.ServerXMLHTTP
        xmlhttp.Open "POST", "http://xxxxxxx", False
        xmlhttp.setRequestHeader "Content-Type", "xxxxx"
        xmlhttp.send DataToSend
       
        Set xmlhttp = Nothing

    DataToSend
    =====================================================
    <HTML>

      <HEAD>
        <title>demo</title>
      </HEAD>

      <BODY>
         xxxxxx
      </BODY>
    </HTML>
     
       思路如上,解决问题中具体用到的技术大家可以找相应资料深入研究下。   
     

     

  • LoadRunner 性能监控器系列 - SiteScope SAP CCMS

    2008-09-07 21:12:40

    Introduction

     

    The SAP CCMS (Computer Center Management System) monitor displays statistics about the resource usage of all servers, components, and resources in any SAP R/3 landscape during the scenario run. You can also use the SAP CCMS monitor for SAP Portal and SAP GUI environments, but the amount of measurements provided by the SAP CCMS monitor is much greater.

     

     

    Requirements

     

    1.      SAP monitor license

     

    2.      LoadRunner 7.8 or above. 

    For LoadRunner 7.8, apply Feature Pack 1:

    1. On a machine with LoadRunner 7.8, go to Start à Programs à LoadRunner à  UpdateService.
    2. Click on the "Show Update" button.
    3. Obtain and install "LoadRunner update."

     

    3.      SiteScope installation

    ·        For LoadRunner 7.8 and below:

     LoadRunner 7.8 and below supports SiteScope Lite  version only. The SiteScope Lite installation file (SiteScopeSetupForLR.exe) and SiteScope Lite license are available in the Patches Database à LoadRunner à 7.6 à Performance Monitor à LR76P6 - LoadRunner 7.6 SiteScope Siebel and SAP Portal Add-in for LoadRunner.

     

    ·        For LoadRunner 8.0:

    LoadRunner 8.0 supports SiteScope 7.9.5. You need to install a patch on the Sitescope machine and the LoadRunner Controller machine. These patches are available in Patches Database à LoadRunner à 8.0  à Performance Monitors à LR80P77 - LoadRunner 8.0 Monitoring Support for SiteScope 7.9.5

     

    4.      On the machine installed with SiteScope, install the SAP Java Connector (SAP JCo 2.0.6 and above)

     

    .

     

    SiteScope installation and Setup

     

    Overview

     

    Ensure you have LoadRunner 7.8 or above installed.  Ideally, you will want an extra machine for the SiteScope installation:

     

    • First machine          à   Controller
    • Second machine     à   SiteScope
    • Third machine         à   Load Generator
    • Fourth machine       à   Load Generator

     

    Etc.

     

    In this situation, SiteScope will be gathering information from the servers and displaying them via a Web interface.  The Controller will then connect to the SiteScope installation and retrieve this data during the scenario run.

     

     

     

    Preparing the environment

     

    Prior to installing SiteScope, install the SAP Java Connector (SAP JCo 2.0.6 and above). To install the SAP Java Connector, perform the following:

     

    • Download the SAP Java Connector from the SAP Software Distribution Center at http://www.service.sap.com/connectors. Click ‘SAP Java Connector’ and ‘Tools and Services’. You will need a valid Service Marketplace login to access this site.

     

    • Follow the installation instructions that come with the SAP JCo download for your appropriate platform. On Windows, add the JCo installation location in the System Environment PATH variable. This change usually requires you to reboot Windows for the system PATH to be updated. Once completed, make the SAP JCo library file available to SiteScope by copying sapjco.jar (which comes with the Jco install) to /SiteScope/java/lib/ext before starting SiteScope.

     

     

    Install SiteScope

     

    1.      Obtain the SiteScope installation file. (Requirement)

     

    2.      On the machine where you wish to install SiteScope, run the installation file. 

     

    3.      In the “Administrator E-mail Address” window, enter an E-mail if you want a designated person to receive alerts, reports, and status messages. Otherwise, click <Next> to proceed to the next window.

     

     

    4.      Follow all the defaults settings to complete the SiteScope installation.

     

    5.      When the installation of SiteScope is completed, a browser will automatically open with instructions on how to start SiteScope.  Basically, the way to start SiteScope is via a browser with the URL http://<machine-name>:8888/SiteScope.

     

    As you can guess, SiteScope installs its own Web server as an interface to the application.

     

     

    Install SiteScope license

     

    Note: If you do not have the license, please contact you regional sales.

     

    1.      The first time you start SiteScope, you will get a “SiteScope First Time Setup” page. Click on “Skip this Page” to go to main SiteScope site.

     

    2.      Once the Auto Configuration completes, you will be brought to the main SiteScope page. 

     

    3.      Click on the “Preferences” link from the main SiteScope panel.

    a.       Enter the license in the “License Number” edit field.

    b.      Enter the additional license in the “Option licenses” edit field.

    Note: The SAP CCMS Server monitor will not be available without an Option license.

     

    4.      Click on the “Save Changes” button.

     

     

    SiteScope Monitor Configuration

     

    How to add an SAP CCMS Monitor Group

     

    1.   On the SiteScope main page, click on “Create Groups.”

     

    2.   Enter a name for the group (e.g., SAP CCMS).

     

    3.   Click on the “Add” button.

     

     

    How to add a SAP CCMS Monitor

     

    1.   From the main SiteScope page, go to the “SAP CCMS” group.

    (How to add an SAP CCMS Monitor Group)

     

    2.   In the “Add to Group” section, click on “Monitor” and select “SAP CCMS Server” from the list of monitors.

    Note: If you do not see “SAP CCMS Server” in the list, contact your local sales representative for the SAP CCMS add-in license.

     

    3.   Click on “Choose Server,” and fill in the following:

    Field name

    Information

    Application Server

    Enter the address of the SAP server you want to monitor.

    SAP Client

    Enter the Client to use for connecting to SAP. A default client of 800 is typically used.

    System Number

    Enter the System number for the SAP server. A default system number of 00 is typically used.

    Authorization User Name

    Enter the Username required to connect to the SAP server. This user must have authorization to access CCMS metrics.

    Authorization Password

    Enter the Password required to connect to the SAP server.

    SAP Router String (Optional)

    If your connection is being made through a router, enter a router address string. You can find the router address using the SAP Logon tool from the SAP Client software. Open the Logon console, select the server you want to monitor and then select Properties to view the router address. Leave it blank otherwise.

     

    4.      Click on the “Browse counters” button.

     

    5.      SiteScope will navigate to a page with all the available counters. Select the counters you want to monitor, and click on “Choose Counters.”

     

    Note: This tree will more or less match the hierarchy of Monitoring Tree Elements displayed in the Monitoring Tree that is shown in the SAP GUI with transaction RZ20. However, the browse tree may show more or less information than RZ20 depending on the authorization level of the username you specified for this monitor.  Check or clear the check boxes on the choose counters screen to select counters to monitor on this server.

     

    6.      SiteScope will navigate to the “Add SAP CCMS Server Monitor in Group” page with the counters selected in step 5 listed.

    a.       Verify the counters.

    b.       Change the update time to 15 seconds, and click on “Add monitor.”

    Setting up a SiteScope SAP CCMS Monitor in the Controller

     

     

    1.      In the Controller, look for the SAP CCMS monitor in the ERP/CRM Server Resource Section.

     

    2.      Display the graph by dragging it to the right.  Right-click in the graph and select “Add Measurement(s).”  You should now see the SiteScope Dialog box.

     

    3.      Click on the first “Add” button.  For the machine name, type in the IP address or the machine name of the system on which SiteScope is installed.  Click <OK>.

     

    4.      Click on the second “Add” button.  You should now see a SiteScope Monitor Configuration window.  In the left pane, you should see a tree with the monitors you have added into the SiteScope application.  Highlight the available monitors and choose the counters in the right pane.  Click <OK> to get out of the menus.

     

    You have now set up the new SiteScope SAP CCMS monitor.
  • WinRunner 曾经的记忆

    2008-09-01 17:47:49

        昨天在做Qtp培训发给学员资料的时候无意中找到以前的资料,记得刚参加工作的时候自动化测试就知道Rational robot,感觉工具特别好,也激起了很大的热情和兴趣,对Robot做了很多研究,当时还写了很多关于robot的文章,也曾经憧憬着做中国第一个自动化测试项目,后来加入51testing由于工作需要接触了wr,qtp,silktest等功能自动化测试工具,随着时间的推移wr robot逐渐淡出大家的视线。其实每一个工具都有自己的特点在里面,好比一个人一样有自己的风格,在不同的项目用不同的工具,只有结合起来才能发挥最大的威力,下面是一些代码例子,算是做个纪念:

    1.WinRunner如何加载Dll,例子代码如下:

    rc1 = reload ( "win32api", 1, 1 );
    if ( rc1 != 0 )
     { tl_step ( "Error Message", FAIL, "[reload(\"win32api\")] - FAILED!"); }
    else
     { tl_step ( "Status Message", PASS, "[reload(\"win32api\")] - OK"); }

    public function phone_num_gen (out phone)
    {
     auto x, areacode, prefix, sufix;

     x = int ( rand(GetTickCount())*1000000000000 );
     areacode = substr(x, 1 ,3);
     prefix = substr(x, 4, 3);
     sufix = substr(x, 7, 4);
     phone = "(" & areacode & ") " & prefix & "-" & sufix;
     return ( E_OK );
    }

    for (i = 1; i < 10; i++)
    {
     phone_num_gen(num);
     printf(num);
    }

    rc1 = unload ( "win32api" );
    if ( rc1 != 0 )
     { tl_step ( "Error Message", FAIL, "[unload(\"win32api\")] - FAILED!"); }
    else
     { tl_step ( "Status Message", PASS, "[unload(\"win32api\")] - OK"); }

    2.在winrunner中如何统计代码行,提供一种解决思路

    public function cloc ( in fileX, inout lines_code, inout lines_blank_or_comment, inout total_LOC  )
    {
     auto line;

     # Initialize variables ...
     lines_code = 0;

     file_open ( fileX, FO_MODE_READ );

     while ( file_getline( fileX, line ) == 0 )
     {
      # Blank or Coment lines ...
      if ( match( line, "[^#]" ) == 1 )
      {
       lines_blank_or_comment++;
      }
      else
      {
       lines_code++;
      }
     }

     total_LOC = lines_code + lines_blank_or_comment;

     file_close ( fileX );
    }


    rc1 = cloc( "C:\\Junk1\\scrīpt", LOC, BlankOrComment, TLOC );

    printf ( "Total Number of lines of code: %s\r\n", LOC );
    printf ( "Total Comment or blank lines in code: %s\r\n", BlankOrComment );
    printf ( "Total lines in file: %s\r\n", TLOC );

    3.winrunner错误处理函数

     

    function CreateErrorMessageArray ( inout ErrorMsgArray[] )
    {
     # Location of WinRunner scrīpt which defines the error message codes
     auto ErrorMsgFile = getenv ( "M_ROOT" )  & "\\lib\\wr_gen\\scrīpt";
     auto rc = E_OK;  # Return code for this function
     auto character;  # Store a character
     auto line;   # Store a line from file
     auto tmpline;  # Store a line with no tab or spaces
     auto counter;  # Used to strip tab and spaces out of the line
     static tmpArray[]; # Store split (  )  results

     # Delete everything in the ErrorMsgArray
     for  ( counter in ErrorMsgArray )
      delete ErrorMsgArray[counter];

     rc = file_open ( ErrorMsgFile,FO_MODE_READ );
     if  ( rc != E_OK )
      return  ( rc );

     #Parse the file looking for "public const E_"
     while ( file_getline ( ErrorMsgFile,line ) == 0 )
     {
      if  ( index(line, "public const E_") > 0 )
      {
       # Get rid of spaces and tab characters
       tmpline = "";
       for  ( counter = 1; counter <= length(line); counter++ )
       {
        character = substr ( line, counter, 1 );
        if  ( (character != " ") && (character != "\t") )
         tmpline = tmpline & character;
       }
       split  ( tmpline, tmpArray, "=" );

       # The substr ( tmpArray[2],1, length ( tmpArray[2] ) -1 ) gets rid of the trailing semicolon  ( ; )
       # The substr ( tmpArray[1], 12 ) is the error code minus the public const
       if  ( ErrorMsgArray[substr(tmpArray[2], 1, length(tmpArray[2] - 1 )  ) ] )
       {
         ErrorMsgArray[substr(tmpArray[2], 1, length(tmpArray[2] - 1) ) ] =
         ErrorMsgArray[substr(tmpArray[2], 1, length(tmpArray[2] - 1) ) ]&", "&
         substr(tmpArray[1], 12 );
       }
       else
       {
        ErrorMsgArray[substr(tmpArray[2], 1, length(tmpArray[2]) - 1) ] =
        substr(tmpArray[1], 12);
       }
      }
     }
     file_close ( ErrorMsgFile );
     return  ( E_OK );
    }

    function GetErrorMessage ( inout ErrorMsgArray[], in ErrorCode )
    {
     return ( ErrorMsgArray[ErrorCode] );
    }

     

  • AOM对象创建不成功

    2008-08-31 00:32:01

       

          今天用VB写创建AOM对象,代码执行如下的时候就报错:

          Set Qtp_App=CreateObject("QuickTest.Application")'报错 ActiveX控件不能创建

          单独打开qtp没有问题,就是以上代码会出现问题,最后找了下论坛中的是否有人遇到同样的问题,也没有最后给解决办法,最后自动动手丰衣足食,分析结果是直接注册QTObjectModel.dll也不能解决以上问题,分析应该是有相关dll对象耦合在一起了,所以重新注册相应的dll就可以解决了,大胆推断后,然后就是小心求证,最后问题解决

          解决方法尝试如下:重新执行C:\Program Files\Mercury Interactive\QuickTest Professional\bin\QuickTestProfessional.bat,也就是重新注册qtp dll,执行完毕后执行代码,没有报错

  • 贴士:过程 规程 规范

    2008-08-27 23:43:41


    过程:一系列的活动,把输入转化成输出的流程,其中的活动可裁剪.
    规程:为了细致一个活动的具体做法而做的说明,可被别的流程调用,主要是强调步骤,告诉别人怎么去做.
    规范:主要是针对输出的,实现一个活动的标准

  • 老婆测试工具培训记 - LoadRunner Winsocket 动态数据处理

    2008-08-27 19:11:53

    /*** Actions.c ***/

    #include "lrs.h"

    #define host "localhost"
    #define port 23
    #define socktype "TCP"

    void Printf( char * str )
    {

     lr_message ( str );

    }

    int recv( char *sock, char *buffer, int bytes, int flags )
    {
     int size;
     int byte;
     int result;
     char *data = (char *)malloc(1);
     char input[12767];  // make as big or small as you want
     
     sprintf(input,"");
     for (byte = 0; byte < bytes; byte++)
     {
      lrs_set_recv_timeout(1,0);
      result = lrs_receive_ex(sock, "WS_BufferIN", "NumberOfBytesToRecv=1", LrsLastArg);
      lrs_get_last_received_buffer(sock, &data, &size);
      if (size != 0)
       sprintf(input,"%s%c",input,data[0]);
     }
     strncpy(buffer,input,strlen(input));
     return strlen(input);
    }

    int send( char *sock, char *buffer, int bytes, int flags )
    {
     int size;
     int byte;
     int result;
     char *data = (char *)malloc(1);
     char input[12767];
     
     sprintf(input,"");
     
     lrs_set_send_buffer(sock,buffer,strlen(buffer));
     //sprintf(WS_BufferOUT,"%s",buffer);
     result = lrs_send(sock,"WS_BufferOUT",LrsLastArg);
     return strlen(buffer);
    }


    Actions()
    {

     char WS_Sock[] = "socket0";
     char *WS_SockType = (char *)malloc(3);
     char *WS_RemoteHost = (char *)malloc(1024);
     char *WS_Data = (char *)malloc(2024);
     int WS_Result;
     int size;
     char *data = (char *)malloc(1024);
     char temp[2024];
     char buffer[1024];


     sprintf(buffer,"RemoteHost=%s:%d",host,port);
     strncpy(WS_SockType,socktype,3);
     strncpy(WS_RemoteHost,buffer,strlen(buffer)); 

     // Create & Connect to host specified in WS_RemoteHost
     // the TCP/IP connection will be of WS_SockType
     lrs_create_socket(WS_Sock, WS_SockType, WS_RemoteHost,  LrsLastArg);

     // read in 10 bytes from the remote host
     recv(WS_Sock,data,10,0);
     sprintf(temp,"%s",data);
     Printf(temp);

     sprintf(temp,"This is outgoing data...");
     // send a string to the remote host
     send(WS_Sock,temp,strlen(temp),0);

     // close the connection
     lrs_close_socket(WS_Sock);


     return 0;

    }

  • SAP Monitor Counters

    2008-08-27 18:50:43

     

    Av. DB Req. Time

     

    A considerable amount of the dispatched time of a dialog is spent reading or changing the data of the respective database. The time for processing logical data base requests is stored in this field.

     

    Various factors affect the logical DB access time. Read requests can either be sent to the data base buffers or to the fast local SAP buffers. The efficiency of the buffers, the required number of requests as well as a large number of database change requests affects the total access time.

     

    The DB access time also takes into account the data base server CPU performance as well as network transfer times.

     

     

    Av. Enqueue Time

     

    No information for this from the SAP server.

     

     

    Av. Response Time

     

    The response time of a dialog step comprises the time for the dialog request to the dispatcher work process, dialog processing, and completion of the dialog in the dispatcher and transfer of data to the presentation medium.

     

    Please note that the time required for processing the "Presentation -- Dispatcher -- Presentation" communication step is not taken into account here. In long-distance or low-performance networks, this step can lead to considerably longer 'subjective' response times.

     

    Response time is usually divided into waiting time and dispatched time.

     

    The SAP response time consists of the following components:

     

    Response time             =     Waiting time + "Dispatched" time

     

    Dispatched time   =     Generation times at run-time

     

    + Loading time for programs, screens, and CUA interfaces

     

    + Roll times for rolling the working data in and out

     

    + ABAP / 4 processing time

     

    + DB database interface time – that required at the SAP interface from ABAP / 4 to the database and SAP buffer

     

    + Enqueue time for SAP logical lock processes

     

    The displayed CPU time is also a component of the response time, but is not broken down further. Thus the CPU time is a further independent component of the response time.

     

     

    Av. RFC + CPIC Time

     

    There is no information for this in the ST03 transaction.

     

     

    Av. Roll I + w time

     

    No documentation available.

     

     

    Average Bytes Req.

     

    A number of interfaces provide the SAP application with data for various purposes. The data requests are differentiated according to the following interfaces/data types:

     

    Screen sources

    Screen load

    ABAP   sources

    ABAP   load

    CUA    sources

    CUA    load

    Nametab interface

    CPIC    interface

    DDIC    interface

    DSQL    interface (user data from data base)

     

     

    Average CPU Time

     

    During execution of a dialog step, the application server CPU is used for processing (loading, generating, processing DB requests, processing ABAP/IV...). The CPU time represents a large part of the dispatched time, which is response time without waiting time.

     

     

    Average Load Time

     

    Loading and generating time comprises the time required to load objects such as source codes, CUA interface and screen information from the database and to generate them, if required.

     

     

    Average Wait Time

     

    Under normal circumstances, a dialog step should be transferred from the dispatcher work process to the application process immediately after its request. If this is executed, the average waiting time in the dispatcher process is several milliseconds. In high-load situations in the application server or the system, waiting times in the dispatcher queue and considerable response times (> 1s) can occur.

     

     

    CPU Time

     

    During execution of a dialog step, the application server CPU is used for processing (loading, generating, processing DB requests, processing ABAP/IV). The CPU time represents a considerable amount of dispatched time, and thus of response time without waiting time.

     

     

    Database Calls

     

    Total of the modification (INSERTs, UPDATEs, DELETEs) and delete commands to the database system.

     

     

    Database Requests

     

    The number of logical data base requests corresponds to the number of requests transferred by the ABAP/IV processor to the interface. Please note the difference between logical requests and calls transferred to the database by the interface.

     

     

    DB Calls: Changes

     

    Number of logical table change requests. Change requests are UPDATE, DELETE or INSERT one or more lines of a table.

     

     

    DB Calls: Direct Reads

     

    Number of logical "direct read" data base requests, e.g. ABAP/IV "SELECT SINGLE ..." statements.

     

    The local SAP buffer can in certain cases, process the request. If not, it must be transferred to the database.

     

     

    DB Calls: Sequential Reads

     

    Number of logical "sequential read" data base requests, e.g. ABAP/IV SELECT * FROM ... statements. This request can, in certain cases, be processed by the local SAP buffer (100% buffer for tables) and if not, is transferred to the database.

     

     

    Dialog Steps

     
    The number of counted/usable dialog steps or statistics records.  A dialog step is logged as a statistics record in the SAP workload statistics if it is one of the following types: DIALOG, UPDATE, BATCH, SPOOL, ENQUEUE.

     

     

    Roll wait time

     

    Response time of dialog steps which are not ended, despite roll out (such as some RFCs, for example), and which wait a certain time in the roll area until the dialog step is continued. This time is called the waiting time in the roll area.

     

     

    Roll-in time

     

    Time used in dialog steps for roll in/out operations.

     

    In roll-in operations, user-specific data is transferred (rolled in) to the process work area from the shared memory roll buffer or roll file.  In roll-out operations, data is transferred (rolled out) to the roll buffer or roll file.

     

     

    Roll-ins

     

    Number of roll-in operations.

     

    In roll-in operations, user-specific data is transferred (rolled in) to the process work area from the shared memory roll buffer or roll file.  In roll-out operations, data is transferred (rolled out) to the roll buffer or roll file.

     

     

    Roll-out time

     

    Time used in dialog steps for roll in/out operations.

     

    In roll-in operations, user-specific data is transferred (rolled in) to the process work area from the shared memory roll buffer or roll file.  In roll-out operations, data is transferred (rolled out) to the roll buffer or roll file.

     

     

    Roll-outs

     

    Number of roll-out operations.

     

    In roll-in operations, user-specific data is transferred (rolled in) to process work area from the shared memory roll buffer or roll file. In roll-out operations, data is transferred (rolled out) to the roll buffer or roll file.

     

     

    Time per DB Request

     

    Average response time of all commands to the database system in milliseconds.

     

    As access times to buffered tables are shorter, they are not included in the runtime measurement.

     

     

    Time per Req.:    Changes and commits

     

    Mean time per dialog step for logical  "UPDATE", "DELETE" or "INSERT" database requests.

     

    The time requirements for 'Commit work' requests to the database are also taken into account here.

     

     

    Time per Req.:    Direct Reads

     

    Mean time per dialog step for a logical "direct read" data base request, e.g. the ABAP/IV "SELECT SINGLE ..." statement.

     

     

    Time per Req.:    Sequential Reads

     

    Mean time per dialog step for a logical "sequential read" data base request, e.g. the ABAP/IV "SELECT * FROM ..." statement.

     

  • (转)献给正在为面试而奋斗的七期同学们

    2008-08-25 11:06:23

    这是我从51Testing就业专版中转出来的一篇文章,2005年发的了,写这篇文章的人是51testing的一位学员,参加51testing就业培训的学员都享受到这样的特权可以进入到学员专版,里面有很多资料,也有很多珍贵的照片。还有很多学员经过培训之后自己总结的资料。发这篇文章是因为最近收到很多人投过来的简历,发现学生找工作真的很难,下面借花献佛这篇文章就献给那些正在找工作的大学生们:

     

    献给正在为面试而奋斗的七期同学们


    我的面试经验
    面试!面试!就在我成为面霸的第二十一天,终于有家公司的大门为我打开了。二十一天,九家公司面试,我已经成为积累了一套面试经验,在这里和大家分享,希望能够帮助你顺利的通过面试这一关。
       第一 我有九年的护士工作经验,这对于找测试工作是不利的一面,我在网站上贴的简历,没有半点隐瞒我的这个工作经验,那为什么会有这么多公司给我面试机会呢?这就要谈谈我的简历了,简历中的项目经验,工作经验和职业技能非常重要,是最容易吸引人的地方。用人单位都想找有测试工作经验的,没有测试工作经验,有项目经验也好。我在这里就耍了一点小聪明,大大的增加了我的面试机会,我把我们学习过程中的Counter V1.0 和宠物网站的测试,当成的我项目经验,如下:

       项 目 经 验   
    2005/11--2005/12:宠物网站
    项目描述: 该项目是一个宠物购买的网站,由Asp开发,SQLServer数据库,支持Http协议
    责任描述: 利用Robot QTP loadrunner 三种工具对该网站进行自动化测试.利用Robot QTP生成数据,录制运行脚本,分析得到的各种数据,找出网站的性能瓶颈

    2005/09--2005/11:Counter v1.0
    软件环境: VC
    项目描述: 该项目开发一个代码行统计工具,要求可以实现(.c)(.cpp)文件代码行数的多种统计功能。
    责任描述: 对SRS、LLD评审,写作系统测试计划,设计系统、集成、单元测试用例,用TCL脚本语言搭建测试集成测试环境,执行集成测试,单元测试,系统测试.提交缺陷报告与测试日报
       




    再有,职业技能怎么样写呢?我们上课学习的关于测试的东西非常广,都写上去吗?周春江老师讲过,“你的简历要让用人单位,面试官感到有问题可以问你”,所以在写简历的时候,我就在想,我写的每一条职业技能,面试官会问我什么问题,我应该怎么回答。我把我善长的技能写在前面,而且要稍微写的详细一些,这样使面试官对你的简历感兴趣,从而获得了面试机会。
       第二,谈谈我的面试前所做的准备。没有面试的日子,要把上课时李波老师所说的面试常问的问题准备好。如,我到所有的面试公司都会问我这样一个问题,你为什么不做护士而转行做软件测试,或者他会间接的问,做护士太累了,所以你不想做护士了吧??这个问题太难回答了,你说做护士累,不想做了,面试官会认为你不能吃苦,说不喜欢护士工作,面试官又会认为,做事不专一,认为你不稳定。那要怎么回答呢?就针对这一个问题,我和我老公在家讨论了几天,才总结出答案:“一是我喜欢计算机,对它有浓厚的兴趣,二是对于护士工作不是十分喜欢。我觉得人活一辈子,应该做些自己喜欢做的事情,所以我一直通过各种方法学习计算机。”这样回答,让人感觉我是个很上进的人,会给面试官留下很好的印象。还有,最常问的问题就是,你的缺点和优点是什么?这时候千成不能把自己的缺点说出来,要说一个他能够接受的缺点,我是这么回答这个问题的,我的缺点是我缺少IT行业的工作经验。我的优点是,我受过系统的测试培训,从理论到执行到工具,我都能够做的很好。这样的话,就使我的优点弥补了我的缺点。关于这些问题,都是事先经过深思熟虑,想好的答案,这些都帮助我建立了应对面试的足够的信心。只有自信的人,才能获得最后的胜利。
       第三,面试通知到来了,我所做的面试准备。接到面试通知,我做的第一件事是上网查找该公司的详细信息,最好能找到公司的网站,了解公司是做什么产品的。然后查看该公司的招聘信息,了解他对测试人员都有哪些要求,针对这些要求做准备。例如,一家做通信信息的公司,他的招聘信息,是要求应聘人员了解IEEE802.3, 802.1D, 802.1Q, TCP/IP, IGMP, RIP, OSPF…想把这些都搞明白,一天的时间是不够的,那怎么办呢,我就找各种资料了解IEEE802.3, 802.1D, 802.1Q, TCP/IP, IGMP, RIP, OSPF… 的全称是什么,主要是做什么。第二天去面试,果然笔试的题就有相关的内容。还有,就是要把乘车路线查找好,保证第二天能够准时面试。
      第四,面试的时候,我的表现。我很自信,因为我有强大的测试理论,我相信关于测试方便的问题难不倒我;我很自信,因为我了解我所要面试的公司,我也了解自己的强项和弱势,知已知彼,方能百战百胜。所以当我面对面试官的时候,能够做到不卑不亢。当他问到我的弱项的时候,我想办法让面试官忽略我的弱项,例如,我的编程基础不好,当面试的时候遇到这类问题的时候,我会说,我学过,但用的太少,所以不是很熟,但我的学习能力强,在实践工作中,我会把编程方面很快的学好的。还有,针对笔试题,一定要尽所能的回答,特别是测试方面的题目,一定要保证能够正确的回答出来,其他业务方面、编程方面等问题,如果回答不出来,也容易被人谅解。我记得我到过一家医疗械器公司,他的笔试题有二十一道,从测试计划到用例设计到谈谈你的工作生活感受,应用尽有,可以覆盖我们上课所学的前二本书的60%,我足足写了二个半小时,除去一道缺陷工具没学过,其他二十题,全部写上,面试官对我很满意,但是因为薪资问题,没有了结果。
      第五,面试的面试官形形色色的人都有,有的面试官有着丰富的面试经验,他会一针见血的,指出你的弱项,这时候,我会很坦然的面对,承认这是我的不足,接着讲述的我优势,尽可能的用我的优点来让他忽略我的缺点。有的面试官,工作经验丰富,但面试经验少,他不知道问你什么,这时候,我就用很谦虚的态度问他关于他们公司产品都做哪些方面的测试,然后,说噢,这个这学过,我。。。。。,讲述一翻自己的对这方面测试的理解,然后问他是这样吗?有的面试官第一次来面试别人,他比你都紧张,例如,我在世贸商城的一家公司面试,他们有二个人面试我,都很年轻,其中一个很紧张,我怀疑他是第一次面试别人,他问我问题时候,声音都在发抖,我呢,回答好他的问题,然后非常谦虚的说,是这样吗?结果,他马上也不那么紧张了,后来他还和我说,我很想给你这个工作机会,然后一直问旁边的人怎么样,旁边的人一直也不说话,我想我只有50%的希望了。
      上述是我的面试经历,如有雷同,纯属巧合。希望能给七期的正在为面试而奋战的同学们战友们带来帮助。

    [ 本帖最后由 cynthia_lu 于 2005-12-3 22:07 编辑 ]
  • 探子

    2008-08-25 10:49:22

     

           2008年8月23日,经过一个月的努力,在深圳51Testing就业培训第二期开班。开班的当天来了一位咨询的学员,说是从广州赶过来,专程想了解下我们培训的情况,想通过培训加入测试行业。我们其中一位职业发展老师很热情的接待了她,给她做了详细的介绍,由于当天我们是开学典礼邀请了几位企业中的朋友过来给学员讲下在企业里的工作情况是什么样,如何做好测试,现在需要做那些准备;还有一位是我们上海21期学员,专门从广州过来给小师弟师妹讲应该如何学习,如何做好跨入行业的准备,这位学员现在是广州一家公司的测试主管。每期班开学我们都会请以前的就业培训学员和用人企业或者企业中的主管过来跟学员交流,参加我们的开学典礼,让学员提前就进入做一名软件测试工程师的状态。

           这个咨询的学员问的很详细,问招生,问教学,问就业,本来以为是个正常的学员咨询,我们也没有任何避讳,并且让她跟以前的学员交流,当中午一段时间大家都很忙,这个咨询者和学员交流后到咨询室等老师,我们的老师到咨询室找她的时候,发现她正在拿着相机在我们的咨询室照相,并把一个mp3放入兜子里。我们的老师看到后产生了怀疑,因为自从51testing到深圳以来,其它培训机构的人经常来做假咨询,其中有一次我们另外一位老师在接待咨询的过程中发现就是以前某培训机构的同事。经过一番交流,确认该人就是一名其他培训机构的探子。

         以前在北京的时候,就经常有其他培训机构的人过来咨询,拿着录音设备录音,探子和正常的咨询者其实有明显的区别,问的问题的角度其实都不一样。不过这里要说一个很有意思的事情,我们的学员中就有其他培训机构做测试培训的咨询师,她也是在咨询我们之后参加51testing的培训。其实很多事情都是只要做好自己,就能有成果,只要我们自己不做错事情,我想我们就能成功。

  • 自动化测试框架中如何远程启动进程的技术

    2008-08-22 22:46:07

        

           在自动化测试框架中经常设计分布式执行用例,调用不同计算机机上的qtp来执行,如何远程调用qtp有以下几个方法:

           1.利用qc启动相应机器上qtp执行自动化测试用例

              打开QC 打开test lab--> in the execution flow-->设置

           2.利用wmi对象远程启动远程进程

             脚本代码例子:

             strComputer = "."
             strCommand = "QPro.exe"


             Const INTERVAL = "n"
             Const MINUTES = 1

             Set ōbjWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
             Set ōbjScheduledJob = objWMIService.Get("Win32_ScheduledJob")
             Set ōbjSWbemDateTime = CreateObject("Wbemscrīpting.SWbemDateTime")

             objSWbemDateTime.SetVarDate(DateAdd(INTERVAL, MINUTES, Now()))
             errReturn = objScheduledJob.Create(strCommand, objSWbemDateTime.Value, False, 0, 0, True, intJobID)


             If errReturn = 0 Then
                Wscrīpt.Echo "notepad.exe was started with a process ID: " & intJobID
             Else
                Wscrīpt.Echo "notepad.exe could not be started due to error: "&errReturn
             End If
      

           3.利用lr controller远程启动qtp自动化测试脚本

            打开controller,然后加载qtp脚本,设置load generator

     

          

  • 老婆测试工具培训记 - QTP 函数实现 - 1

    2008-08-20 13:13:18

    Write a program to delete Line in file?

    思路:封装scrīpting.filesystemobject对象,利用readline方法

    Function DeleteLine(strFile, strKey, LineNumber, CheckCase)

    'Use strFile = "c:\file.txt"  (Full path to text file)
    'Use strKey = "John Doe"      (Lines containing this text string to be deleted)
    'Use strKey = ""              (To not use keyword search)
    'Use LineNumber = "1"         (Enter specific line number to delete)
    'Use LineNumber = "0"         (To ignore line numbers)
    'Use CheckCase = "1"          (For case sensitive search )
    'Use CheckCase = "0"          (To ignore upper/lower case characters)

       Const ForReading=1:Const ForWriting=2
       Dim objFSO,objFile,Count,strLine,strLineCase,strNewFile
       Set ōbjFSO=CreateObject("scrīpting.FileSystemObject")
       Set ōbjFile=objFSO.OpenTextFile(strFile,ForReading)
       Do Until objFile.AtEndOfStream
          strLine=objFile.Readline
          If CheckCase=0 then strLineCase=ucase(strLine):strKey=ucase(strKey)
          If LineNumber=objFile.Line-1 or LineNumber=0 then
             If instr(strLine,strKey) or instr(strLineCase,strkey) or strKey="" then
                strNewFile=strNewFile
             Else
                strNewFile=strNewFile&strLine&vbcrlf
             End If
          Else
             strNewFile=strNewFile&strLine&vbcrlf
          End If
       Loop
       objFile.Close
       Set ōbjFSO=CreateObject("scrīpting.FileSystemObject")
       Set ōbjFile=objFSO.OpenTextFile(strFile,ForWriting)
       objFile.Write strNewFile
       objFile.Close

    End Function

     

     

  • vbs创建对象的知识点

    2008-08-20 11:18:58

      一般vb中创建对象有两种形式:

      (1)

      dim   a   as   object_x  
      这样只是定义对象A的一个标识,并没有开辟内存空间来创建这个对象.  
      dim   a   as   new   object_x  
     

      这样定义就开辟了内存空间,即在定义对象时就构建了这个对象.其它等于:  
     

      (2)

      dim   a   as   object_x  
      set   a= new   object_x  

      或者  
      dim   a   as   object_x  
      set   a= CreateObject("objectname”)

     
      CreateObject支持更多的对象定义.比如用VB6写的DLL不是标准格式的DLL,一般用CreateObject来完成对象的创建,而且在VBscrīpt(qtp)等VB的子集中也只支持用CreateObject.

  • 面子与培训

    2008-08-19 18:12:41

             今天同事告诉我有个女孩子由于自己是重点高校毕业的学生参加培训觉得很没有面子,这还是第一次让我遇到的情况。参加培训应该要想好为什么要参加培训,不是为了面子而参加。如果你订好了自己奋斗的方向,如把软件测试做好你自己职业发展路线,就要提前做准备,在学校学习基础理论的时候就开始注重自身能力的提高。除了学习理论外会有针对的学习软件企业所需求的技术、职业所要求的技能不断锻炼,这样当大学毕业的时候轻松跨入这个行业。

            参加我们培训的人有很多名牌大学毕业的学生参加培训,有清华和北大甚至还有从国外回来如美国,丹麦,法国,阿拉伯等,他们不是找不到工作,我觉得他们给人的感觉是对自己的职业定位很明确,过来培训是为了提高技能,为自己的将来职业发展做好准备。

            参加培训前要想清楚是为了就业,还是为了获得高薪,还是为了提高技能,只有有了明确的目标才能把握好心态。通过培训使用培训所掌握的知识来使你工作更加容易,这样提升的空间就会更大。

            所以想好了为什么参加培训,不要因为面子而裹足不前。         

  • 接到一个电话

    2008-08-18 14:27:50

      

            今天同事接到一个电话咨询我们的周末精品班的课程,由于我们周末精品班培训前是需要考试才能进入学习的,因为为了保证培训效果需要两方面一方面是培训课程的体系内容,一方面是个人的主观努力,由于课程内容需要有一定基础的人参加,所以要面试入学学员,笔试考察部分测试理论方面,面试会问些编程方面的知识。

           由于打进电话的人要问些课程的具体设置,所以需要交流,该人说他在美国做了10多年的QA,回国后找到一家公司做自动化,但是很久不用工具,所以想参加培训。了解培训内容中是否有白盒测试,我界很少了下课程体系和单元测试的内容,但是她竟说不知道我说的单元测试是什么?做过测试的人都知道软件测试是一项复杂的系统工程,从不同的角度考虑可以有不同的划分方法,对测试进行分类是为了更好的明确测试的过程,了解测试究竟要完成哪些工作,尽量做到全面测试。按照是否执行可以划分为动态和静态测试,按照测试阶段划分单元测试 集成测试 系统测试,按照测试方法来分有白盒测试,黑盒测试。明显可以看出白盒测试和黑盒测试只是一种测试方法,一般白盒测试用在单元测试阶段,黑盒测试用在系统测试阶段,如果想保证软件质量我们都是从整个软件生命周期去把握,孤立的看白盒测试和黑盒测试是没有意义的,比如在单元测试阶段需要参照文档进行设计和编写测试用例,而我们看白盒测试主要是写针对内部逻辑进行测试(概念:白盒测试也称结构测试或逻辑驱动测试,是指基于一个应用代码的内部逻辑知识,即基于覆盖全部代码、分支、路径、条件的测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证)

        如果按照阶段来看的话就有流程和技术,技术我们不用说了主要是测试单元模块内和模块之间的 功能测试、容错测试、边界测试、约束测试、界面测试、重要的执行路径测试,单元内的业务流程和数据流程等。 如果是流程就要设计到人,   单元测试的职责分工: 由各项目组的开发人员完成测试工作,并详细记录测试结果和修改过程等。所以真正的来看要想做好单元测试不仅仅是测试的具体技术用的是什么还有流程方面去要保证。做了10年的人还不知道单元测试和白盒测试的区别。实在是遗憾,而且还是在国外做了10多年。

       题外话:很多人参加培训想学到东西,第一个就应该看课程体系和内容,很多机构培训的课程介绍中只培训白盒测试和黑盒测试,也就是把测试放在一个孤立的点上培训,这怎么能让你从一个整体的环境中去认识如何做好单元测试呢,这么培训出来的人怎么才能有提高呢。

      骗人者可恨,上当者可气。

     

  • Mercury SiteScope 性能监控工具简介

    2008-08-17 22:58:13

        SiteScope是由Mercury Interactive公司所提供的系统管理软件。SiteScope可以实施于Windows PC 服务器,Sun Solaris平台或是Linux之上,在统一的平台上集中式地管理各种不同的操作系统的服务器,WEB服务器,数据库系统,邮件服务器,网络设备,应用服务器等等资源。它的显著的无代理方式监控技术的应用,尤其适用于多变的系统环境之中,再加上SiteScope的远端管理方式和极其灵活的配置方式,将为用户的管理和服务助一臂之力。
        在传统的网络系统管理软件中,大部分都采用Manager-Agent的体系结构。Agent是指安装在被管理的生产系统机上的一个或是多个代理程序,它负责采集被管理机上的一系列性能数据,并把数据传递给Manager一端。尽管许多厂商宣称这些代理程序Agent将以较低的优先级和较少的资源消耗运作,我们还是无法避免这样一个问题。就是当我们的关键的生产应用系统发生性能危机时,我们无法排除代理软件Agent对生产系统的或多或少的影响。换言之,管理软件的代理程序的存在,干扰了我们对生产系统的维护和性能问题的诊断。尤其是在有众多服务器的环境中,为了保障用户的托管服务器的绝对的安全和无干扰,我们在此推荐SiteScope所采用的先进的Agentless系统管理和性能管理技术,它将避免在生产系统中安装任何不必要的代理程序。没有代理程序,被管理机的资源消耗和影响也减到最小。由于在SiteScope管理系统中采用了与操作系统厂商、数据库厂商和其他应用系统厂商的性能数据库的集成,我们将在不修改生产系统机的情况下,对其进行全面的系统、数据库和应用系统性能管理。无代理程序的系统、数据库和应用系统性能管理方案,它将生产系统的日常运行和管理系统的操作分离了开来,使得管理系统对生产系统的消耗和影响降到了最低点。SiteScope目前支持绝大多数的业界流行的标准,包括操作系统类型Windows/Unix/Linux,数据库,邮件系统,FTP服务器,网络设备,应用服务器,中间件,等等90多种不同监控器。


    SiteScope提供了对于不同URL和业务关键交易的监控点,它甚至也可以模仿业务用户来填写Web表单。它基本的URL监控点要远比其它产品要丰富得多。
       用户可以通过URL监控器管理每一个关注的WEB页面的响应时间,使用URL content做页面内容的匹配检查。而URL sequence监控器更能模拟用户一定的业务流程顺序的访问一组页面。SiteScope 从URL等监控器获得数据帮助用户实时的了解的基于WEB的应用系统的性能问题。
    传统的性能监测方式依赖片断式的结构显示。每个IT 部门都配有不同人员负责网络结构的某一部件。而且,每个部门又都使用各自的监测器跟踪系统性能。其结果是从元件层面得到的是片段孤立的应用性能显示。利用Mercury Interactive 的SiteScope,管理员从一台座机就能监测到所有服务器和应用程序的性能品质,发生状况立即能接收到警报。SiteScope可以在系统发生故障时,发送Email,SMS,Pager,SNMP traps,scrīpts,Sound,Database,Log,Post等不同形式的警告到管理员的信箱或是手机。在任何时候,管理员都会在第一时间,早于客户了解到系统的运作状况。在一个警报之后,SiteScope能够实施一系列自动的应急措施,在管理员到达现场之前,尽量避免down机等重大损失


     

1665/9<123456789>
Open Toolbar