发布新日志

  • WinRunner和QTP的对比(转)

    2008-03-28 18:27:52

     

    2007-04-15 15:27:55 / 个人分类:理解性的东西

    很多初入行的朋友使用测试工具进行功能测试的时候,总是会遇到QTPWinRunner的选择问题,为什么同样一家公司会出两个功能类似的工具哪? 下面是一篇关于这两个工具的对比介绍,其实从我自己的经验来看,WinRunner虽然推出较早,但是因为一些功能的缺陷,导致后期很难推广,而Quick Test Professinal(QTP)虽然没有师兄WinRunner出道早,然后内功深厚,所以很受欢迎,而且Mercury公司以后的主要发展策略是QTP,虽然文章中说并没有计划Phase out WR,但是已经不再出新版本了. 针对这两个工具的3年左右的使用经验,我的感受是WR比QTP的逊色的地方主要是几点:

    1. WR的对象管理不如QTP那么有效

    2. WR的语言主要是基于类C的TSL,是Mercury发明的语言,明显不如基于VBscrīpt的QTP强

    3. WR的稳定性不行,而且无意人为的干扰可能导致回放的失败

    4. WR对Java的支持也不如QTP那么强

  • QTP 经常要用到的程序和函数:

    2008-03-28 18:25:55

     

    2008-03-23 10:41:37 / 个人分类:QuickTestProfessional

    1. 创建一个vbs文件:TestVbs.vbs
    内容如下:
    '##################################################################################
    '##################################################################################
    Sub CloseWeb()

    '         此处可以用到描述性编程,把先期打开的IE窗口全关闭
    Dim WinIe,Ie,i,m
    Set WinIe=descrīption.Create()
    WinIe("regexpwndtitle").value=" Microsoft Internet Explorer"  '所有页面的regexpwndtitle属性值都是" Microsoft Internet Explorer",也可以用
    其他属性
    Set Ie=desktop.ChildObjects(WinIe)
    m=Ie.count
    For i=1 to m
            Ie(i-1).close                 ' 0为最后打开的一个,可关闭打开的几个,,循环改成for i=1 to m
    Next
    End Sub
    '##################################################################################



    function TestVbs(format)
            msgbox "参数是" & format
    end function


    '#################################################################
    '#################################################################
    '往文件里面写内容
    '第一个参数 文件的路径
    '第二个参数:写入的内容
    '第三个参数:写入的格式("Appending/Writing")
    ' See also "FileSystemObject"
    Sub Write2File(FilePath,content,style)
       Dim fso,f
       Dim stl
            If Ucase(style)="APPENDING" Then
                    stl=8
            else
                    if Ucase(style)="WRITING" then
                                    stl=2
                    else
                                            reporter.ReportEvent 1,"参数错误","Writing <" & FilePath &">:<"& content &">With<" & style & ">"
                                    Exit Sub
                    end if
            End If  
       Set fso=CreateObject("scrīpting.FileSystemObject")
       Set f=fso.OpenTextFile(FilePath,stl,true)
       'content="写入的第一行内容"
       f.WriteLine(content)
       f.Close
       Set f=nothing
       Set fso=nothing

    End Sub
    '#################################################################




    '#################################################################
    '#################################################################
    ' 连接
    数据库子程序
    ' 第一个参数:根据数据库的类型,设计连接字符串(参见udl文件)
    ' 第二个参数:连接数据库之后,进行查询的相应语句
    ' 第三个参数:查询记录返回到res
    Sub OpenDB(conn,sql,res)
       Set cnn=CreateObject("adodb.connection")
       cnn.open conn
       Set res=CreateObject("adodb.recordset")
       res.open
    sql,cnn,1,1
       
    End Sub
    '#################################################################




    '#################################################################
    '#################################################################
    ' 关闭数据库的连接
    sub CloseDB
       Set res=nothing
            Set cnn=nothing
    end sub
    '#################################################################

    2. QTP导入这个TestVbs.vbs 文件:
    菜单:Test-->Setting-->Resource
    在“Associated Library Files” 添加入该文件
    这里建议可以使用 相对路径,如..\TestVbs.vbs

    3.
    测试封装的子程序:
    用“Run from steps”运行模式(专家视图 右键,第四个菜单项,脚本从光标处运行)
    在QTP 中添加测试代码:

    CloseWeb()    '实现关闭当前所有的IE窗口
    stop


    ' 调用外部函数 Write2File
    Write2File "c:\File.txt","Writhing a Line","Writing"
    Write2File "c:\File.txt","Appending a Line","Appending"
    Write2File "c:\File.txt","Appending a Line","Appending!"   ' 参数不正确
    Write2File ".\vbs\File.txt","Appending a Line","Appending"
    stop


    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ' 设置连接数据库所需要的初始值,包括:
    ' conn :数据库连接字符串
    ' sql:查询的SQL语句
    ' res:查询的返回记录

    Dim conn,sql,res
    conn="Provider=MSDASQL.1;Persist Security Info=False;Data Source=QT_Flight32"
    sql="select * from Orders"
    Set res=nothing

    ' 调用外部子程序 OpenDB 进行连接数据库
            OpenDB conn,sql,res
                    'msgbox res.RecordCount&"行," & res.fields.count & "列"
                    res.MoveFirst
               ' res.MoveNext    没有它的话,记录就成了死循环
              
                    'reporter.ReportEvent 2,"测试连接数据库","数据库获取数据:" & res.fields(0)

            RowCount=res.RecordCount
            ColumnCount=res.fields.count
            While not res.eof
                    Record=""
                    For i=0 to ColumnCount-1
                            Record=Record & ":" &res.fields(i)
                    Next
                            Record=mid(Record,2)
                            reporter.ReportEvent 2,"数据库记录:",Record
                    res.MoveNext
            Wend
      
    ' 调用外部子程序 CloseDB关闭数据库
            CloseDB
  • QTP与winrunner的比较

    2008-03-28 18:20:24

     

    2007-06-09 20:46:13 / 个人分类:技术

    QTP,全称为Quick Test Professional,它与WinRunner同为MI公司开发的功能强大的功能测试工具。从时间上来看,WinRunner在1995年便已经推出,远早于QTP,而QTP直到2002年才正式推出。从MI公司提供的一些官方资料来看,虽然他们宣称暂时不准备淘汰WinRunner,但他们的宣传资料上又明确表示,QTP已经具备了WinRunner中几乎所有的特性,同时具备了一些独有的特性,并且总体来说,使用更简单、更易扩展和维护,推荐新用户使用QTP,并建议已使用WinRunner的老客户逐渐实现转换。由此看来,MI公司实际上已经有使用QTP逐步取代WinRunner的计划。更重要的是,QTP对J2EE,.NET架构的应用程序支持得比WinRunner要好(从我实际的试用过程中,也感到确实是如此),因此我认为,从我们公司的实际情况出发,针对产品综合部今后将逐步开展自动化测试的计划,QTP应该是一个比较好的选择。
    不论是WinnRunner还是QTP,它们都是功能十分强大的测试工具,加上目前国内关于测试工具的培训和文档资料,实在是少之又少,因此要完全了解和掌握它们,绝不是一朝一夕的事情。在这里我只能就目前对它们的理解程度粗略地介绍一下二者的两点主要不同之处。
    1、使用的脚本语言不同。WinRunner使用的是TSL语言,这是MI公司独有的语言,有特殊性,因此在学习上会有一定难度,不过好在它与C 语言比较类似,如果测试人员有一定的C语言编程基础,会相对容易一些。而QTP使用的则是微软的VBscrīpt语言,比较通用,而且也相对简单易学。从语言上的比较上来看,我个人觉得在编程能力上,WinRunner更胜一筹,因为它拥有相当丰富的C语言函数库,而相对而言,QTP则更大众化,它面向的是没有太多技术背景和编程经验的测试人员。
    2、QTP8.0具有的一大特性:关键字驱动测试(keyword-driven testing)。它的具体操作方法我将有另外的文档详细说明,这里只是简单介绍一下。通过“关键字驱动测试”,测试人员不需要“录制”测试脚本,而可以改成“设计”测试脚本。即:先将应用程序的GUI对象添加到QTP的对象仓库(Object Repository)中,然后针对每一个需要操作到的对象设计每个测试步骤。我个人感觉,这的确是一个很酷的特性,它使我们可以不必实际去操作应用程序,就可以编写出测试脚本,这样做既节省了时间,而且还有一个更大的好处就是可以在应用程序还没有设计完成,或者由于出错无法正常执行的时候仍然可以编写我们的测试脚本。应用程序只需要有使用界面(UI),而不必实际运行,测试人员就可以开始建立测试脚本,为我们实施自动化测试赢得更充足的时间。而在 WinRunner中,虽然也可以采用先学习对象,然后编写代码的方式来完成测试脚本,但这样做要求测试人员对TSL语言比较熟悉才做得到,远不如QTP 来得简单。在实际的操作中我还发现,有些时候采用录制的方法无法捕获对应用程序的操作,此时改用关键字驱动测试却可以收到不错的效果。
    3、相对WinRunner,QTP还具有很多优点,例如“数据表整合”,“Active Screen”,“point and click”,更容易参数化等等,但对于这几点我还没有深入的做过比较,如果今后我对此有了更多的体会和了解,我将再作整理。

  • QTP处理定时运行程序的办法

    2007-11-20 21:32:25

    在不用TD或者QC的情况,很难精确控制QTP脚本运行的时间,我的办法是增加等待时间。

    Function DiffADate(theDate)
       DiffADate = DateDiff("s", Now, theDate)
       wait(DiffADate)
    End Function
    Call DiffADate("2006-12-18 17:25:00")

  • QTP脚本扩展之QTP连接MS sql server数据库

    2007-10-22 10:28:56

    不想吃天鹅肉的癞蛤蟆不是好癞蛤蟆!~

     

    2006-12-07 14:01:58 / 个人分类:原创

      在QTP中,我们可以通过复制数据库数据到databable中,实现数据的参数化.但这样的做法往往比较烦琐.换一种思路,在Expert View中直接添加连接数据库代码如何?接下来,我们就来完成这个工作.

      对于MS sql server数据库的连接,我们首先要知道所用的MS sql server数据库的连接字符串.这里告诉大家一个轻松获取连接字符串的方法: 新建.txt文件,修改文件名(包括后缀)为XX.udl,双击打开XX.udl文件,在"Provider"选项中选择"Microsoft OLE DB Provider for SQL Server",在"Connection"中,选择相应的server name和database,有用户名和密码的输入用户名和密码,点击右下方的"Test Connection"验证数据库是否连通.点击"OK".把XX.udl文件用记事本方式打开,以"Provider"开始的部分就是你的数据库连接字符串.

      知道了连接字符串,接下来我们来完善代码部分.

      Dim Cnn //定义变量

      Dim Rst //定义变量

      Dim strCnn //定义变量

      strCnn="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=test;Data Source=SIMONVM" //将获得的连接字符串赋值到

      strCnn Set Cnn=CreateObject("ADODB.Connection") //生成数据库连接对象

      Cnn.Open strCnn //打开数据库 Set Rst=CreateObject("ADODB.Recordset") //生成记录集对象 

      Rst.Open "select OrgName from Organization",Cnn //书写SQL语句

      Rst.MoveFirst //将焦点定在第一行

      还可以通过Rst.Field( )函数取出对应行的值(参看QTP Tutorial Help).

      对于以上代码,我只是完成了MS sql server数据库的连接和执行命令部分.后续对表格的应用还未涉及.希望大家指点和补充.

  • QTP中Wait与同步点的区别

    2007-10-22 10:26:40

    QTP中Wait与同步点的区别

    2006-12-06 17:19:27 / 个人分类:QTP

        先说wait函数,当脚本走到wait函数时,就开始执行这个函数.如:wait(10),就等待10秒种后再继续执行下面的语句.wait函数的这个等待的时间,那相对来说是比较固定的.如上例子,一定要等待完10秒后再执行.所以写脚本的时候要自己估算一下时间.不然可能造成时间的浪费,或者等待时间的不足.
    VaE&{K$? hxd w8Q146439
    H ~ \'j-Xz146439那同步点呢.等待时间就比较灵活了,它的等待时间是不固定的.设置同步点后,当脚本执行到这句话后,脚本就开始执行等待.脚本会在规定时间内不断的去检查,所同步的对象有没有出现,一但出现,脚本就继续往下执行.不需要等完所有规定时间.如果在规定的时间内,所要同步对象还没有出现,那就提示超时的错误信息.51Testing软件测试网7v4mA }d|7QC[;e:G
    例如:
    `ld PZ d a146439Window("Flight Reservation").ActiveX("Threed Panel Control").WaitProperty "text", "Insert Done...", 10000
    cNb1\Q*D4A146439当脚本执行到这句话时,就开始执行同步等待时间.这里设置超时时间为10000.在这个时间内,脚本会不断去查看该对象的text属性的属性值Insert Done...,有没有出现.一但同步到这个属性值,就开始执行下面的脚本了.而不需要再继续等待,直到1000秒结束为止.那这样的话,这个等待时间不用自己去控制,设置好后由程序自己去判断,就比较灵活,也不会出现浪费时间的情况.能提高脚本的执行

  • QTP中的测试对象和运行时对象

    2007-10-22 10:23:59

     

    2006-12-15 17:32:11 / 个人分类:QTP

         相信大家在QTP中肯定都看到过这些方法,GetROPropertyGetTOPropertySetTOProperty .

    GetROProperty:可以取到运行时对象属性的值.

    GetTOProperty:可以取到测试对象属性的值.

    SetTOProperty:可以修改测试对象的属性值

        那这里的运行时对象和测试对象又是什么呢?他们之间又存在着什么样的关系呢?

    测试对象(TO):是QTP在脚本中创建的用于描述应用程序实际对象的对象.QTP存储这些信息用来在运行时识别和检查对象.简单的说,我们就可以把对象库中所保存的对象就看做为测试对象.

    运行时对象(RO):是应用程序中的实际对象,对象的方法将在运行时被执行.

    两者之间的关系:测试对象是为了识别运行时对象而存在的.在《QTP的录制回放过程》中,我也阐述了QTP的整个工作原理。所以这里我也就简单的再提一下。QTP在录制的时候会把所操作的对象的一组属性及属性值,保存到对象库中,就是所谓的测试对象。在回放的时候,QTP 就会根据对象库里的该对象的属性及属性值去匹配实际在应用程序中的运行时对象。一但完全匹配正确就执行相应的操作。否则就会报“找不到该对象”的错。

  • (一)QTP关键技术

    2007-10-18 12:18:02

     

    字体:        | 上一篇 下一篇 | 打印  | 我要投稿

    一 对象识别及存储技术基本常识

    1)测试对象模型(Test Object Model)
            测试对象模型是QTP用来描述应用程序中对象的一组对象类。每个测试对象类拥有一系列用于唯一确定对象属性和一组QTP能够录制的方法
     
    2)测试对象(Test Object)
            用于描述应用程序实际对象的对象,QTP存储这些信息用来在运行时识别和检查对象
     
    3)运行时对象(Run-Time Object)
            是应用程序中的实际对象,对象的方法将在运行中被执行
     
    4)QTP的录制过程
            A.确定用于描述当前操作对象的测试对象类,并创建测试对象
            B.读取当前操作对象属性的当前值,并存储一组属性和属性值到测试对象中
            C.为测试对象创建一个独特的有别于其他对象的名称,通常使用一个突出属性的值
            D.记录在对象上执行的操作
     
    5)QTP的回放过程
            A.根据对象的名称到对象存储库(Object Repository)中查找相应的对象
            B.读取对象的描述,即对象的属性和属性值
            C.基于对象的描述,QTP在应用程序中查找相应的对象
            D.执行相关的操作
     
    二 对Check Point的较为深入理解

    1. 定义:
            将特定属性的当前数据与期望数据进行比较的检查点,用于判定被测试程序功能是否正确
            Check Point可以分两类:QTP内置验证点和自定义验证点
     
    2. QTP内置验证点实现原理及优缺点
            A.录制时,根据用户设置的验证内容,记录数据作为基线数据
            B.回放时,QTP捕获对象运行时的数据,与脚本中的基线数据进行比较
            C.如果基线数据和运行数据相同,结果为PASS,反之为Failed.
            D.优点是 操作简单方便
            E.缺点是 QTP默认的检查的属性有时不符合自己的要求,如希望得到检查的属性没有在里面, 而默认的属性不需要检查等。
     
    3. QTP内置验证点结果的应用
            A.录制的验证点在没有进行调整前,仅仅是给出了检查结果是通过还是错误的
            B.实际的测试过程中,可以根据验证点的结果进行不同的操作
           If Window("Flight Reservation").WinEdit("Name:").Check(CheckPoint("Name:")) = True then
                  msgbox "oh, success!"
    Else
                  msgbox "oh, failure!"
    End If
     
    4. 自定义验证点的应用及优缺点
            A.使用条件语句对实际值和期望值进行对比,然后用Reporter对象报告结果
           '检查Ticket Number
    If CStr(dbTicketNumber) = CStr(DataTable("oTicketNumber", dtLocalSheet)) Then
           Reporter.ReportEvent micPass, "打开订单- TicketNumber", "期望结果是:" & dbTicketNumber & ", 界面显示实际结果是:" & DataTable("oTicketNumber", dtLocalSheet)
    Else
           Reporter.ReportEvent micPass, "打开订单- TicketNumber", "期望结果是:" & dbTicketNumber & ", 界面显示实际结果是:" & DataTable("oTicketNumber", dtLocalSheet)
    End If
            B.优点是 非常灵活,前者实现的所有检查都可以用此方法来实现;
            C.缺点是 代码量大,对测试人员的要求高。
     
    5. 对Check Point的深入理解

            A.个人认为在比较简单的和有Active Screen的情况下可以使用QTP内置的Check Point,在比较复杂的情况下可以通过编程和使用Reporter来完成.
            B.在使用check方法时,必须先在Keyword View或者Active Screen中新建CheckPoint。否则无法对该对象进行check,系统报错说无法在对象仓库中找到此对象。如果插入检查点,系统会自动把相关的对象添加到对象库中。
            我认为检查点并不是一个实实在在的对象。因为你可以对同一个对象设置不同的检查点,可以把它的某个属性既设定成True,也可以设定为False。而对象库中的对象的属性值是必须依赖于对象的实际属性值的。如果随意更改有可能无法识别。还有就是可以针对同一个对象设定多个检查点。在测试窗口中可以看到这两个检查点的名称是区分开来的。所以我认为检查点并不是实际存在的对象,而是一些类似映射的东西。
            尽管检查点并不是对象库中的实在的对象,但是它必须对应到对象库中的某个实实在在的对象,好像它的一个映像一样,而且在实际的操作过程中,QTP还是把它作为一个对象来处理的。
            因为我们无法像其他对象一样把“检查点对象”添加到对象库中,而QTP又认为它是个对象,所以我们无法在专家视图中直接添加检查点脚本。但是我们可以采用编成描述的方式来实现检查点的功能。
            CheckPoint 是一个依赖于Object Repository(对象库)中的某个对象的“虚拟对象”。其具体含义是:如果它所依赖的QTP 对象库中的对象没有了,那么此CheckPoint 也就不存在了;这个“虚拟对象”的属性是从它所依赖的对象的属性中“抽取”出来的,它具有它所依赖的对象的一个或几个属性,但不能增加它所依赖的对象没有的任何属性。
            CheckPoint 是一个“虚拟对象”的重要原因是:每个Object都能在Object Repository找到它的Name、Class Properties,而CheckPoint 在Object Repository中就根本不存在。选择脚本中的某个对象后,在Object Property 的对话框里面有个Respository按钮,点击它后,你会看到此对象在Object Respository 的Name、Class 和 Properties。
            选择一个CheckPoint后,在CheckPoint Properties 的对话框里没有 Respository 按钮,在Object Respository中也找不到此CheckPoint的Name、Class 和 Properties(因为它在对象库中根本就不存在!)。

  • QTP与回归测试

    2007-10-18 12:12:43

     

    字体:        | 上一篇 下一篇 | 打印  | 我要投稿

    最近有不少朋友在论坛里问到"QTP如何做回归测试?"的问题,这里我们有必要来探讨一下.首先这个问题中存在一个误区,事实上回归测试怎么做,跟自动化工具没有必然的联系.所以这里的如何做回归测试并不是一个QTP的问题,而是一个回归测试的策略的问题.

         我们先来了解一下回归测试的概念和策略以及一般大致会采用的流程.

         那么什么是回归测试呢?简单的说,回归测试是贯穿在整个测试的各个阶段的一个测试活动.它的目的是检验已经被发现的缺陷有没有被正确的修改和修改过程中有没有引发新的缺陷.软件在测试或者其他活动中发现的缺陷经过修改后,都要进行回归测试的验证.

        我们在做回归测试的时候可以采用不同的策略.

    策略(1) 可以选择完全重复测试.把所有的测试用例,全部再完全的执行一边,以确认问题修改的正确性和修改后周边是否受到影响.缺点是由于要把用例全部执行,所以会增加项目成本,也会影响项目进度.所以很难来完全执行,所以引出了回归测试策略(2) 选择性重复测试.

    策略(2) 可以选择性重复测试.可以选择一部分进行执行,以确认问题修改的正确性和修改后周边是否受到影响.那么我们怎样去选择用例呢?这里有三个方法:1.覆盖修改法 针对发生错误的模块,选取这个模块的全部用例进行测试.这样只能验证本模块是否还存在缺陷,但不能保证周边与它有联系的模块不会因为这次改动而引发缺陷.所以引出第2个方法,即2.周边影响法.除了把出错模块的用例执行之外,把周边和它有联系的模块的用例也执行一边,保证回归测试的质量.当然我们还可以用量化的角度去分析模块的质量,比如:经过上面的一系列回归测试后,看看遗留的缺陷率是否已经在允许的范围之内了,那么我们以此为标准可以结束本次回归测试.也就是我要提到的第三个方法 3.指标达成法.

       回归测试的流程

    1.在测试策略制定阶段,制定回归测试策略

    2.确定回归测试版本

    3.回归测试版本发布,按照回归测试策略执行回归测试

    4.回归测试通过,关闭缺陷跟踪单

    5.回归测试不通过,缺陷单返回开发人员.等重新修改,再次做回归测试.

        那么我们为什么会把工具和回归测试联系起来呢?原因是在回归测试中我们会去做大量的重复的执行测试用例的操作.为了让测试员能够从这种重复的工作中解放出来,去测试更多新的用例,我们所以可以选用一些自动化测试工具,来录制脚本,代替一部分手工操作.但事实上并不是这些工具只能用在回归测试中,在其他操作上也可以应用.但有一点是工具不能完全代替手工测试,它只是手工测试的一种补助.所以QTP作为一款功能测试工具,可以运用到回归测试中

  • QTP虚拟对象的使用

    2007-10-18 12:10:17

     

    2007-03-24 15:18:13 / 个人分类:QTP

    1:QuickTest 不支持用于模拟或低级录制的虚拟对象
    2:录制和运行测试或组件时,网页或应用程序窗口的大小和位置必须和定义虚拟对象时的大小和位置相同。
    3:仅当录制和运行测试或组件时,才能使用虚拟对象。您不能在虚拟对象上插入任何类型的检查点,也不能使用“对象探测器”来查看其属性
    4:虚拟对象管理器中显示的虚拟对象集合存储在您的计算机中,而不是随包含虚拟对象步骤的测试或组件存储。这意味着如果您在测试或组件步骤中使用虚拟对象,则仅当在包含正确的虚拟对象定义的计算机中运行时,该对象在运行会话过程中才能被识别。要将您的虚拟对象集合定义复制到另一个计算机,请将您的 <QTP安装文件夹>\dat\VoTemplate 文件夹的内容(或该文件夹中的单个 .vot 集合文件)复制到目标计算机上的相同文件夹中。
    5:您只能为可以在其上单击或双击并录制 Click 或 DblClick 步骤的对象定义虚拟对象。否则,将忽略虚拟对象。例如,如果您在 WinList 对象上定义一个虚拟对象,录制 Select 操作,则虚拟对象被忽略。
    6:不要使您的应用程序或网页中的虚拟对象相互重叠。如果虚拟对象与另一个虚拟对象重叠, QuickTest 可能无法正确地在虚拟对象上录制或运行测试或组件。
    7:在“标识对象使用”框中,选择您希望 QuickTest 标识和映射虚拟对象的方式。
    7.1 如果您想要 QuickTest 标识所有出现的虚拟对象,请选择“仅父类”。QuickTest 仅通过其直接父类标识虚拟对象,而不考虑整个父层次。 例如,如果虚拟对象是使用 Browser("A").Page("B").Image("C") 定义的,则即使层次更改为 Browser("X").Page("Y").Image("C"), QuickTest 仍将识别该虚拟对象。
    7.2 如果想要 QuickTest 仅标识一次出现的虚拟对象,请选择“整个父层次”。QuickTest 将仅标识具有准确的父层次的虚拟对象。 例如,如果虚拟对象是使用 Browser("A").Page("B").Image("C") 定义的,则如果层次更改为Browser("X").Page("B").Image("C"), QuickTest 将无法识别该虚拟对象。

  • QTP参数化实例

    2007-10-18 11:58:55

     

    2006-12-04      在自动化测试当中,有时为了模拟真实效果 ,或者为了达到某种操作效果,那么势必要把脚本参数化.那么一般的针对输入值的参数化或者select选择值的参数化,操作也比较容易,这里也不多说了,直接把固定值换成变量就可以.鉴于上个星期有两个朋友都问到了针对某个对象的参数化,那么就来探讨一下针对对象的参数化.

    例:51Testing软件测试网1GI.v3KH$nGF6?(yftn
    Browser("软件测试专业网站:51Testing软件测试网").Page("百度——全球最大中文搜索引擎").WebEdit("wd").Set "111"
    ]t/C:QXn5RK#cONs/i146439Browser("软件测试专业网站:51Testing软件测试网").Page("百度——全球最大中文搜索引擎").WebButton("百度搜索").Click
    }RQ\7i3o146439Browser("软件测试专业网站:51Testing软件测试网").Page("百度搜索_111").Link("菜111 的QQ家园").Click

        在这个例子中,我们的目的是把这个link对象给参数化掉.这里直接把对象名参数化掉,肯定是不行的.因为我们知道QTP识别对象依靠是这个对象在对象库中的属性和属性值.而如果我们这里参数化成一个新的对象名,那么这个对象名是不存在于对象库中的,那么势必会造成在回放过程中不通过,报对象库中没有这个对象的错误.所以我第一个想到的是先让这个link对象脱离对象库,让它不用通过对象库就能识别这个link对象,那么接下来只要直接换成变量就成功了.相信大家都看到过帮助里对描述性编程的说明,通过把脚本改写成描述性编程的形式,可以让QTP在执行脚本时不要再去依赖对象库.直接把一些付有特征的属性和属性值放到脚本中,就能执行相应的操作.所以我们可以先把上面脚本改写成:

    Browser("软件测试专业网站:51Testing软件测试网").Page("百度——全球最大中文搜索引擎").WebEdit("wd").Set "111"51Testing软件测试网;[)S3BLV7F
    Browser("软件测试专业网站:51Testing软件测试网").Page("百度——全球最大中文搜索引擎").WebButton("百度搜索").Click51Testing软件测试网/x$l4?f&f9iz xe v
    Browser("软件测试专业网站:51Testing软件测试网").Page("百度搜索_111").Link("text:=菜111 的QQ家园").Click

        这样表示后,再把这个对象在对象库中的记录给删掉.重新运行脚本后,脚本依旧能正确执行.那么接下来的操作就方便了,直接把相应的固值换成一个变量即可.我们来这么操作:

    Dim i51Testing软件测试网o.eY6BZR,Mr\
    i="菜111 的QQ家园"
    51Testing软件测试网wCWbuj
    Browser("软件测试专业网站:51Testing软件测试网").Page("百度——全球最大中文搜索引擎").WebEdit("wd").Set "111"51Testing软件测试网V%A'F c-_.~ E5}2f
    Browser("软件测试专业网站:51Testing软件测试网").Page("百度——全球最大中文搜索引擎").WebButton("百度搜索").Click
    G_4MA!s/\146439Browser("软件测试专业网站:51Testing软件测试网").Page("百度搜索_111").Link("text:="&i).Click

        到这里整个操作过程就完成了.其实这只是一个方法,相信大家肯定还有其他方法,希望大家能留言说说自己的看法.当然如果这个对象的对象名有一定规律的话,我们还可以考虑运用正则表达式的方法,也可以达到预期的效果.

  • qtp脚本语言

    2007-10-11 12:16:31

    QTP的一些小知识

    2006-12-01  个人分类:QTP

    1.GetCellData函数 

      作用:获取单元格的值

      例:  rowCount = Browser("xxx ").Page("xxx ").Frame("xxx").WebTable("xxx").RowCount
    For counter = 1 To rowCount
      text = Browser("xxx").Page("xxx").Frame("xxx").WebTable("xxx").GetCellData(counter,1)
      If (text = "xxx") Then
        counter = counter - 1
        selectNO = "#" & counter
        Browser("xxx").Page("xxx").Frame("xxx").WebRadioGroup("xxx").Select selectNO
        Exit For
      End If
    Next

    2.把值插入datatable里

      例:   datatable.setcurrentrow(i)
            datatable.value("name","Global")="name"
            datatable.value("passwd","Global")="passwd"

    3.用代码来启动浏览器

      Browser1 = "IE"
      StartURL = "www.51testing.com"
      IF Browser1 = "IE" THEN
         set IE = CreateObject("InternetExplorer.Application")
         IE.Visible = true
         IE.Navigate StartURL
      END IF
     

    4.ExecuteFile函数

      作用:ExecuteFile 可以直接执行vbs文件,而不需要将其导入resource中 
           ExecuteFile FileName 
      说明:where FileName is the absolute or relative path of your VBscrīpt file.

      例:ExecuteFile("F:\test.vbs")

    5.Strcomp函数 

      作用:比较文本

      例:dim strtext1,strtext2,str ,str1,comp1
         strtext1 = "xxx"
         strtext2 = "xxx"
         str = VbWindow("xxx").VbWindow("xxx").VbLabe1("xxx").GetTOProperty("text")
         str1= VbWindow("xxx").VbWindow("xxx").VbLabel("xxx").GetTOProperty("text")
         comp1=strcomp(strtext1,str,0)
         If  comp=0 Then
              msgbox “这两个串相等”
         else
           msgbox str
         End If 

    6.CaptureBitmap 

      作用:捕获屏幕

    7. GetROProperty

      作用:取对象属性值

      例:VbWindow("xxx").VbWindow("xxx").VbWindow("xxx").ActiveX("xxx").GetROProperty("TextMatrix(1,0)") 

    8.ExitAction - 退出当前操作,无论其循环属性如何。
      ExitActionIteration - 退出操作的当前循环。
      ExitRun - 退出测试,无论其循环属性如何。
      ExitGlobalIteration - 退出当前全局循环。


    9.如何使用Excel对象处理数据?
      Dim xl
      打开excel文件
      Function OpenExcelFile(strFilePath)
      Set xl = CreateObject("Excel.Application")
      xl.Workbooks.Open strFilePath
      End Function
      获得指定单元格数据
      Function GetCellData(strSheet,rwIndex,colIndex)
      GetCellData = xl.WorkSheets(strSheet).Cells(rwIndex,colIndex)
      End Function
      填充单元格数据
      Function PutCellData(strSheet,rwIndex,colIndex,varData)
      xl.WorkSheets(strSheet).Cells(rwIndex,colIndex) = varData
      End Function
      保存并推出
      Function SaveAndQuit()
      xl.Activeworkbook.save
      xl.Quit
      Set xl = nothing
      End Function

    10.连接sql数据库

      例:Dim res,cmd,sql
         Set Res=createobject("adodb.recordset")
         Set Cmd=createobject("adodb.command")
         Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=xhq;Data Source=192.168.191.142"  '这句话是连接数据库的数据源,要做修改
        Cmd.CommandType = 1
        sql="selec t * from 表 where name=username"
        Cmd.CommandText = sql
        Set res = Cmd.Execute()
        Set res = nothing
        Set cmd.ActiveConnection = nothing
        Set Cmd= nothing

数据统计

  • 访问量: 15399
  • 日志数: 20
  • 建立时间: 2007-10-11
  • 更新时间: 2008-03-28

RSS订阅

Open Toolbar