不是因为有些事情难以做到,我们才失去自信,而是我们失去了自信,这些事情才难以做到!

QTP使用技巧收集

上一篇 / 下一篇  2008-12-11 12:05:49 / 个人分类:功能测试

这是从别的网上找来的,这些内容对我有很大的帮助,所以我就把它粘来了,以备不时之需。。 

+@ X8|([9l B0

1.runaction后面能不能接变量(动态调用action,所以从数据库取数据做action名字了,但是调用总是找不到)? 

i*k^p#u7x3t.v0

 A:脚本中原有RunAction "testbase [case1]", oneIteration

Jk u(I BD*Q L0

   把引号中的内容放到Global表中的第22行,然后将代码修改为:51Testing软件测试网(|5u+Q}-b&a*F"`6sU

   datatable.getsheet("Global")

&}G"f'O/Ze0

   datatable.setcurrentrow(22) 

/k;} c/?])|r`c b0

   strLogin=DataTable("ActionName","Global")

2In _(Ri6sN0

   RunAction strLogin, oneIteration   51Testing软件测试网/e&VH4V2R)nw

   help中也有相关帮助51Testing软件测试网J{I#i!r4Q H

   :51Testing软件测试网-{l!`x,n Q K

   Syntax51Testing软件测试网#L_.sA,S

   RunAction ActionName, [IterationMode , IterationRange , Parameters]

_G'{z.S2LL0

   ActionName : String : The name of the action  

,P2PX6NO(d_!I0

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

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

HV(raP3A7_0

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

H$rua;h0

 A:TD可以实现,可以生成测试集,一个测试集可以包含若干个测试脚本51Testing软件测试网&P)F!c7tJi f[;Z/E9G#M

   QTP8.2本身提供一个工具TestBatch Runner但是运行完没有报告。51Testing软件测试网-_/U${ ^0xa%p

   MI有另一个工具叫MTMmultitestmanager 51Testing软件测试网8n7c)YV6j zg#}

 

1z:sT'g#? x%j)TYH0

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

&REL5^,|$f8?1fc9@0

   可能有两个方面可以解决这问题1、每个动作设置延迟时间2、设置为用别的浏览器。)51Testing软件测试网KU;Y6_"Cg

   (失败的提示信息是 object not visible)51Testing软件测试网){%C}X ~*MJ

 A:1.延迟可用WAIT XX单位是秒)51Testing软件测试网^^W;U;O)y;Un

   2.可以安装插件添加新的浏览器51Testing软件测试网0T(k(q3oJ S

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

D2\Z8W#zPV^8k]:xq0

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

s#{z R1r H-M0

    ps:建议是用IE浏览器,或者IE内核浏览器做测试  51Testing软件测试网zL+l(Z_:z7f!m

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

F_ A7s%AF(w0

 A:Text not displayed能解决问题51Testing软件测试网#e-DRHh+U

   关于Text Checkpoint的总结。

qB`)q:BBP0vG0

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

)g#]JHx$C5G'W0

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

8qnm'zuOh(czph0

   3) Text not displayed。这个选项本质上就是一个结果取反的过程。就是把检查的结果给反过来,pass变成FailFail变成pass。我觉得这样就很容易理解。 51Testing软件测试网(j7E;S:fQm-d

7.WSH的应用方法

hd yS:P7d0

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

SWFB(rS0m%B0

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

7H4O;vRZ2D8Y0

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

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

\$|*}&ND @/N0

  Wscrīpt.Echo("走近WSH")51Testing软件测试网X[ f'r YC.A

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

h0t FA~&a~pG0

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

Re7I3wl+[1Tc0

  dim objdir51Testing软件测试网tO'Dyi0Pk6J

  setōbjdir=wscrīpt.createobject("scrīpting.filesystemobject")51Testing软件测试网X"b ]mF$G+I

  for k=1 to 1051Testing软件测试网#P jNcG%aWi

  anewfolder="c:\chapter" & k

YBS W Vig{S$}0

  objdir.createfolder(anewfolder)51Testing软件测试网'P/P2n\cw{

  next  51Testing软件测试网A[,P2w2V

同样,将它存为.vbs文件并退出。运行后,我们会发现,C盘根目录下一次性多出了十个新文件夹。 51Testing软件测试网9]3hU!Q ?"_

   最后,再举一个在服务器上的运用。下面的代码将帮助你重新启动指定的IIS服务:  ' define a constant for stopped services51Testing软件测试网)F!{eo:~ ~N3P

  Const ADS_SERVICE_STOPPED = 1  51Testing软件测试网F b0L [2hv~U

' get an ADSI object for a computer51Testing软件测试网LI@5?;YX&S4_5@#p-t

  SetōbjComputer = GetObject("WinNT://MYCOMPUTER,computer") 

Uz,kxv!P0

' get an object for a service

pF f[)B oi0

  SetōbjService = objComputer.GetObject("Service","MYSERVICE")  51Testing软件测试网 COrCM$i

' check to see if the service is stopped

)as^ n8xp7~0

  If (objService.Status = ADS_SERVICE_STOPPED) Then  51Testing软件测试网E;NYh3J%]*A

' if the service is stopped, then start it51Testing软件测试网1Z LF i6M.Rz ax[Dx

  objService.Start  51Testing软件测试网"@%Kh;r0y-e

  End If  

OD4l1jR$R0

将它以startsvc.vbs为名保存在C:盘根目录。并通过如下命令执行:Cscrīpt C:\STARTSVC.VBS。运行后,经你指定的IIS服务项将被重新开启。 51Testing软件测试网Po0fW1h%k]+Z g

其实,在Windowssamples目录下,有个WSH文件夹,那里面有不少很具代表性的.vbs. js脚本文件。  51Testing软件测试网j3{4a6B!^/S

此外,利用WSH还可以自己编写脚本文件来提高网络管理方面的效率。  51Testing软件测试网 rExq5m

8.EXCEL中导出数据进行测试  

:I Z5V6vD s0

datatable.AddSheet("51sheet")51Testing软件测试网Z1U I,H0x6q,y"m

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

P)m6N.x6x z0

Dim i,RowCount '定义两个变量

y.~+S c*I;_i0

i=051Testing软件测试网t6Ef[dG&Me

RowCount=datatable.GetSheet("51sheet").GetRowCount '设置RowCount等于51sheet中的行数。51Testing软件测试网$in8ftk

msgbox RowCount

!{8t8qj$HQ,c0A0

Do while i<rowcount

"ze-U:mi R[;~"V1h0

i=i+1 '第一次进入循环,执行这句后,i=1

e w0`@j)Nr0

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

Lcl~`0

datatable.getsheet("51sheet")

\6W3{ `C\7s0

datatable.setcurrentrow(i) 

y/A\Bx.V~/T*_$e0

'执行过上面两句后,CurrentRow是第一行。  51Testing软件测试网g5?N)Jj-x v|

tempData=DataTable.GetSheet("51sheet").GetParameter("Name").Value                 51Testing软件测试网s/wH!U-bz[2h

'现在,我们调用msgbox看看下面这种调用方法得到的是什么值?没错,是第一行的值,下一次循环呢?51Testing软件测试网:["p,W V.iv4F/s

'得到的是第二行的值么?51Testing软件测试网p'~$o{K2M!h `

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

;D W d EBd0

'下面我们用另外一种方法来得到。51Testing软件测试网6U1n_oG4j-J

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

loop  51Testing软件测试网V;}yt2b]+m1\4M/|

9.关于dtGlobalsheetdtLocalsheet 51Testing软件测试网a-T&c(VP$Fl2X

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

;`B/N e:HPt&tJ+FA2Z0

你可以用1或者1000去引用它都是正确的。当然了,如果你用dtGlobalsheet来引用它也是正确的。这个sheetName叫做"Global"。注意:SheetName是区分大小写的。51Testing软件测试网M1C u7| i

2) dtLocalsheet可以用index:1001来引用,当然,也可以用2来引用。至于其它自定义的sheet嘛,你就只能用index:3来引用了。51Testing软件测试网:t xAlm @E

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

!z+~Tft(K$p2E.e0

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

t D{"Vo0

dtsheet呢?就是其中的每个sheet。所不同的就是MI为他们做了一些默认值。在我们的应用中,可能会有多个action,如:actiion1,actiion2,actiion351Testing软件测试网lKYNcW&lc1KD(y

这些action也分别对应有各自默认的LoaclSheet.即:actiion1actiion2actiion3  

&a[\Y` eG6F0}0

如果每个action中,我们都只用到一个sheet,那就好办了,在每个action中都可以用localsheet来引用,但是如果我们有两个及两个以上的sheet.那么就比较容易乱套了。 51Testing软件测试网"a RqgV$@;GZXU

10.移动当前位置的行  

AH7yD!R)Mv0

For i=1 to 3

uf/zSYfTh p5E0

datatable.getsheet("Global")51Testing软件测试网CA.T`Fqp;w

datatable.setcurrentrow(i)

cF7@l1c5o)P0

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

#iH7y_0\ Q|0

Next 

%_&v4`qO sT d0

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

  A:1)一个很简单的方法:测试时叫开发屏蔽掉检验码的功能后,再录制脚本。检验码的功能可以手工很简单测试出来。51Testing软件测试网/SOji;N2R-O

    2)想得到图片的校验码,唯一的方法就是跟程序员拿程序,然后自己在脚本里面写FUCNTION!51Testing软件测试网7N~*m1g/_IP1O7m

       其它就要手动输入了51Testing软件测试网5E)[\p G'vM-W

3.自动测试实施计划51Testing软件测试网 Z(q}&u+O(?;p

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

&b| tXXH.TS0

  2)制定实施的时机:也就是在什么阶段51Testing软件测试网 RrWk$S

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

C,L3}Zr0

  4)分析在测试中可能遇到的问题和困难51Testing软件测试网T%l:k^4^ P

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

I!Z3S9mn k5wn:u0

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

jNsn2Z d3Z Xc0

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

7SBcId#k0

  7)最后是执行计划  51Testing软件测试网 @3F!Y!s0o/R|7KF

14.一个Action里如何调用在另一个Action中定义的函数、过程(或变量、常量)51Testing软件测试网@)\%qPu4oQkd(~

  例如:

_} Ri$\8?&y0

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

W"VbjR MRv0

  'Action_A

J%L|p~k7od.T*iD0

    Public strURL   51Testing软件测试网2l&N~/^:e4|6X FW

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

c"r)u W6EJrc0

   Function QueryList()

*?3U6E s;pE\a0

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

N q'Ckk0|l0

       ...... ...... 51Testing软件测试网5s3m"Gd-mmVc Rwn

   End Function51Testing软件测试网1o c GbRt:q ^

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

W dz?3~q/DN"o` F0

  'Action_B

^C{`.o Oy K;^0

  '如何调用QueryList函数和strURL51Testing软件测试网*j3_"^)k$k

  A1)可以把这些变量和Function放在vbs文件作为resource文件共享,在每个Action中添加该文件.    51Testing软件测试网;SY!y EBz&]p%`

如果function中出现控件调用,那么必须确保该控件在相应的Actionobject repository中是存在的.51Testing软件测试网qU2N@-e*S8VP M$v%C

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

'}w8@W;b0

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

  A:一个是代码你可以通过vss,cvs等来进行管理51Testing软件测试网 RP*`1u1`Ti1c

    一个是通过td或者qc的基于用例的代码管理 51Testing软件测试网's:?1bt&eq ^

 51Testing软件测试网x;p6pM/fc

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

2x"a5b'T6oV!jA/x9|0

    角度不同,管理方法也不同,不过团队协作需要的大家分工明确,进度控制。代码管理可以借鉴开发的方法。  51Testing软件测试网9K Am9jpV'yAU

16:脚本不能回放,IE中的AtiveX设置有问题??51Testing软件测试网 c%i#]MkG,P.kg*~(J

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

6IF;V9Q$aJA0

    然后点开advanced..,LOAD ACTIVEX CONTROLS打勾51Testing软件测试网s1z1EIH:e!D0{?XM

    TOOL---OPTIONS----Ative screen

"XC:i%~jh w4a0

    然后点开advanced..,run scrīpts-->disabled!  51Testing软件测试网c Cm7u6Z6w`dc

17.如何参数化link 

D0@-S8td,U8o0

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

/SPI`CD*~0

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

MN.g.R:}g q0

Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Sync 51Testing软件测试网7t qe0l]^a_.S)m"A

Set tags=Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Object.links51Testing软件测试网#Ss]X}aQ

Dim i,j, arr()

v$E [/Q9H6o;P0

i=051Testing软件测试网F%V,z+{uUG

For Each element in tags51Testing软件测试网pS1emB

   If Ucase(element.tagname)="A" and left(element.InnerText,1)="[" Then51Testing软件测试网H&}+f2H X] M4M

                       ReDim Preserve arr(i+1)51Testing软件测试网\^,IZ x#S1G$K.v

                   arr(i)=element.InnerText51Testing软件测试网(O)teoE H2m,d$P5Q.l

   i=i+1

&v`&sbz*P2]0

       end if51Testing软件测试网dJhB#h?

Next 51Testing软件测试网D1[6S"B?'s'`Zd

For j=0 to i51Testing软件测试网\-H"q]2zN Wg

                       Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[版主讨论区]").SetTOProperty "Text",arr(j)51Testing软件测试网6V d Zy T#y

           Browser("Browser").Page("51Testing软件测试论坛---软件测试,软件质量工程师").Link("[版主讨论区]").Click

S5^[Vcn5L.^'c0

                       Browser("Browser").Back

V2y*M6r1io N k0

Next  

)YBVr6Qe/Z0

这段代码先是打开一个空的页面,然后输入url.51Testing软件测试网&X.jw(^~ [

到达论坛首页。 51Testing软件测试网}%AFPb

然后得到所有版面的名称,也就是link的名称。

GhZ@:MS0

存到数组里面。

{|O e2g)D$D o0

然后使用SetTOProperty更换录制时候录下的link的属性。51Testing软件测试网K,j Ifu}P

这时候再click  

pvU:\,h3k-\Tv0

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

:URs q _T0

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

EE5Z[t1gC$o0

如:Window("Flight Reservation").WinEdit("Name:").Set "51testing"51Testing软件测试网C[*~+`2krs

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

:c QO Jb G k?*j0

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

&AeM-L fJ {@X R0

19动态变化值如何获取 51Testing软件测试网w y$xk M"r#U9i

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

-|$EU [x2e#i)\0

Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").select val 51Testing软件测试网't'd8IBlub0u@,x

20.如何一一获得Table某栏linktext?51Testing软件测试网Ve(x*p |9|} ope

A:通过上面link学习.我终于融会贯通,完成了我的问题:与大家共享:51Testing软件测试网L&Ci9m\%{6gf wA

//////////////////////////////////////////////////////////////////////////////////////

,J3u3Z;}!N @O0

Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Image("Tplus").Click

+W Q!qfjQ2f0

Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Image("Tplus_2").Click51Testing软件测试网e9`4g&bI/~

Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Link("开课设置").Click51Testing软件测试网zI)]*S.fn['z

Browser("Login").Page("Page").Frame("main").WebList("drpStatus").Select "任意"

5t"^3yel0

Browser("Login").Page("Page").Frame("main").WebButton("查找").Click

cE_.Z A.fR-K6HSrJ0

Browser("Login").Page("Page").Sync51Testing软件测试网6ZH*|XTnH

 

?G)c*t|1~A5v Xac0

Dim finded,findCode,Nowout51Testing软件测试网6Z:t-r)l1G`a

'define a constrat for find

U h O0UH:`0

findCode = 110901  

aoD `*[0

finded = false

2^fHT B0t%O&g0

 51Testing软件测试网9Yn0oBiT!gUP)lW9i

Function MaxPage(pageString)51Testing软件测试网+S*A-X1r ^wE+S7q

  'msgbox pageString

|&u0y*}WE^,dn'e4yM0

  Dim ilen,i,j

)I0_T1s$E%U9l3A H0

  ilen = len(pageString)

X+|K8pAvVZ$~y2lR D0

  i=ilen

1bv%Lt:V G1?b0

  While i>051Testing软件测试网$q dB6JSP0L#vW!F

       j = mid(pageString,i,1)

;Rbq9m(uT0

          'msgbox j

&I{:L c h d3hy5O0

          If instr("123456789",j)>0 Then51Testing软件测试网 Y#^*M2n1g3X5g8ci,h(a ?R

          MaxPage = j51Testing软件测试网3xl#gd)[4z

                  'msgbox MaxPage51Testing软件测试网)Yf.UGB;cj#L S

                  Exit function51Testing软件测试网ZV1Q.?x VMu(S

          End If

e ?UJO1}7m0

          i=i-1

c2g+`:w\*~n0

  Wend

to0kb7Ghn6b8Or|0

End Function51Testing软件测试网+YEq&c| Z0~

 51Testing软件测试网8wvvB%i

 

_Ul(Kb;BF0

Dim trowcount,maxp

Xgx4u4}\KL"\0

trowcount = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").RowCount

C*qze(K_0

msgbox "Rowcount: "&trowcount51Testing软件测试网M1h'z \ud'Z:H S_5m

Nowout = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").GetCellData(trowcount,1)51Testing软件测试网H"s9I [#t+T-])}'C

Nowout = trim(Nowout)

1V%J7TL9s'~T&W1w[6L0

maxp = MaxPage(Nowout)

0P w%dTJ3h9G0

msgbox "max page: "& maxp

b f'U%x0e0A0

 

~c5@ p+u i/V)DKT0

Dim nowPage,checkid51Testing软件测试网$WRV:uI$KxyZ,|

For nowPage = 1 to maxp51Testing软件测试网(E{W H&MV EHoq

  If finded Then51Testing软件测试网c_0n A r8v

          Exit for51Testing软件测试网s*?y#n jh

  End If51Testing软件测试网 n ft l,C2N,b

 ' link to the当前所需page

g4nr)RW(PY0

 If nowpage>1 Then

T_7?1g*}5s!UYG0

   Browser("Login").Page("Page").Frame("main_8").Link("[2]").SetTOProperty "Text","["&nowpage&"]"51Testing软件测试网2W)z&a(F(zu"U3t

   Browser("Login").Page("Page").Frame("main_8").Link("[2]").Click51Testing软件测试网(p%A7I6d9nP.W*} [+Y

   Browser("Login").Page("Page").Sync51Testing软件测试网-Z`$N:\P$e

  end if

c FR5je.qF0

 51Testing软件测试网3|:{5_!wA)n5`,je7l

 ' Get the rowcount of table in now page51Testing软件测试网q8x tW_{

  trowcount = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").RowCount

lnlg4T\8e0

  msgbox "Rowcount: "&trowcount

/Io!V|$i1Ove9_0

 

Uh5@-s vG0

 'link every record in the table of the page51Testing软件测试网 jn*A Of&N8?

  for i = 2 to trowcount - 2

r+Y [V uNS$?|2s0

       Nowout = Browser51Testing软件测试网l8Cv E;B,ZA0e


TAG: 功能测试

mike00088的个人空间 引用 删除 mike00088   /   2008-12-13 15:05:47
不错好好学习,我的为什么不能写日志传照片呀?奇怪
 

评分:0

我来说两句

Open Toolbar