踏实,努力向上!

发布新日志

  • WinRunner与QTP——我们该选择谁

    2009-11-14 12:03:48

    区别

    1.工具试用环境(功能自动化测试工具的选择与开发语言有关系,性能测试工具选择与协议有关系)的区别,这个区别很重要是自动化实施选择的第一步:
    qtp 和 wr都适用的范围:Web-Related Environments, IE, Netscape, AOL JDK, Java Foundation Classes, AWT Symantec Visual Café ActiveX Controls ERP/CRM: Oracle: Jinitiator, 11i, NCA Custom Client Server: Windows C++/C Visual Basic Operating Systems: Windows 98, 2000, NT, ME, XP Legacy: 3270, 5250 Emulators VT100
      仅仅 wr试用的
    Custom Client/Server :PowerBuilder Forte Delphi Centura Stingray SmallTalk ERP/CRM: Baan PeopleSoft Windows Siebel 5, 6 GUI Clients Oracle GUI Forms PowerBuilder
    Forte Delphi Centura Stingray SmallTalk ERP/CRM: Baan PeopleSoft Windows
    Siebel 5, 6 GUI Clients Oracle GUI Forms
      仅仅qtp试用的范围:
    ERP/CRM SAP Siebel 7.x PeopleSoft 8.x.Net WinForms WebForms .Net controls Web Services XML, HTTP WSDL, SOAP J2EE, .Net Multimedia RealAudio/Video Flash

      自动化测试工具的选型第一步就是看该工具是否适用于本软件系统的开发语言环境,否则自动化实施就会功败垂成。如:我们有学员去一家公司,该公司 是用的是c#开发的软件,他们在用wr座自动化测试,经常会遇到识别对象的问题,脚本运行失败等,就是一个典型例子,工具选型错误。
    从上边来看,现在大多数说wr做c/s架构,qtp做b/s架构的测试这是一种错误的说法,应该说他们更适用于什么架构的测试,因为适用环境决定了他们可以做这些事情。

    2.工具本身特点:
      验证点问题:wr有四种验证点,qtp有9种验证点(题外话 robot有13种验证点),这种验证点的类型越多提供的验证方式越多,就越减少验证脚本的开发难度,而且有些验证点类型是qtp独有的,比如xml验证 点,wr就没有,所以从这点上来看,验证点多其实简化脚本开发难度,让软件更容易使用,那么和你的团队状况有关系,比如你的团队是技术人员欠缺的话,那么自动化测试工具的易用性更加重要。


    3.脚本开发的特点:
      wr是tsl脚本,类c,qtp是vbs脚本,从脚本的难度来看,vbs更容易上手,c要上手周期比较长,所以根据一个团队的人员技术情况,会选择一个更加符合实际情况的工具


    4.脚本的可扩展性
      脚本开发过程中对脚本的稳定性,识别对象的能力,脚本的可维护性等都有要求,wr是c的脚本他没有办法直接调用window底层的com对象(这些对象的调用弥补了脚本开发的不足),只能通过两种办法一种是通过其他工具(vc,delphi等)开发相应的dll(vb除外,因为vb开发的也是com),这样加大了团队技术人员的要求;一种方法是写vbs,然后再wr中调用,这种方法的缺点是脚本的衔接性不好。而qtp利用的是微软的脚本引擎,直接可以调用vbs语句,可以直接调用底层com对象,对脚本开发能力 大大的增强了
    这里要说的是wr可以做到qtp的效果,但是需要绕行,增加了脚本开发的难度,不是说他不能做。

    5.脚本对象的维护
      在脚本开发过程中,这两个工具都有一个很重要的特点,脚本与测试对象分离,wr把对象保存在gui map中,qtp把对象保存在对象库里 repository.
    在 实际脚本开发过程中很多情况都用到了,对想描述,在wr中其实也可以做到对想描述,只是没有和qtp一样那么好听的名字“可描述编程语言”(qtp的叫 法)而已。wr的gui map就是一个文本文件,qtp的repostory是个xml描述。实际项目开发过程中,qtp更多的是把对象描述出来,而wr在脚本开发过程中限于环 境应用都把他保存在gui map里,因为描述出来的对象不象qtp那样好维护,wr描述出来的就是一个字符串而已


    6.脚本的可维护性
      他们都可以和td(qc)整合,通过td(qc)来维护脚本,搭成自动化测试框架。但是td(qc)调用wr可以直接调用,调用qtp需要安装插件。

      还有更多的不同,以上随手写出,提供大家参考,希望大家在实际项目中更多的体会,你们在培训过程中学到的自动化测试脚本开发的技术完全满足其他工具的应用,不要因为工具而工具,而是更多的脱离工具,手中无剑,心中有剑。

  • winrunner,QTP录制模式

    2009-03-19 23:19:27

    winrunner 两种录制模式:
    context sencetive recording:主要是以gui对象为基础,识别使用者点选的GUI对象(如窗口,菜单,按钮等),以及执行的操作(如按下,移动,选取等)
    Analog recording:记录鼠标的移动,点选与及键盘输入的操作

    QTP 三种录制模式
    正常录制:是QTP的默认录制模式,充分利用了 QuickTest 的测试对象模型,它能够识别应用程序中的对象,而不管它们在屏幕上的位置如何。它通过识别程序中的对象来代替以前屏幕坐标的形式。但是正常模式并不能保证程序中所有的对象都能够被录制识别,因此还需要其它两种模式来补充。

    模拟录制:它是录制所有的键盘和鼠标的操作,但是用该模式录制的步骤不能够被编辑。

    低级录制:录制的对象都以Window和WinObject的形式存在,它们在 Active Screen 中显示为标准 Windows 对象,这类方式适用于QTP不能正常识别对象时应用。假如你需要录制应用程序屏幕上录制操作的精确位置,使用低级录制模式。

  • QTP 注释多行

    2009-03-19 20:07:15

    选择多行按CTRL+M 来注释.

    CTRL+SHIFT+M来恢复注释代码

  • 录制点击右键菜单

    2009-02-23 20:14:41

    '打开记事本
    Window("Program Manager").WinListView("SysListView32").Activate "假木马.txt"
    '最小化记事本
    Window("记事本").Minimize
    Dialog("AA").Activate
    Dialog("AA").WinButton("Button").Click
    Dialog("AA").WinButton("Button_2").Click
    Dialog("AA").WinButton("Button_3").Click
    wait(10)

    '鼠标右键从第二个开始,各个都点击一次
    For  idx =2 to 5

    Dialog("AA").WinListView("WinListView").Select "Win32.Trojan.GrayPigeon.c", micRightBtn

    Set wshshell=createobject("wscript.shell")

       For i=1 to idx
       wshshell.sendkeys"{DOWN}"         '按下方向键N次
       Next
       wshshell.sendkeys"{ENTER}"       '点击此键
       Set wshshell = nothing

    Next

    备注:

    如果只是想点右键的某一个菜单,如右键的第四个菜单,则在录制右键点击后,得到如下脚本:

    Dialog("AA").WinListView("WinListView").Select "Win32.Trojan.GrayPigeon.c", micRightBtn

    添加如下脚本就能点击右键的第四个菜单

     Set wshshell=createobject("wscript.shell")

       For i=1 to 4
       wshshell.sendkeys"{DOWN}"         '按下方向键N次
       Next
       wshshell.sendkeys"{ENTER}"       '点击此键
       Set wshshell = nothing

     

  • 重新学习QTP一个月后

    2009-02-15 22:30:05

    离上次的“QTP令我很痛苦”快要一个月了。在这个月中,我进步了很大,QTP不再令我痛苦了。

    很多东西已经掌握了,已经知道怎么去写代码,去得到自己想要的东西。之前觉得同事高深的想法已经不在存在,在我轻易编写出他们能实现的东西后,才觉得如此的简单。

    这说明了我进步了,不再有恐惧感,我要努力,继续研究下去,假以时日,一定能达到一个高水平的。才一个月不到,我就已经进步了这么多。

    继续加油!

  • QTP的基本使用函数(转)

    2009-02-14 18:47:53

    QTP的基本使用函数:

    1,获取对话框相应的文字:GetVisibleText

    2,查找相应的字符串:instr(1,查找目标字符串,所查找的字符串)

    3,随机数的获取:Randomnumber.Value()或cstr(int(Rnd*10) 1)

    4,等待函数:Wait(秒数)

    5,获取数组下标:UBound(数组名)

    6,拆分数组:Split(MyString,",",-1,1)

    7,可执行步骤:OptionalStep

    8,报告信息:Reporter.ReportEvent3,"SaveStep","Outofcycle!"

    9,判断对话框是否存在:.exist

    10,事件过滤函数:Reporter.Filter=过滤条件(0,1,2,3),0代表显示所有的error和warning,1,显示error,2,显示waining,3,任何error和warning都不显示。

    11,循环函数:do…loopuntil,for…to…thennext,while.

    12,数据表格:DataTable,向外赋值,Dimaa=DataTable.value(“CellingName”,”ActionName”).

    13,获得对象属性的三种方法GetTOProperty,GetTOProperties,GetROProperty,GetTOProperty获得程序中对象当前的属性,GetTOProperties获得当前属性所有集合,GetROProperty获得的是录制时对象所获得的属性。

    14,检查点方法check和输出指定属性值output。

    15,函数Descrīption,可以获得某页面同标签的属性进行操作。

    16,函数nagative可以随便跳转页面到指定的URL。

    17,函数Object可以获得当前页面同属性的控件。

    18,函数Focus可以让控件获得焦点,函数Blur则是失去焦点,click单击,dbclick双击。

    19,函数setAttribute可以设置控件属性,getAttribute可以获得属性。

  • WinObject的GetVisibleText(取值)

    2009-02-14 18:44:18

    #点击主界面
    Dialog("AA2.0").Activate  
    #点击工具tab
    Dialog("AA2.0").WinButton("Button_2").Click
    #点击卸载软件tab
    Dialog("AA2.0").WinButton("Button").Click
    #定义变量
    Dim i,aa,bb,cc,dd
    #循环,一个接一个地取软件的信息
    For i=0 to 5
    #点击winlistview中的第I行。
    Dialog("AA2.0").WinListView("WinListView").Select i
    #取得这行的第(i,0)的值。即软件名称
    dd=Dialog("AA2.0").WinListView("WinListView").GetSubItem(i,0)
    #取得winobject的值。由于是标准控件,可以完全取出值来。
    aa=Dialog("AA2.0").WinObject("上次使用时间:2004-1-5  使用频率:有时").GetVisibleText
    #创建文件对象
    Set bb=createobject("scrīpting.FileSystemObject")
    #以追加的方式打开文件。如果没有此文件,则创建文件。
    Set cc=bb.opentextfile("d:\aa.txt",8,true)
    #表示第几条信息的标志。直接写入I变量
    cc.write(i)
    cc.write(":")
    #写入winlistview取得的值。即软件名称
    cc.write(dd)
    #写入一行空行。为了AA的代容不会直接接着dd写下去。
    cc.writeline( )
    #写入AA的代容。
    cc.writeline(aa)
    #关闭文件
    cc.close()
    Set cc=nothing

    Next

    Set cc=nothing

     

    WinObject的GetVisibleText(取值).完全取出来,由于控件是标准控件.把内容写入到TXT中,以追加的形式写入.如果此文件不存在则创建.

     

  • 一个定时测试的方法(转)

    2009-02-08 22:43:17

    用Schedule定时运行QTP脚本

    创建一个.vbs,在控制面板的Schedule里面定义自己的task就好

    vbs的脚本如下:

    Dim qtApp 'As QuickTest.Application ' Declare the Application object variable
    Dim qtTest 'As QuickTest.Test ' Declare a Test object variable
    Dim qtResultsOpt 'As QuickTest.RunResultsOptions ' Declare a Run Results Options object variable
    Set qtApp = CreateObject("QuickTest.Application") ' Create the Application object
    qtApp.Launch ' Start QuickTest
    qtApp.Visible = True ' Make the QuickTest application visible
    ' Set QuickTest run options
    qtApp.Options.Run.ImageCaptureForTestResults = "OnError"
    qtApp.Options.Run.RunMode = "Fast"
    qtApp.Open "C:\ Your Test Path Here", True ' Open the test in read-only mode
    ' set run settings for the test
    Set qtTest = qtApp.Test
    qtTest.Settings.Run.OnError = "NextStep" ' Instruct QuickTest to perform next step when error occurs
    Set qtResultsOpt = CreateObject("QuickTest.RunResultsOptions") ' Create the Run Results Options object
    qtResultsOpt.ResultsLocation = "C:\Your Results Path Here" ' Set the results location
    qtTest.Run ' Run the test
    'qtTest.Close ' Close the test
    Set qtResultsOpt = Nothing ' Release the Run Results Options object
    Set qtTest = Nothing ' Release the Test object
    Set qtApp = Nothing ' Release the Application object

    这种方法还没试过,先收藏起来,侍有用时,再试下。

     

    出处来自:
    http://butestnote.spaces.live.com/blog/cns!58DD013E49E92756!144.trak
  • QTP-action模板

    2009-02-08 22:34:38

     

    新建一个文本,输入一些新建Action时常包含的信息,然后保存为ActionTemplate.MST文件,
     并复制到QTP/dat目录下;这样每次新建action都会包含固定的信息了;
    例如:
    '-------------------脚本说明---------------
    '产品版本:      __Build(  )
    '测试员:
    '编写日期:
    '测试功能:
    '脚本类型:
    '被测试对象初始状态:
    '进展程度:
    '基本思路:
    '主要功能函数:
    '历史修改:
    '没解决的问题:
    '--------------------脚本内容-------------

    当然了,脚本的说明内容可以随意修改,但必须保存到dat目录下,并且文件的名字为:ActionTemplate.MST

    《!出自别人的日志》来自:http://butestnote.spaces.live.com/blog/cns!58DD013E49E92756!148.trak

  • QTP 关于文件的操作

    2009-02-08 22:10:04

    创建文件
    dim fso, f
    set fso = CreateObject("scrīpting.FileSystemObject")
    set f = fso.CreateTextFile("d:\test.txt", true) '第二个参数表示目标文件存在时是否覆盖
    f.Write("写入内容")
    f.WriteLine("写入内容并换行")
    f.WriteBlankLines(3) '写入三个空白行(相当于在文本编辑器中按三次回车)
    f.Close()


    打开并读文件
    dim fso, f
    set fso = CreateObject("scrīpting.FileSystemObject")
    set f = fso.OpenTextFile("C:\test.txt", 1, false) '第二个参数 1 表示只读打开,第三个参数表示目标文件不存在时是否创建
    f.Skip(3) '将当前位置向后移三个字符
    f.SkipLine() '将当前位置移动到下一行的第一个字符,注意:无参数
    response.Write f.Read(3) '从当前位置向后读取三个字符,并将当前位置向后移三个字符
    response.Write f.ReadLine() '从当前位置向后读取直到遇到换行符(不读取换行符),并将当前位置移动到下一行的第一个字符,注意:无参数
    response.Write f.ReadAll() '从当前位置向后读取,直到文件结束,并将当前位置移动到文件的最后
    if f.atEndOfLine then
        response.Write("一行的结尾!")
    end if
    if f.atEndOfStream then
        response.Write("文件的结尾!")
    end if
    f.Close()
    set f = nothing
    set fso = nothing

    打开并写文件
    dim fso, f
    set fso = CreateObject("scrīpting.FileSystemObject")
    set f = fso.OpenTextFile("C:\test.txt", 2, false) '第二个参数 2 表示重写,如果是 8 表示追加
    f.Write("写入内容")
    f.WriteLine("写入内容并换行")
    f.WriteBlankLines(3) '写入三个空白行(相当于在文本编辑器中按三次回车)
    f.Close()
    set f = nothing
    set fso = nothing

    判断文件是否存在
    dim fso
    set fso = CreateObject("scrīpting.FileSystemObject")
    If fso.FileExists("d:\test.txt") then
     msgbox "目标文件存在"
    else
     msgbox "目标文件不存在"
    end if

    移动文件
    dim fso
    set fso = CreateObject("scrīpting.FileSystemObject")
    call fso.MoveFile("d:\test2.txt", "e:\test111.txt") '两个参数的文件名部分可以不同. "e:\test111.txt"文件如果存在,则出错提示文件已经存在.

    复制文件
    dim fso
    set fso = CreateObject("scrīpting.FileSystemObject")
    call fso.CopyFile("d:\test2.txt", "e:\test111.txt") '两个参数的文件名部分可以不同. "e:\test111.txt"如果已经存在,也会被覆盖为新的。

    删除文件
    dim fso
    set fso = CreateObject("scrīpting.FileSystemObject")
    fso.DeleteFile("C:\test.txt")
    set fso = nothing

    创建文件夹
    dim fso
    set fso = CreateObject("scrīpting.FileSystemObject")
    fso.CreateFolder("C:\test") '目标文件夹的父文件夹必须存在
    set fso = nothing

    判断文件夹是否存在
    dim fso
    set fso = CreateObject("scrīpting.FileSystemObject")
    if fso.FolderExists("d:\Windows") then
       msgbox"目标文件夹存在"
    else
      msgbox"目标文件夹不存在"
    end if
    set fso = nothing

    删除文件夹
    dim fso
    set fso = CreateObject("scrīpting.FileSystemObject")
    fso.DeleteFolder("C:\test") '文件夹不必为空
    set fso = nothing
  • QTP中生成随机数

    2009-02-08 21:22:00

    如下:

    n=randomnumber.value(1,255)

    msgbox n

    用msgbox可以看到每次运行时显示的都是不同的数。范围在1,255内。

  • 拷贝的脚本无法用

    2009-02-08 20:28:11

    经常把一个脚本的代码拷贝到另一个新脚本中,运行是会出错,找不到对象的。

    今天看了一下论坛才知道要整个目录拷贝才可以,这样就会连对象库都一起拷贝了。

    转了以下的问题及答案,可以解答此问题。

    问题:请教,对象库中找不到相应的测试对象?
        回答:1、键要看你的对象库,Copy过来的脚本为什么不能用,就是因为在你现在的这个脚本中的对象库你没有测试对象,所以QTP无法运行。你只是Copy了脚本,但对象不会和随脚本一起Copy过来。呵呵。。。还有就是你要看你的对象是不是变了,包括对象的属性等等,因为QTP是靠对象的属性去查找应用程序中的对象的。我上次也碰到这样的情况,在我的脚本中有一个对象是时间。但时间在变,所以我把周二录的脚本在周四的时候就不能回放,也是由于对象名变了,QTP就无法去识别应用程序的对象了。这样的话只要在对象库中把相应的属性改一下就可以了。 如果是copy 的代码,就要把整个目录下的代码都复制过去,还有运行环境要一致,这样才有可能不出错。

  • 写入TXT文件

    2009-02-08 15:06:23

    代码:

    Set ōbjth = CreateObject("scrīpting.Filesystemobject")
    Set adfile = objth.OpenTextFile("d:\test.txt",2,true)
    adfile.write "china"
    adfile.close

    如果没有d:\test.txt则会创建,并且写入"china".如果已经存在d:\test.txt,并且将文档的内容重新写入"china".原来的内容不会再保存.

    ("d:\test.txt",2,true),2为打开文件.1则为读取文件.true,表示文件不存在时进行创建。

    set f = fso.OpenTextFile("d:\test.txt", 1, false) '第二个参数 1 表示只读打开,第三个参数表示目标文件不存在时是否创建

    还有一个参数是8,目前还不知道8是怎么用。

    另一例子:只有两个参数时。

    dim fso, f
    set fso = CreateObject("scrīpting.FileSystemObject")
    set f = fso.CreateTextFile("d:\test.txt", true) '第二个参数表示目标文件存在时是否覆盖,为false时,文件如果存在,则不覆盖,并且脚本运行到此处会提示文件已经存在。
    f.Write("写入内容")
    f.WriteBlankLines(3) '写入三个空白行(相当于在文本编辑器中按三次回车)
    f.WriteLine("写入内容并换行")

    f.Close()

  • winlistview中select的使用

    2009-02-08 14:58:47

    今天发现了winlistview中,居然可以用行号来代替点击的关键字。


    如:Dialog("AA").WinListView("WinListView").Select "重要"
    可以用:Dialog("AA").WinListView("WinListView").Select 1


    修改行号后,它会自动指向该行。实在方便。呵呵


    简单代码:

    Dialog("AA").Activate
    Dialog("AA").WinButton("Button").Click

    Dim a
    a = 10
    Dialog("AA").WinListView("WinListView").Select a

    这里会指向WinListView的第十行的数据了。

    用FOR能每一行都能覆盖到.

    如下这样就能指向WinListView中的第一行了。

    Dim a
    for a = 1 to 10
    Dialog("AA").WinListView("WinListView").Select a

    next

    msgbox "ok"

  • 获取WinListView的具体值,并导出表中

    2009-02-08 14:55:11

    Dialog("AA").Restore
    Dialog("AA").WinButton("Button").Click
    Dialog("AA").WinListView("WinListView").Select "重要"


    #下面这四行都是对datatable添加列名,并且初始化为0。
    DataTable.GlobalSheet.AddParameter "类型", 00
    DataTable.GlobalSheet.AddParameter "kb号", 00
    DataTable.GlobalSheet.AddParameter "描述", 00
    DataTable.GlobalSheet.AddParameter "当前状态", 00

    #定义变量
    Dim i,kb1,kb2,kb3,kb4

    #由于有16行要输出,所以循环从1到16。
    For i = 1 to 16

    #下面这四行是对WinListView的取值。(i,0)表求第i行,第0列。一共有四列。
    kb1 = Dialog("AA").WinListView("WinListView").GetSubItem( i, 0)
    kb2= Dialog("AA").WinListView("WinListView").GetSubItem( i, 1)
    kb3 = Dialog("AA").WinListView("WinListView").GetSubItem( i, 2)
    kb4 = Dialog("AA").WinListView("WinListView").GetSubItem( i, 3)

    #这四行是将取得的值放入到datatable中,相应的列名下。如将kb1的值放入到"类型“下。
    DataTable.Value(  "类型") = kb1
    DataTable.Value(  "kb号") = kb2
    DataTable.Value(  "描述") = kb3
    DataTable.Value(  "当前状态") = kb4

    #下面这行是将当前的行指向下一行,这样数据都一行一行地插进去。如果没这一行,取到的数据永远只放到第一行。永远只能取到一行的数据。
    DataTable.SetCurrentRow (i+1)

    Next

    #这行是将数据表导出到data.xls中。
    datatable.Export("d:\data.xls")

    开始时,没有修改地这相关的配置,导致循环时,总是从头开始循环,导致重新检测很多次。数据重复插入很多次。而脚本的目的只是循环只需要for中的,其它的都不需要。
    解决:
    从file -> settings -->run  中将data table iterations 改为run one iteration only。问题即可解决。一般情况下这里默认是run on all rows。即循环针对所有的行。

  • QTP令我很痛苦!

    2009-01-19 19:45:43

    06年毕业出来后,07年就开始接触QTP,自学。

    一段时间后会录一些脚本,那本基础手册基本上都学了一遍。以为自己行了,对QTP已经掌握得不错了。

    跳了一家公司后,由于都是C/S结构的程序,所以没用QTP,也一直以为这块不能用QTP。眼光真是太狭隘了。

    这样混了一年,QTP原来的基础也丢了,上司说我应该用QTP来做点自动化,我还认为是她太过气了。认为她太看重QTP,什么都能用QTP。一直赌气,不想再接触。

    直至最近,另一同事用QTP录了一些自动化脚本,虽然并不是很高深的脚本,但我还是被雷到了。而且主要是他们说的那些函数用法,我居然没用过。他们多是直接修改脚本,我以前一直就只用在界面上录脚本,对里面的代码根本就没想去过弄明白,原来他们一直是在代码里修改的。

    我觉得自己不能再这样了。魔蝎座的人,受不了自己比别人差,没错。我受不了自己居然如此之差。

    我觉得自己要奋起了,我不能再这样下去了,我要追赶他们。这段时间,我开始自动学习QTP,但一接触,真的很痛苦,之前那些已经丢光了,现在想做点什么,能帮助的文档太少了。

    虽然很痛苦,但我一直为自己打气,只要坚持,我能行的。一定可以的。我不会比他们差太远的。

    现在虽然仍然进步很少,但总比什么都没进步强。

    努力,希望过一段时间有点眉目,不用再这样摸索着前进。真的很痛苦。不过什么事物都这样,开头都是难的,只要能坚持下去,总有一天会觉得这是一件很容易的事。

    努力,加油。

  • QTP自动化测试流程(转贴)

    2007-11-19 22:12:47

    1)准备TestCase
            -
    在进行自动化之前,将测试内容进行文档化,不建议直接录制脚本
            -
    在录制脚本之前设计好脚本,便于录制过程的流畅
            -
    由于测试用例设计和脚本开发可能不是同一个人完成,便于团队合作
            -
    便于后期的维护
            -
    文档化的方式:TD或者文档
     
    2)配置QTP
            QTP
    支持不同的开发环境,在正式录制之前,需要根据被测程序的开发环境,选择合适的Add-In,并进行加载。
     
    3
    )录制脚本
           
    启动QTP的录制功能,按照Test Case的操作步骤描述执行,QTP自动记录每一步操作,并自动生成VBscrīpt脚本。
     
    4
    )修改增强脚本
           
    刚刚录制好的脚本可能包含错误,或者没有达到预期的目的,这就需要在录制脚本的基础上,进行修改增强
            -
    删除录制过程中多余的以及错误的操作,以最少的脚本完成任务
            -
    如果前面操作的输出是后面操作的输入,则需要使用变量或者输出值来进行替换
            -
    不是所有的操作都可以通过录制产生的,有些需要通过手工编码实现这些功能
            -
    录制产生的脚本是线性的,可以加入条件、循环控制语句,实现更复杂的流程
            -
    对脚本进行结构化
            -
    加入注释,便于阅读和维护

     
    5)调试脚本
            -
    回放通过的脚本,不一定是正确的,也可能会包含错误
            -
    在测试脚本正式使用之前,要保证其本身的正确性
            -
    避免测试脚本故障和被测程序故障搅在一起,不容易定位
     
    6
    )回放脚本
            -
    对于回放的错误,不要急于马上提交Bug,首先要判断是脚本本身的错误还是程序的错误,确认后再提交。

     
    7)脚本维护
            -
    随着工作的不断推进,脚本量会越来越多
            -
    被测试程序的不断更新,也需要更新相应的测试脚本
            -
    采用版本管理工具保存脚本,如CVSVSS,可以随时获取历史版本
            -
    采用统一的脚本架构
            -
    采用统一的命名规范
            -
    添加充分的注释,避免时间久了,自己都不能马上读懂脚本

Open Toolbar