51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 7245|回复: 28
打印 上一主题 下一主题

[原创] QTP相关的25个小技巧

[复制链接]
  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    跳转到指定楼层
    1#
    发表于 2011-11-30 21:48:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    1、Q:runaction后面能不能接变量(动态调用action,所以从[url=]数据库[/url]取数据做action名字了,但是调用总是找不到)?
      A:脚本中原有RunAction "testbase [case1]", oneIteration把引号中的内容放到Global表中的第22行,然后将代码修改为:

    datatable.getsheet("Global")
    datatable.setcurrentrow(22)
    strLogin=DataTable("ActionName","Global")
    RunAction strLogin, oneIteration

      help中也有相关帮助,如:Syntax
    RunAction ActionName, [IterationMode , IterationRange , Parameters]
    ActionName : String : The name of the action
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    2#
     楼主| 发表于 2011-11-30 21:49:09 | 只看该作者
     2.Q:QTP8.2中调用VB函数的问题(用VBscrīpt写了一些测试脚本需要的几个通用函数,有没有办法可以用类似include的方式进行调用,而不需要每次都把这些函数Copy到新的脚本中)?

      A:程序开头加上ExecuteFile “..\..\..\project\DeVariable.vbs”

    3.Q:QTP如何做回归测试(300多个TestCase,TD是否可以管理) ?

      A:TD可以实现,可以生成测试集,一个测试集可以包含若干个测试脚本

      QTP8.2本身提供一个工具TestBatch Runner但是运行完没有报告。

      MI有另一个工具叫MTM(multitestmanager)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    3#
     楼主| 发表于 2011-11-30 21:49:26 | 只看该作者
      4.Q:qtp自动截图功能

      A:具体可参考此帖:http://www.51testing.com/cgi-bin ... d=17663&fpage=1

      5.Q:在QTP中如何设置使用别的浏览器(XP系统,用IE访问程序时,每次总提示屏蔽安装ActiveX插件,需要手动安装.但把这个过程录制到QTP后,回放一次是成功的。当我给某个输入框参数化了好多数据后,回放过程中,某些就会失败.

      可能有两个方面可以解决这问题1、每个动作设置延迟时间 2、设置为用别的浏览器。)

      (失败的提示信息是   object not visible)

      A:1.延迟可用WAIT X(X单位是秒)

      2.可以安装插件添加新的浏览器

      SystemUtil.Run “file” “params” “dir” “op'' “mode”

      QTP运行可执行文件的方法及其参数

      ps: 建议是用IE浏览器,或者IE内核浏览器做测试
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    4#
     楼主| 发表于 2011-11-30 21:49:36 | 只看该作者
      6.Q:checkpoint 检查网页,是否能实现只要网页出现乱码就返回错误报告?

      A:Text not displayed能解决问题

      关于 Text Checkpoint 的总结。

      1)Text Checkpoint 的检查部分分为三个部分。Checked Text 、Text Before 、Text After。在默认的情况下,Checked Text执行的是精确检查,其余两个部分执行的是模糊检查。Text Before(After)检查的内容可以比实际的内容少。但是不能有和是实际内容不相符的地方,否则就失败。

      2) Exact match选项。如果选择了这个选项,三部分完全都进行精确检查。个人觉得和只检查checked Text部分没有区别。

      3) Text not displayed。这个选项本质上就是一个结果取反的过程。就是把检查的结果给反过来,把pass变成Fail,Fail变成pass。我觉得这样就很容易理解。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    5#
     楼主| 发表于 2011-11-30 21:49:48 | 只看该作者
      7.Q:WSH的应用方法

      A:WSH 实际上是一个脚本语言的运行环境,它之所以具备强大的功能,是在于其充分挖掘了脚本语言的潜力。因此,如果抛开脚本语言而空谈 WSH ,那实际上就没有了意义。而如果再展开来讲述脚本语言,显然就离开了今天的主题。

      在这种情况下,只好采取一种折衷的方法:给大家推荐几个脚本文件利用 WSH 执行任务的实例,希望大家能通过这些例子对 WSH 的使用有一个初步的认识。

      脚本文件的编写十分方便,你可以选用任意一个文字编辑软件进行编写,编写完成后,只需将它保存为 WSH 所支持的文件名就可以了(如.js 文件和.vbs 文件)。最常用的就是记事本编辑器,下面的实例都是以它作为工具编写的。

      打开记事本编辑器,在上面编写如下内容:

      Wscrīpt.Echo(“走近 WSH”)

      将它保存为以 .vbs 或 .js 为后缀名(千万不要写成了 .txt)的文件并退出记事本。双击执行这个文件。

      这一次,我们要利用 WSH 完成一次创建十个文件夹的工作。代码如下:

    dim objdir
    set ōbjdir=wscrīpt.createobject("scrīpting.filesystemobject")
    for k=1 to 10
    anewfolder="c:\chapter" & k
    objdir.createfolder(anewfolder)
    next

      同样,将它存为 .vbs 文件并退出。运行后,我们会发现,C 盘根目录下一次性多出了十个新文件夹。

      最后,再举一个在服务器上的运用。下面的代码将帮助你重新启动指定的 IIS 服务:

    ' define a constant for stopped services
      Const ADS_SERVICE_STOPPED = 1

    ' get an ADSI object for a computer
      Set ōbjComputer = GetObject("WinNT://MYCOMPUTER,computer")

    ' get an object for a service
      Set ōbjService = objComputer.GetObject("Service","MYSERVICE")

    ' check to see if the service is stopped
      If (objService.Status = ADS_SERVICE_STOPPED) Then

    ' if the service is stopped, then start it
      objService.Start

      End If

      将它以 startsvc.vbs 为名保存在 C: 盘根目录。并通过如下命令执行:Cscrīpt C:\STARTSVC.VBS。运行后,经你指定的 IIS 服务项将被重新开启。

      其实,在 Windows 的 samples 目录下,有个 WSH 文件夹,那里面有不少很具代表性的 .vbs 和. js 脚本文件。

      此外,利用 WSH 还可以自己编写脚本文件来提高网络管理方面的效率。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    6#
     楼主| 发表于 2011-11-30 21:49:58 | 只看该作者
      8.Q;从EXCEL中导出数据进行测试

    datatable.AddSheet("51sheet")
    datatable.ImportSheet "f:\test.xls","testsheet","51sheet"

    Dim i,RowCount '定义两个变量
    i=0
    RowCount=datatable.GetSheet("51sheet").GetRowCount '设置RowCount等于51sheet中的行数。
    msgbox RowCount
    Do while i<rowcount
    i=i+1 '第一次进入循环,执行这句后,i=1

      'datatable.getsheet("51sheet").setcurrentrow(i)   这句话被我注释掉了,正确的写法应该是下面这样,分开写。

    datatable.getsheet("51sheet")
    datatable.setcurrentrow(i)

      '执行过上面两句后,CurrentRow是第一行。

    tempData=DataTable.GetSheet("51sheet").GetParameter("Name").Value

      '现在,我们调用msgbox看看下面这种调用方法得到的是什么值?没错,是第一行的值,下一次循环呢?

      '得到的是第二行的值么?

      msgbox "GetParameter-Name:"&tempData '这里弹出我们要看的值。

      '下面我们用另外一种方法来得到。

      msgbox "GetParameter-i:"&DataTable.GetSheet("51sheet").GetParameter(1).Value '这里我用GetParameter(1)去得到sheet中第一列的值。

      loop
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    7#
     楼主| 发表于 2011-11-30 21:50:06 | 只看该作者
      9.Q:关于dtGlobalsheet与dtGlobalsheet

      1) dtGlobalsheet只有一个,它的index值比较特殊,它有两个index值,一个是1还有一个是内置的默认的1000。

      你可以用1或者1000去引用它都是正确的。当然了,如果你用dtGlobalsheet来引用它也是正确的。这个sheet的Name叫做"Global"。注意:SheetName是区分大小写的。

      2) dtLocalsheet可以用index:1001来引用,当然,也可以用2来引用。至于其它自定义的sheet嘛,你就只能用index:3来引用了。

      它没有内置的默认的类似前两个那样的index值。

      3) datatable这个对象只有一个。就是所有sheet的集合。或许你把它理解为excel文件比较好。

      dtsheet呢?就是其中的每个sheet。所不同的就是MI为他们做了一些默认值。在我们的应用中,可能会有多个action,如:actiion1,actiion2,actiion3

      这些action也分别对应有各自默认的LoaclSheet.即:actiion1,actiion2,actiion3。

      如果每个action中,我们都只用到一个sheet,那就好办了,在每个action中都可以用localsheet来引用,但是如果我们有两个及两个以上的sheet.那么就比较容易乱套了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    8#
     楼主| 发表于 2011-11-30 21:50:20 | 只看该作者
      10、Q:移动当前位置的行

    For i=1   to 3
    datatable.getsheet("Global")
    datatable.setcurrentrow(i)
    DataTable("C","Global") = DataTable("nodename","Global") ‘把表Global中的nodename字段中的内容取出来。
    Next

      11、Q:如何能记录到页面的校验码?(Output value能不能得到web页面的校验码,一般的校验码是由图片随即生成的 ,用QTP怎么录脚本在登陆前得到校验码并输入到校验码一栏)

      A:1)一个很简单的方法:测试时叫开发屏蔽掉检验码的功能后,再录制脚本。检验码的功能可以手工很简单测试出来。

      2)想得到图片的校验码,唯一的方法就是跟程序员拿程序,然后自己在脚本里面写FUCNTION!

      其它就要手动输入了!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    9#
     楼主| 发表于 2011-11-30 21:50:29 | 只看该作者
      12、QTP正则表达式的帮助

      A: QTP regular expression usage.doc (到Google里勾吧)

      13、自动测试实施计划

      1)分析实施自动化测试可能存在的风险:就是决定是否实施, 用成本 时间 效果 。。

      2)制定实施的时机:也就是在什么阶段

      3)研究所要测试的功能 性能

      4)分析在测试中可能遇到的问题 和困难

      5)预估所需要的人时和相应的硬件

      7)确定负责人员和相关测试人员

      6)制定详细的测试计划 方案

      7)最后是执行计划
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    10#
     楼主| 发表于 2011-11-30 21:50:37 | 只看该作者
      14、Q:一个Action里如何调用在另一个Action中定义的函数、过程(或变量、常量)

      例如:

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

      'Action_A

      Public strURL

      ...... ......

      Function QueryList()

      ...... ......

      ...... ......

      End Function

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

      'Action_B

      '如何调用 QueryList函数和strURL

      A:1)可以把这些变量和Function放在vbs文件作为resource文件共享,在每个Action中添加该文件.

      如果function中出现控件调用,那么必须确保该控件在相应的Action的object repository中是存在的.

      2)定义一个可被调用的ACTION里面唯一的放一个FUNCTION
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    11#
     楼主| 发表于 2011-11-30 21:50:46 | 只看该作者
      15、Q:如何管理QTP的源代码?(QTP生成的源代码比较多,而且和环境控件都有关,假如需要多人同时开发, 请问如何管理源代码?)

      A: 一个是代码你可以通过vss,cvs等来进行管理

      一个是通过td或者qc的基于用例的代码管理

      其实第一种方法是基于版本控制来进行的,第二种方法是基于用例管理进行的

      角度不同,管理方法也不同,不过团队协作需要的大家分工明确,进度控制。代码管理可以借鉴开发的方法。

      16、Q:脚本不能回放,IE中的AtiveX设置有问题??

      A: TOOL---OPTIONS----Ative screen

      然后点开advanced..,把LOAD   ACTIVEX CONTROLS打勾

      TOOL---OPTIONS----Ative screen

      然后点开advanced..,run scrīpts-->disabled!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    12#
     楼主| 发表于 2011-11-30 21:50:54 | 只看该作者
      17、Q: 如何参数化link

    Browser("Browser").Page("Page").Sync
    Browser("Browser").Navigate "http://www.51testing.com/cgi-bin/index.php"
    Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Sync

    Set tags=Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Object.links
    Dim i,j, arr()
    i=0
    For Each element in tags
    If Ucase(element.tagname)="A" and left(element.InnerText,1)="[" Then
    ReDim Preserve arr(i+1)
           arr(i)=element.InnerText
    i=i+1
    end if
    Next

    For j=0 to i
    Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").SetTOProperty "Text",arr(j)
             Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[ 版主讨论区 ]").Click
    Browser("Browser").Back
    Next

      这段代码先是打开一个空的页面,然后输入url.到达论坛首页。然后得到所有版面的名称,也就是link的名称,存到数组里面。然后使用SetTOProperty更换录制时候录下的link的属性,这时候再click。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    13#
     楼主| 发表于 2011-11-30 21:51:01 | 只看该作者
      18、QTP 在Debug狀態,在Export View 區域不能寫入任何東西

      A: 如果你的目的是在debug过程中修改已执行过的命令,可以在Debug view的Command中执行命令,如重新执行已经执行过的命令,修改变量的值等等。

      如:Window("Flight Reservation").WinEdit("Name:").Set "51testing"

      已经执行,如果现在想修改“51testing”为“testing”,可以在command中执行

      Window("Flight Reservation").WinEdit("Name:").Set "testing"

      19、Q:动态变化值如何获取

      A:VAL=Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").GetROProperty("Value")

      Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").select val
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    14#
     楼主| 发表于 2011-11-30 21:51:11 | 只看该作者
      20、Q:如何一一获得Table中 某栏 link 的 text?

      A:通过上面link 的学习. 我终于融会贯通,完成了我的问题: 与大家共享:

    Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Image("Tplus").Click
    Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Image("Tplus_2").Click
    Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Link("开课设置").Click
    Browser("Login").Page("Page").Frame("main").WebList("drpStatus").Select "任意"
    Browser("Login").Page("Page").Frame("main").WebButton("查找").Click
    Browser("Login").Page("Page").Sync

    Dim finded,findCode,Nowout
    'define a constrat for find
    findCode = 110901
    finded = false

    Function MaxPage(pageString)
    'msgbox pageString
    Dim ilen,i,j
    ilen = len(pageString)
    i=ilen
    While i>0
           j = mid(pageString,i,1)
       'msgbox j
       If instr("123456789",j)>0 Then
              MaxPage = j
       'msgbox MaxPage
       Exit function
       End If
       i=i-1
    Wend
    End Function


    Dim trowcount,maxp
    trowcount = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").RowCount
    msgbox "Rowcount: "&trowcount
    Nowout = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").GetCellData(trowcount,1)
    Nowout = trim(Nowout)
    maxp = MaxPage(Nowout)
    msgbox "max page: "& maxp

    Dim nowPage,checkid
    For nowPage = 1 to maxp
       If   finded Then
       Exit for
    End If
       ' link to the 当前所需page
       If nowpage>1 Then
    Browser("Login").Page("Page").Frame("main_8").Link("[2]").SetTOProperty "Text","["&nowpage&"]"
    Browser("Login").Page("Page").Frame("main_8").Link("[2]").Click
    Browser("Login").Page("Page").Sync
    end if

       ' Get the rowcount of table in now page
    trowcount = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").RowCount
    msgbox "Rowcount: "&trowcount

       'link every record in the table of the page
    for i = 2 to trowcount   - 2
    Nowout = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").GetCellData(i,2)
    'msgbox i&": "&Nowout

    checkid = "dgCourse:_ctl" &(i+1)& ":_ctl0"
    Browser("Login").Page("Page").Frame("main_8").WebCheckBox("dgCourse:_ctl3:_ctl0").SetTOProperty "name",checkid
    Browser("Login").Page("Page").Frame("main_8").WebCheckBox("dgCourse:_ctl3:_ctl0").Set "ON"

    Browser("Login").Page("Page").Frame("main_8").Link("0901").SetTOProperty "Text",Nowout
    Browser("Login").Page("Page").Frame("main_8").Link("0901").Click
    Browser("开课设置详细信息").Page("开课设置详细信息").Sync
    'wait(1)
    msgbox "begun"
    msgbox findCode
    msgbox Nowout
    msgbox "finished"
    If   trim(findCode) = trim(Nowout) Then
           finded = true
    msgbox "find is ok!"
    wait(2)
    Exit for
    End If
    Browser("开课设置详细信息").Close
    Browser("Login").Page("Page").Sync
       next

    Next


    \
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    15#
     楼主| 发表于 2011-11-30 21:51:20 | 只看该作者
     21、Q:网页下拉框的选择

    A:For i =1 to 10
    Randomize
    IndexNum=Int((10 - 5 + 1) * Rnd + 5)
    Browser("Mercury Tours").Page("Find Flights_2").WebList("arrive").Select "#"&IndexNum
    wait(3)
    Next

    Sub ChildObjects_Example()
    'The following example uses the ChildObjects method to find all the
    'list objects on a Web page, and then to select an item in each list.

    Set ōDesc = Descrīption.Create()
    oDesc("micclass").Value = "WebList"
    Set Lists = Browser("Mercury Interactive").Page("Mercury Interactive").ChildObjects(oDesc)
    NumberOfLists = Lists.Count()
    For i = 0 To NumberOfLists - 1
    Lists(i).Select i + 1
    Next

    End Sub
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    16#
     楼主| 发表于 2011-11-30 21:51:28 | 只看该作者
      22、Q:将测试数据单独拿出来

      A:取得一个

    Browser("Browser").Page("").WebList("fid").GetItem (1)

      取得全部

    Browser("Browser").Page("").WebList("fid").GetROProperty("all items")

      以下可以在自带的例子中实现

    Window("Flight Reservation").WinComboBox("Fly From:").Select "Frankfurt"
    a=window("Flight Reservation").wincombobox("Fly From:").GetItem(1)
    reporter.ReportEvent 2,"下拉列表的值",a
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    17#
     楼主| 发表于 2011-11-30 21:51:37 | 只看该作者
     23、Q:和TD连接

      A:在QTP中不是有个Quality Center Connection,选择服务器连接,服务器处输入类似http://computer_name/tdbin,其中computer_name为服务器的名字,连接后在测试结果中添加defect就可以与TD相连了。

      24、Q:处理Windows弹出窗口

    A:IF Not Window("Flight Reservation").Exist(1) Then
    'Calling   open flight
            If not Dialog("Login").Exist(1)   Then
        Browser("管理系统").Dialog("Microsoft Internet Explorer").WinButton("确定").Click

    End If
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    18#
     楼主| 发表于 2011-11-30 21:51:50 | 只看该作者
      25、Q:查询结果的比较

      这是查询一个字段的,对查询结果多页的情况也涉及了,其实应该把所有查询字段联合起来的,也就是改改sql语句和判断条件。

    [i]Set Conn = CreateObject("ADODB.Connection")
    Set Rs = CreateObject("ADODB.Recordset")
    Conn.Open "Descrīption=kml-it;DRIVER=SQL Server;SERVER=KML-IT;UID=saWD=password;APP=QuickTest Professional;WSID=KML-MICHELLE;DATABASE
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-4-19 16:40
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    19#
    发表于 2011-11-30 21:54:25 | 只看该作者
    不错的技巧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2011-12-1 16:20:10 | 只看该作者
    不错;支持;
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-25 11:02 , Processed in 0.096762 second(s), 32 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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