【软件自动化测试-QTP实战技能 1】== 使用技巧实例

1.runaction后面能不能接变量(动态调用action,所以从数据库取数据做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

 

 

 

2.QTP8.2中调用VB函数的问题(VBscrīpt写了一些测试脚本需要的几个通用函数,有没有办法可以用类似include的方式进行调用,而不需要每次都把这些函数Copy到新的脚本中)?

 A:程序开头加上ExecuteFile"../../../project/DeVariable.vbs"

 

 

 

3.QTP如何做回归测试(300多个TestCaseTD是否可以管理)

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

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

   MI有另一个工具叫MTMmultitestmanager

 

 

 

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

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

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

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

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

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

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

    ps:建议是用IE浏览器,或者IE内核浏览器做测试

 

 

 

6.checkpoint检查网页,是否能实现只要网页出现乱码就返回错误报告?

 A:Text not displayed能解决问题

   关于 Text Checkpoint的总结。

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

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

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

 

 

 

7.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 to10

  anewfolder="c:/chapter"& k

  objdir.createfolder(anewfolder)

  next

 

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

 

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

  ConstADS_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还可以自己编写脚本文件来提高网络管理方面的效率。

 

 

8. 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

 

 

 

9.关于 dtGlobalsheet dtLocalsheet

 

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.那么就比较容易乱套了。

 

 

 

10.移动当前位置的行

 

For i=1 to 3

datatable.getsheet("Global")

datatable.setcurrentrow(i)

DataTable("C","Global")= DataTable("nodename","Global")‘把表Global中的nodename字段中的内容取出来。

Next

 

 

 

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

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

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

       其它就要手动输入了!

 

 

 

13.自动测试实施计划

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

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

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

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

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

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

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

  7)最后是执行计划

 

 

 

14.一个Action里如何调用在另一个Action中定义的函数、过程(或变量、常量)

  例如:

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

  'Action_A

    Public strURL   

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

   Function QueryList()

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

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

   End Function

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

  'Action_B

  '如何调用 QueryList函数和strURL

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

 

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

   2)定义一个可被调用的ACTION里面唯一的放一个FUNCTION

 

 

 

15.如何管理QTP的源代码?(QTP生成的源代码比较多,而且和环境控件都有关,假如需要多人同时开发,请问如何管理源代码?)

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

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

 

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

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

 

 

 

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

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

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

    TOOL---OPTIONS----Ative screen

    然后点开advanced..,run scrīpts-->disabled!

 

 

 

17.如何参数化link

 

Browser("Browser").Page("Page").Sync

Browser("Browser").Navigate"http://www.51testing.com/cgi-bin/index.php"

Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Sync

 

Settags=Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Object.links

Dim i,j, arr()

i=0

For Each element in tags

   If Ucase(element.tagname)="A" andleft(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

 

 

18. QTPDebug状态,Export View 区域不能写入任何东西

 

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

 

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

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

Window("FlightReservation").WinEdit("Name:").Set "testing"

 

 

 

19动态变化值如何获取

 

A:

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

Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").selectval

 

 

 

20.如何一一获得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

 Ifnowpage>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

 

 

 

21.网页下拉框的选择

 

A:For i =1 to10

   Randomize

   IndexNum=Int((10 - 5 + 1) * Rnd + 5)

   Browser("Mercury Tours").Page("FindFlights_2").WebList("arrive").Select "#"&IndexNum

   wait(3)

  Next

 

 

 

Sub ChildObjects_Example()

'The following example uses theChildObjects method to find all the

'list objects on a Web page, and then toselect an item in each list.

 

Set ōDesc = Descrīption.Create()

oDesc("micclass").Value ="WebList"

Set Lists = Browser("MercuryInteractive").Page("Mercury Interactive").ChildObjects(oDesc)

NumberOfLists = Lists.Count()

For i = 0 To NumberOfLists - 1

Lists(i).Select i + 1

Next

 

 

End Sub

 

 

 

22.将测试数据单独拿出来

 

A:取得一个

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

取得全部

Browser("Browser").Page("").WebList("fid").GetROProperty("allitems")

 

 

 

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

Window("Flight Reservation").WinComboBox("FlyFrom:").Select "Frankfurt"

a=window("FlightReservation").wincombobox("Fly From:").GetItem(1)

reporter.ReportEvent 2,"下拉列表的值",a

 

 

 

23.和TD连接

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值