发布新日志

  • QTP中RO与TO的区别1(转)

    2010-12-09 10:58:50

    [QTP中RO与TO的区别1]概念

    TO是Test Object的简称,RO是Runtime Object简称,既用来区分仓库对象和实际对象,又用来区分对象的封装接口和自身接口。

    从实际作用上来看,应该说TO就是是仓库文件里定义的仓库对象,RO是被测试软件的实际对象。

    QTP为用户提供了两种操作对象的接口,一种就是对象的封装接口,另一种是对象的自身接口。对象的自身接口是对象控件本身的接口,对象的封装接口是QTP为对象封装的另一层接口,它是QTP通过调用对象的自身接口来实现的。

    两种接口的脚本书写格式的差别在于:自身接口需要在对象名后面加object再加属性名或方法名,封装接口就不用在对象名后面加object.

     

    比如操作JavaEdit对象,通过QTP封装的封装接口,脚本如下:
         设置JavaEdit的内容:
          JavaDialog("Add NE").JavaEdit("NE Name").Set "NE1"
         读取JavaEdit的内容:
          msgbox JavaDialog("Add NE").JavaEdit("NE Name").GetROProperty("value")

         如果通过JavaEdit的自身接口,脚本如下:
         设置JavaEdit的内容:
         JavaDialog("Add NE").JavaEdit("NE Name").object.setText("NE1")
         读取JavaEdit的内容:
         Msgbox JavaDialog("Add NE").JavaEdit("NE Name").object.getText()

         QTP执行JavaEdit().Set语句时,是通过执行JavaEdit().object.setText()来实现的。
         QTP执行JavaEdit().GetROProperty("value"),是通过执行JavaEdit().object.getText()来实现的。

     

    另外:通过GetTOProperty可以获取TO的对象属性,同时也可以通过SetTOProperty来更改TO的对象属性;通过GetROProperty获取RO的对象属性,一般不建议对RO的对象进行更改。

  • qtp自动化测试范例(转)3

    2010-09-03 15:23:43

    4验证loginCase文档中login_004login_009

    For i=2 to 7

            读取data中,login的数据

            Dim username,password,expected

            username=ReadExcelCell(dataPath, "login", i, 1)

            password=ReadExcelCell(dataPath, "login", i, 2)

            expected=ReadExcelCell(dataPath,"login",i,3)

    执行登录操作,将读取到的username参数化给下面的数据

            Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("username").Set username

            Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("pwd").Set password

            Browser("Browser").Page("在线考试系统").Frame("main").WebButton(" ").Click

            判断登录是否成功的文本字符

            popok=Browser("Browser").Page("在线考试系统").Frame("left").WebElement("考生姓名:123   态:已登录").Exist(3)

            popno=Browser("Browser").Page("在线考试系统").Frame("main_2").WebElement("").Exist(3)

            依据期望结果进行判断

      If expected="ok" Then

                      If popok Then

                        '将数据源中的期待结果写为pass

                               Write_Excel dataPath,"login",i,"D","Pass"

                               '将此结果在测试用例中进行体现

                               Write_Excel casePath,"login",i+3,"D","Pass"

                               '返回登录界面,执行下一轮数据的操作

                               Browser("Browser").Page("在线考试系统").Frame("top").Link("【注销登录】").Click

                               Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click

                               Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

                      else

                                '如果出现错误,则截图并保存到指定文件夹中

                               QTP_Capture capturePath,"login_"&i+3

     

                              '将数据源中的期待结果写为fail

                               Write_Excel dataPath,"login",i,"D","Fail"

                              Write_Excel dataPath,"login",i,"E","正确用户名和密码登录失败"

     

                                '将此结果在测试用例中进行体现

                               Write_Excel casePath,"login",i+3,"D","Fail"

                               Write_Excel casePath,"login",i+3,"E","正确用户名和密码登录失败"

     

                               '出错后,重新进入登录界面

                               Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

                      End If

            else

                      If popno Then

                               'msgbox "no"

                               '将数据源中的期待结果写为pass

                               Write_Excel dataPath,"login",i,"D","Pass"

                               

                                '将此结果在测试用例中进行体现

                               Write_Excel casePath,"login",i+3,"D","Pass"

                               ‘pass后返回登录界面,继续执行下一轮操作

                               Browser("Browser").Page("在线考试系统").Frame("main_2").WebButton("返回上一页").Click

                      elseif popok then

                                '如果出现错误,则截图并保存到指定文件夹中

                         QTP_Capture capturePath,"login_"&i+3

                               

                         '将数据源中的期待结果写为fail

                               Write_Excel dataPath,"login",i,"E","错误用户名或密码,登录成功"

                               

                               ' '将此结果在测试用例中进行体现

                               Write_Excel casePath,"login",i+3,"E","错误用户名或密码,登录成功"

     

                               '返回登录界面,继续验证相关数据

                               Browser("Browser").Page("在线考试系统").Frame("top").Link("【注销登录】").Click

                               Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click

                               Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

                      else

                                '如果出现错误,则截图并保存到指定文件夹中

                               QTP_Capture capturePath,"login_"&i+3

                               

                               '将数据源中的期待结果写为fail

                               Write_Excel dataPath,"login",i,"D","Fail"

                           Write_Excel dataPath,"login",i,"E","错误数据,但提示语不正确"

     

                                '将此结果在测试用例中进行体现

                               Write_Excel casePath,"login",i+3,"D","Fail"

                               Write_Excel casePath,"login",i+3,"E","错误数据,但提示语不正确"

                               '出错后,重新进入登录界面

                               Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

                      End If

     End If

    Next

    D、执行脚本后,关闭网页和发送相关文档到相关人员的邮箱之中

    '执行完之后,关闭网页

    Browser("Browser").Close

     

    '执行完此模块的测试后,将测试结果发送到指定的邮件之中

    Dim Body '邮件的内容

    Dim sendto'收件人的地址

    Dim subject '邮件主题

    Body="Hi:"&vbCrLf&"此文件为本次自动化测试Case结果。请查收!谢谢!"&vbCrLf&vbCrLf&"from qwen"&vbCrLf&Now()

    sendto="wen.qingshan@byd.com"

    subject=now()&"自动化测试的结果"

    SendMail sendto,subject, Body, casePath

    一直以来不清楚大家是怎么去使用QTP测试的,甚至也不太清楚我这么去做是否能称得上算一个QTP的框架,不过我就是这样使用QTP去做测试的。最后,十分感谢您能够有耐心地看到这里,谢谢。

    另外,不知道是不是因为51这个发表日志框将回车后剩余的空格也认成字符了, 一次发表所有内容老被截断,这点挺另人晕的.

     

    作者:文青山

    2010-8-30


  • qtp自动化测试范例(转)2

    2010-09-03 15:22:30

     

    作者:文青山

    时间:2010-8-30

    标题:我是如何使用QTP测试

    注意:请尊重版权!

    上接:http://www.51testing.com/index.php?uid-287227-action-viewspace-itemid-219449

    B、主体脚本过程,此处可使用描述性编程来书写,如使用描述性编程,需从common文件中调用相关的对象库(描述性编程)

                    确定录制的主体过程,此过程我是通过录制实现的,此处代码为测试脚本的主体部分提供基础代码,即为C部分(下方)的扩展操作提供基础代码。

                    如:

                    起动浏览器,进入系统登录界面

                      '打开IE wqs592452,在不同的机器上需要更改一下

    SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe","","C:\Documents and Settings\wqs592452","open"

    Browser("Browser").Navigatehttp://10.9.146.182:8080/index.asp

    点击登录链接

    Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

    执行登录操作

            Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("uname").Set “123”

            Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("pwd").Set “123456”

            Browser("Browser").Page("在线考试系统").Frame("main").WebButton(" ").Click

           '返回登录界面,执行下一轮数据的操作

            Browser("Browser").Page("在线考试系统").Frame("top").Link("【注销登录】").Click

            Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click

            Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

    C、按照case修改脚本,主要调用库函数中的写入Excel单元格的函数Write_Excel(pathway,sheetname,x,y,content)读取单元格的函数ReadExcelCell(file,sheet,x,y)以及截图函数Qtp_Capture,注意Qtp_Capture应在Write_Excel之前,否则截图时可能为读取Excel的界面

    点击登录链接

    1 '验证loginCase文档中login_001

    Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click

     

    如果登录后某对象存在,则case文件login_001 Pass,否则Fail,并截图

    If Browser("Browser").Page("在线考试系统").Frame("main").WebButton(" ").Exist Then

                   '如果存在此对象,则将case中的actualresults置为pass

    Write_Excel casePath,"login",2,"D","Pass"

    Else

                      '如果出现错误,则截图并保存到指定文件夹中

                    QTP_Capture capturePath,"login_001"

    '如果不存在此对象,则将case中的actualresults置为fail

                    Write_Excel casePath,"login",2,"D","Fail"

                    出现错误后,说明错误的原因

    Write_Excel casePath,"login",2,"E","登录系统链接失效"

    End If

    2'验证loginCase文档中login_002

    利用描述性编程,查看width in characters对象是否存在,并且为30

    If      Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("name:=uname","width in characters:=30").Exist then

            '如果存在此对象,则将case中的actualresults置为pass

            Write_Excel casePath,"login",3,"D","Pass"

    else

            '如果出现错误,则截图并保存到指定文件夹中

            QTP_Capture capturePath,"login_002"

             '如果存在此对象,则将case中的actualresults置为fail

            Write_Excel casePath,"login",3,"D","Fail"

            出现错误后,说明错误的原因

            Write_Excel casePath,"login",3,"E","用户名输入框未设置为30"

    end if

    3验证loginCase文档中login_003

    利用描述性编程,查看width in characters对象是否存在,并且为30

    If      Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("name:=pwd","width in characters:=30").Exist then

            '如果存在此对象,则将case中的actualresults置为pass

            Write_Excel casePath,"login",3,"D","Pass"

    else

            '如果出现错误,则截图并保存到指定文件夹中

            QTP_Capture capturePath,"login_002"

             '如果存在此对象,则将case中的actualresults置为fail

            Write_Excel casePath,"login",3,"D","Fail"

            出现错误后,说明错误的原因

            Write_Excel casePath,"login",3,"E","用户名输入框未设置为30"

    end if

  • qtp自动化测试范例(转)1

    2010-09-03 15:18:45

    作者:文青山

    时间:2010-8-30

    标题:我是如何使用QTP测试

    注意:请尊重版权!

     

    废话不说了,上主要内容!

    一、文件目录位置分开

    不同目录放置不同内容:

    case目录:放置测试用例。

    Fucation目录:放置经常调用的库函数。

    common目录:放置所测试系统的主函数,和利用描述述编程生成的对象库。

    001login目录:放置QTP脚本自动生成的相关文件

    data目录:放置测试数据,该数据与测试用例中需要数据驱动的项进行对照

    capture目录:放置当系统出现错误时的截图

    二、测试用例

            将用例进行一定的整理,把数据驱动部分归纳为一个连续,并把实际结果做一个excel的数据有效性判断,即pass为绿色,fail为红色,具体用例如:

    ID

    validate

    expected

    actualresults

    Failreason

    login_001

    登录链接

    正常链接

    login_002

    用户名输入框的maxlength

    30

    login_003

    密码输入框的maxlength

    30

    login_004

    正常登录

    登录成功,显示已登录

    login_005

    异常登录

    登录失败,用户名或密码错误

    login_006

    异常登录

    登录失败,用户名或密码错误

    login_007

    异常登录

    登录失败,用户名或密码错误

    login_008

    异常登录

    登录失败,用户名或密码错误

    login_009

    异常登录

    登录失败,用户名或密码错误

    三、用例对应数据

            对照数据驱动部分用例生成相关数据,增加期望值用于判断,并把实际结果做一个excel的数据有效性判断,即pass为绿色,fail为红色,具体示例如:

    userName

    passWord

    expected

    实际结果

    123

    123456

    ok

    <script>alert('')</script>

    123456

    no

    no

    123

    no

    123

    no

    123

    <script>alert('')</script>

    no

     

    四、脚本过程

    A、初始操作,可把这一部分写进common

    调用外部组件:

    如:fucationPath="F:\qtptest\fucation\fucations.vbs" '函数组件

    ExecuteFile fucationPath

    定义casedatacapture位于系统的位置:

    如:casePath="F:\qtptest\case\loginCase.xls"   '用例位置

    dataPath="F:\qtptest\data\001login.xls"    '数据放置的位置

    capturePath="F:\qtptest\Capture\"        '截图放置的位置

    调用初始函数:

            如:

    CloseIE()          '调用组件中的CloseIE(),结束IE进程

    CloseExcel()    '调用组件中的CloseExcel(),结束Excel进程

    QTP_Small()    'QTP最小化运行

  • 在QTP中随机取下拉菜单的值(转)

    2008-09-03 11:08:04

    摘要:产生期望的随机数来选取到动态的下拉菜单的值。
    关键字:随机数;GetROProperty
            有网友在论坛上提出问题,在使用QTP中如何随机选取动态的下拉菜单。在此笔者总结了一些测试经验,利用51testing的登录界面(http://bbs.51testing.com/logging.php?action=login)作为测试页面进行讲解。
            首先我们拿登录页面中的  安全提问  这个下拉菜单作为测试对象。
             

            我们可以先录制一段选取下拉菜单的脚本。
            Browser("51Testing软件测试论坛 测试 | 软件测试\").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").Select "您个人计算机的型号"。
            备注:无

            这边有个技术处理就是使用#加数字来选择我们的下拉菜单。
            Browser("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").Select "#2"
            备注:这个方法在论坛上也出现过,比较适合这个例子。

            下面我们要取得下拉菜单中选项的个数。
            Browser("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").GetROProperty ("items count")
            备注:这边使用GetROProperty,应该算比较常见的,所以不多做解释。

            接下来是要个随机函数,参考帮助。
    Randomize
    x=RandomNumber (0,2)
            备注:这边是随机生成0-2之间的三个数字中的一个。

            我们可以把随机函数写成function,方便以后使用。
    Function Get_Ran(i)
       Randomize
      Get_Ran=RandomNumber (0,i)
    End Function
            备注:这边需要注意的就是使用了函数返回值

            最后我们把脚本整合起来
    Function Get_Ran(i)
       Randomize
      Get_Ran=RandomNumber (0,i)
    End Function


    Get_Count=Browser("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").GetROProperty ("items count")
    Ran_Number=Get_Ran(Get_Count-1)
    Browser ("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").Select "#"&Ran_NumberBrowser("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").GetROProperty ("items count")
    Browser("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").GetROProperty ("items count")
            备注:需要注意的就是在下拉菜单选择的时候从#0开始计算的,所以随机数字从0开始,传入的值也需要减去1。

            题外话:这边主要是使用QTP自带的随机数字函数这个方法来实现随机选择下拉菜单的内容,其实这个随机数字可以开展到随机字符串。因为我们经常会有一些输入域的测试,有的就需255个字节,多的就更可怕,使用随机函数能大大减少我们的工作量。而下面这个例子是实现在abc这三个字母中随机取出来拼成字符串。
    Function makestring(inputlength)
    If IsNumeric(inputlength) Then
    For I = 1 To inputlength
    'you may add a random function here
    A = Array("a","b","c")
    Randomize
    x=RandomNumber (0,2)
    B = A(x)
    makestring =makestring +B
    Next
    msgbox ("output the string:"&makestring )
    else
    msgbox ("error format:"&inputlength)
    End If
    End Function
    Call makestring("8")

  • qtp常见对象

    2008-09-03 10:47:14

    常见的对象名:
    y__+C `/yZN130702
    Dialog:对话框,括号里面的参数表示对话框标题栏上的名字51Testing软件测试网hD6c&};Ad3{ i+Y0i
    WinEdit:Windows窗体中的文本框
    VjFB | K4A130702
    WinButton: Windows窗体中的命令按钮
    sZxoA#Bw130702
    ActiveX: ActiveX控件
    [I-Gp+|Y.|@6y130702
    WinComboBox: Windows窗体中列表框
    |%B9OvA+y13070251Testing软件测试网8T hsc Y*HRe|#s}Bc
    &216;
    qtW\)|"o$s8f"`130702
    常见的事件名:
    b QW9}-R1|PQ130702
    Set:当在文本框中输入信息时会触发该事件51Testing软件测试网!zW5o'XI3}-|
    Click:当点击命令按钮时会触发该事件
    TZ#U'CQ_f130702
    Select:当选择列表框或是单选按钮时会触发该事件
    (e:Gwwd ~nG130702
    Close:当关闭一个标准窗口或对话框时会触发该事件
  • qtp(z)基础代码

    2008-09-03 10:43:55

     

    1.       生产随机数列

    第一种方法:

    randomize'更新反回的数据

    funcation rand(k,n)

    n="int((k-1)*rnd+1)

    rand=n

    end funcation

    第二种方法:

    n="randomnumber.value(1,255)

    2.       当运行到表中的某一行,自动导出表中的所有数据

    row="datatable.getcurrentrow

    if row="5" then

      datatable.export("d:\data.xml")

    end if

    3.       webedit("txtpass").setsecure"sdsdf...."

    如果参数化密码,可以直接在数据表中写入未加密的密码,它会自动识别,即不用把setsecure改为set

    4.       如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证

    if browser("web_name".dialog("dialog_name").exist(1) then

    //如果不出现="false

    error_message=browser("web_name".dialog("diaglog_name".static("用户密码错误!").getRoproperty("text")))

      if error_message<>(datatable.value("error_info")) then

            msgbox(error_message)

        end if

        browser("web_name").dialog("diaglog_name").close

    end if

    这里我总结了两点技巧:

      一是:对于dialog中,虽然提示信息对象名称是“用户密码错误”,但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是 录制第一遍时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性。

        二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理。

    5.       在运行时,向某一个单元格赋值: datatable.value("kai",dtlocalsheet)="nanjing"

    datatable.value("num")只在global形式下的一种省略形式;完整形式是datatable.value("num",dtlocalsheet)

    ––取得某一具体行的值:

    datatable.setcurrentrow(n);

    msgbox(datatable.getsheet("global").getparameter("kai").Rawvalue)

    或者

    kk="datatable.Rawvalue(""kai","action1")

    -------------

    for i="1" to 3

    DataTable.SetCurrentRow(i)

    DataTable.Value("A","Global")="I           " //DataTable.SetNextRow

    next

    -------------

    ––在run-time期间,添加一个action和参数

    kk="datatable.addsheet(""name").addparameter("kai","ddd"). name'/value

    6.        

    with dialog("name")                                       //可以省好多代码,看着也简洁

    content=".wintreeview

    end with

    7.        

    wintreeview.select(item)                    (根是0,列表第一个也是0)

    wintreeview.getcontent

    wintreeview.getitem(整行)+";"+

    winlistview.getitem(行中的第一个字符段)

    wincheckbox("").set"off"'/on

    8.       数据库检查点:

    sub getdata

    set con="createobject(""adodb.connection")

    con.open("descrīption=mod;driver=sqlserver;server=hp\sqlserver;uid=sa;"&_

             "pwd="11111;APP=qtp;WSID=hp;database=MOD31"" 

                                                  //用sqlserver方式

    Con.open "DRIVER = {Microsoft Access Driver (*.mdb)};DBQ="D:\Testdb.mdb""

    //用access方式

    set record="createobject(""adodb.recordset")

    sql="select * from m3_program"

    //选择具体满足一条件的:sql="select* from m3_program where "

    record.open sql,con

    if(record("p_name")="kai") then

    num="num+1;

    end if          

    if(not record.eof) then

    record.movenext

    msgbox("p_name")

    end if

    record.close

    set record="nothing

    con.close

    set con="nothing

    end sub                                  //如果没有查到内容,在结果中不会报错,也不会弹出窗口

    9.        

    vbcr----chr(13)回车符

    vblf----chr(10)换行符

    vbcrlf----chr(13)+chr(10)结合

    10.    stel run has two ways

    11.    对于时间,日期等的格式检查(一种是正则表达式,另一种是输出对比,如果不好对比,用mid截取一部分对比)

    12.    对于一些列表框或树结构,如果发生结点名称发生变化,此时如果报没有彼配的对象,此时可以把更改后面的名称如_2

    13.    对于动态变化的对象,要分清是对像还是属性;对于属性可以用gettoproperty("ddd");得到,而对于由于动态无法识别对像可以用描述性脚本,如:

    Set ōbject= Descrīption.Create()

    Object("regexpwndclass").Value="HtmlButton"

    Object("regexpwndtitle").Value="登陆"

    browser("ss").page("a").button(Object).click

    14.    对于属性是变化的,有时可以把该属性从识别对象里删除

    15.    从系统的文件中获取信息及删除文件get_file_infor("c:\she.mpg")

    function get_file_infor(url)

    dim fso,f

    set fso="createobject(""scrīpting.filesystemobject")

    set f="fso.getfile(url)

    msgbox(f.datecreated)

    f.name:f.size:f.type

    fso.deletefile(url)'/////删除文件

    end function

    --------获取文件夹里所有文件信息get_folder_infor("c:\kai")

    function get_folder_infor(folder)

    dim fso,f,f1,n

    set fso="createobject(""scrīpting,filesystemobject")

    set f="fso.getfolder(folder)

    set fc="f.files

    for each f1 in fc

    select case f1.name

    case"kai.mpg","she.mpg","dd.mp3"

    end select

    next

    end function

    16.    四舍五入可以在后面+0.5,进行自动解决

    17.    y="-------waitproperty(""visible",true,10000)

    18.     

    on error resume next

    on error goto o

    19.    window("").wintreeview("systreeview32").type micctrldown+"p"+micctrlup

    20.    定义数组name="array(1,2,""aa","bb");name(0)=1

    21.    进行日期YYYY-MM-DD的格式检查:

    Function RegExpTest(patrn, strng)

    Dim regEx, Match, Matches                //Create variable.

    Set regEx = New RegExp                           //Create a regular expression.

    regEx.Pattern = patrn                                  //Set pattern.

    regEx.IgnoreCase = True                            //Set case insensitivity.

    regEx.Global = True                                    //Set global applicability.

    Set Matches = regEx.Execute(strng)              //Execute search.

    For Each Match in Matches                          //Iterate Matches collection.

        RetStr = RetStr & "Match found at position "

        RetStr = RetStr & Match.FirstIndex & ". Match Value is '"

        RetStr = RetStr & Match.Value & "'." & vbCRLF

    Next

    RegExpTest = RetStr

    End Function

    date_pattern="^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((01,3-9])|(1[0-2]))-(29|30)))))$"

    result_message=RegExpTest(date_pattern, inputbox("请你输入要检查的时间:"))

    Select case result_message

    case ""

    MsgBox("你输入的日期格式与标准不匹配")

    case else 

    MsgBox(result_message)

    end select

    22.    返回一个字符串在另一字符串中的位置instr(string1,string2)

    23.    有时回放出现找不到对象时,可能不是由于你的代码问题,而是由于你的操作系统等设置问题。比如:你录制一个选择磁盘中的文件动作,会录制为:

    .winlistview("").drap 46,99

    .winlistview("").draponitem "she.mp3"

    下次录制的时候,如果你的系统文件改为不显示扩展名,下次执行的时候,QTP就找不到she.mp3,只能找到she

  • QTP数据表数据库操作(z)

    2008-09-03 10:42:53

    1、Datatable方法GetRowCount
       DataTable.GetSheet("Action1").GetRowCount   //获取总行数
    使用如:
    CountNum=DataTable.GetSheet("Action1").GetRowCount

    2、Datatable方法SetNextRow
       DataTable.GetSheet("Action1").SetNextRow     //取得下一行
       datatable.setcurrentrow(n)   //取得某一行

    3、Datatable方法getcurrentrow    //获得当前行数
       例如:datatable.getcurrentrow

    4、获取datatable值
       4.1 DataTable("p_Text", dtLocalSheet) //取得datatable中参数名称为:p_Text的值
       4.2 DataTable.GlobalSheet.GetParameter("p_Text").Value   //获取参数值方法和DataTable("p_Text", dtLocalSheet)一样
       例如:xname为变量,dim xname
       xname=DataTable("p_Text", dtLocalSheet)
       xname=DataTable.GlobalSheet.GetParameter("p_Text").Value

    5、datatable.value("num")只在global形式下的一种省略形式;完整形式是:
    datatable.value("num",dtlocalsheet)

    -----向某一列的单元格赋值:
    datatable.value("column_name",dtlocalsheet)="nanjing"

    6、字符转换Cstr
       dim mm
       Cstr(mm)

    7、获取对象属性名称用法:
    GetRoProperty----从应用程序界面上获取对象属性(即,是脚本运行时,获取的对象动态属性值)
               例如:获取对象库中index属性值,似乎只能用GetToProperty,因为应用程序界面上对象没有该属性,只是
          QTP为识别该对象创立的描述属性;
    GetToproperty----从对象库中描述对象的属性,静态值
    GetToProperties----获取用于标识对象的属性集;对于这个集合,有count等属性方法

    8、如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证
    if browser("web_name").dialog("dialog_name").exist(1) then'如果不出现=false
         error_message=browser("web_name").dialog("diaglog_name").static("用户密码错误!".getRoproperty("text")
       if error_message<>(datatable.value("error_info"))then
             msgbox(error_message)
          end if
         browser("web_name").dialog("diaglog_name").close
    end if
    这里总结了两点技巧:
       一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是录制第一 遍时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性
        二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理

    9、数据库检查点模块:
    sub database_check
    set con=createobject("adodb.connection")
    con.open "Descrīption=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_
                     "PWD=123456;APP=Quick Test Pro;WSID=IBM;DATABASE=IBM_table"
    'access方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\test.mdb"
    'Orocle 方式:con.open "DRIVER={Oracle in OraHome92};SERVER=CESHI;UID=CND_TEST;PWD=CND;DBQ=CESHI;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;"
    set record=createobject("adodb.recordset")
    sql="select*from ibm_one_table"
    record.open sql,con
    DO
    if(record("ibm_table_column")="kai")then'//查找表格中有多少kai
    num=num+1;
    end if
    record.movenext
    loop until record.eof=true
    record.close
    set record=nothing
    con.close
    set con=nothing
    end sub

    10、"is+*"类型function
    isarray'是否是数组
    isconnected'判断QTP是否连接到TD
    isdate'是否是合法的日期类型
    isempty'判断是否初始化
    isNull'判断是否为空值
    isNumeric'判断是否是数字型
    isobject'判断是否一个功能对象
    isready'判断设备是否准备就绪
    isRootFolder'是否是根目录

    11、for方法1,参数化时选择:dtLocalSheet
    Dim CountNum
    CountNum=DataTable.GetSheet("Action1").GetRowCount
    For i=0 to CountNum-1
    ----xunhuanti------
    DataTable.GetSheet("Action1").SetNextRow    //使用SetNextRow方法
    Next

    12、for方法2,参数化时选择:dtLocalSheet
    dim countNum
    countNum = DataTable.GetSheet("Action1").GetRowCount
    For i=1 to countNum
    DataTable.GetSheet("Action1").SetCurrentRow(i) //使用SetCurrentRow(i)方法
    ―――ddd―――
    next
    13、while方法1,参数化时选择:dtLocalSheet
    Dim CountNum,i
    i=1
    CountNum=DataTable.GetSheet("Action1").GetRowCount
    While i<=CountNum
    ------xuhuanti---
    DataTable.GetSheet("Action1").SetNextRow
    i = i+1
    Wend

    14、while方法2,参数化时选择:dtLocalSheet
    Dim CountNum,i
    i=1
    CountNum=DataTable.GetSheet("Action1").GetRowCount
    While i<=CountNum

    DataTable.GetSheet("Action1").SetCurrentRow(i)
    ----xuhuanti---
    i = i+1
    Wend

  • (qtp)Reporter对象的ReportEvent方法

    2008-09-03 10:41:35

    描述

    test result中报告测试结果。

    语法

    Reporter.ReportEvent EventStatus, ReportStepName, Details [, in]

     Argument  Type  Descrīption
     EventStatus  Number or pre-defined constant

    状态值:

    0 micPass:将本步骤的运行结果状态设置为“Pass”,并向Result中产生报告信息。

    如果想在报告中生成“通过”报告,用本状态值。

    1 micFail: 将本步骤的运行结果状态设置为“Fail”,并向Result中产生报告信息。当脚本中运行本语句时,整个测试的结果状态是“fails”

    如果想在报告中生成“失败”报告,用本状态值。如果运行了本语句,则整个测试的状态为“Fail”。

    2 micDone:仅向Result中产生报告信息,但不影响整个测试的结果状态。

    如果想在报告中生成“完成”报告,用本状态值。

    3 micWarning: SResult中产生报告信息,但是不会中断测试的运行,也不影响测试的 pass/fail status

    如果想在报告中生成“警告”报告,用本状态值。运行这个语句后,整个测试结果状态为“Warning”。

     ReportStepName  String 将在报告中显示的步骤名称(object name).
     Details  String 报告的详细信息。这些信息是本条报告的“Details”信息。
     in  N/A  Not in use

    举例: 下面的例子使用ReprotEvent方法来报告一个失败信息。

    Reporter.ReportEvent 1, "Custom Step", "The user-defined step failed."

    Reporter.ReportEvent micFail, "Custom Step", "The user-defined step failed."
Open Toolbar