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

QTP使用技巧收集

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

这是从别的网上找来的,这些内容对我有很大的帮助,所以我就把它粘来了,以备不时之需。。 51Testing软件测试网 XI;AT G9]Ft

1.runaction后面能不能接变量(动态调用action,所以从数据库取数据做action名字了,但是调用总是找不到)? 51Testing软件测试网x5Fj&O(x L0N

 A:脚本中原有RunAction "testbase [case1]", oneIteration51Testing软件测试网)iWcn$ca;C_

   把引号中的内容放到Global表中的第22行,然后将代码修改为:

T @R6nR"D!FRS0

   datatable.getsheet("Global")

%RUCSR2K0

   datatable.setcurrentrow(22) 

` bkm U0

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

.?k^!V-Y}"Y0

   RunAction strLogin, oneIteration   

m0gG'BmF0

   help中也有相关帮助51Testing软件测试网h3P*DGG

   :51Testing软件测试网ewTL,Q-`y'M'{

   Syntax51Testing软件测试网if:TC!t

   RunAction ActionName, [IterationMode , IterationRange , Parameters]

X#Me tY"_0c$Q7Q0

   ActionName : String : The name of the action  

m"r ldm2pV uq0

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

_.j/qS-p0

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

,Ut_q!y0

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

wi\ E6x8e bn$oVy1b v3O0

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

!f:]C@ |dJ_ t0

   QTP8.2本身提供一个工具TestBatch Runner但是运行完没有报告。51Testing软件测试网+~7{&^4q/i.Q

   MI有另一个工具叫MTMmultitestmanager 

%e3{$f@R J0

 51Testing软件测试网${$Xt(f{;O9@+v

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

   可能有两个方面可以解决这问题1、每个动作设置延迟时间2、设置为用别的浏览器。)51Testing软件测试网jz!P T3Z)v T6NH

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

'a'C(D\MxY+k0

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

#Wq'Aa!k0

   2.可以安装插件添加新的浏览器51Testing软件测试网wy)W8V2zU'W:n

      SystemUtil.Run "file” "params" "dir" "op'' "mode"51Testing软件测试网.?7zLdi

      QTP运行可执行文件的方法及其参数51Testing软件测试网Ix-f1vEH A

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

w E7U+x'~2F0

6.checkpoint检查网页,是否能实现只要网页出现乱码就返回错误报告?51Testing软件测试网L7z7KT |Q3mgt Wh

 A:Text not displayed能解决问题51Testing软件测试网]+j {/~Y)T

   关于Text Checkpoint的总结。51Testing软件测试网){8L;G7iG ?+vls

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

4MTcq1o.FRW G0

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

pkhq_w:~/})qx0

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

V~,kA.db;a0

7.WSH的应用方法51Testing软件测试网@$s-AA,i

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

在这种情况下,只好采取一种折衷的方法:给大家推荐几个脚本文件利用WSH执行任务的实例,希望大家能通过这些例子对WSH的使用有一个初步的认识。 51Testing软件测试网2B1M,k$U~;Mg7kQWE

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

打开记事本编辑器,在上面编写如下内容:51Testing软件测试网$Q H`-`.e`-ZI

  Wscrīpt.Echo("走近WSH")

J%wH/I}~;|}*~1vm6j0

  将它保存为以.vbs.js为后缀名(千万不要写成了.txt)的文件并退出记事本。双击执行这个文件。51Testing软件测试网H;n8d:f%j_x;q b {

  这一次,我们要利用WSH完成一次创建十个文件夹的工作。代码如下:51Testing软件测试网 dK2A5{xIE1L2E

  dim objdir

@.QpC*V&? C0B0

  setōbjdir=wscrīpt.createobject("scrīpting.filesystemobject")

^nN Yr7~0

  for k=1 to 10

7d^h a&mT0

  anewfolder="c:\chapter" & k51Testing软件测试网 qy}Pf

  objdir.createfolder(anewfolder)

C`#`#Qs0

  next  51Testing软件测试网W*eu EGb atrz

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

-h0Z5P,k HXt+W0

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

;S*A h UEB/K0

  Const ADS_SERVICE_STOPPED = 1  

5g_r:vm,G*_Gf@0

' get an ADSI object for a computer

m%jE9P3G c^/{~-N0

  SetōbjComputer = GetObject("WinNT://MYCOMPUTER,computer") 51Testing软件测试网'@FiFNnP

' get an object for a service

~-E9AlB5G0

  SetōbjService = objComputer.GetObject("Service","MYSERVICE")  

!?U-ZM?G H;@{m W0

' check to see if the service is stopped51Testing软件测试网h#R2kb#v)]2W"m

  If (objService.Status = ADS_SERVICE_STOPPED) Then  

a5c])l-mb3{8^P aB0

' if the service is stopped, then start it

-A O:bely6y*|0

  objService.Start  51Testing软件测试网#Vh,v V6WCtp

  End If  51Testing软件测试网LJ!le])u*A

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

"q^kR-_6e^V.ho0

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

uYvS T |G9}0

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

yR H4K5X3TOm7d0

8.EXCEL中导出数据进行测试  51Testing软件测试网&\/bU qeOt

datatable.AddSheet("51sheet")51Testing软件测试网%M5FW!No8uj,_

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

i{/m6Piucw\0

Dim i,RowCount '定义两个变量51Testing软件测试网#g],O {|p

i=051Testing软件测试网Nro.Zx@Gq

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

msgbox RowCount51Testing软件测试网"fk1y.chV q+H

Do while i<rowcount

{ s1X7k \5I|0

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

)S,w!X9wNbo.z*z(C0

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

b._8\Q+paz0

datatable.getsheet("51sheet")51Testing软件测试网X7?H*x5IJ!N

datatable.setcurrentrow(i) 

)[_[0_9e lS0

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

V_'I5^tX!i0

tempData=DataTable.GetSheet("51sheet").GetParameter("Name").Value                 51Testing软件测试网9kT5TW8H5qLKK

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

S#P~-S5~M|0

'得到的是第二行的值么?51Testing软件测试网9I;?)R{'X-B2YIx8[0T%j#_]

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

].~V5@;jUi0

'下面我们用另外一种方法来得到。51Testing软件测试网fb&mM8Y#wS

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

n:EV\&~Rd5^m#K0

loop  

.t*A H;Q#ea k'Vfe0

9.关于dtGlobalsheetdtLocalsheet 51Testing软件测试网#oa+Mp"L

1) dtGlobalsheet只有一个,它的index值比较特殊,它有两个index值,一个是1还有一个是内置的默认的100051Testing软件测试网v@g G2v#IQP

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

2~/z[OC*K-}0

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

+yA3U:\*v0

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

j2w)J.`%k4}0

3) datatable这个对象只有一个。就是所有sheet的集合。或许你把它理解为excel文件比较好。51Testing软件测试网{#oi%e[o]0G#o

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

M_)iPJ FS @|'|Q0

这些action也分别对应有各自默认的LoaclSheet.即:actiion1actiion2actiion3  51Testing软件测试网@5UB8K!l4b1|e"j b

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

10.移动当前位置的行  

/?i~8IKon0

For i=1 to 351Testing软件测试网M"E y1?XN7{#] ~

datatable.getsheet("Global")

9\ }-yX([R [0

datatable.setcurrentrow(i)51Testing软件测试网'e:` ~ i-w,x:S'uA

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

4ogB fz#r0

Next 51Testing软件测试网d_H'E%N@)Qx*e$z

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

Ki*pMu3[W0

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

PZ~6v:c@?!P5B0

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

WM$f)q'R0

       其它就要手动输入了51Testing软件测试网xm)Y1k&b/t%b"p

3.自动测试实施计划51Testing软件测试网4W_rP.oEz

  1)分析实施自动化测试可能存在的风险:就是决定是否实施,用成本时间效果。。51Testing软件测试网rWQ e@a

  2)制定实施的时机:也就是在什么阶段51Testing软件测试网 H(g dhgCt5C

  3)研究所要测试的功能性能51Testing软件测试网tO+gC${V i!f

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

raZg/uD2Q#q;H f0

  5)预估所需要的人时和相应的硬件51Testing软件测试网zW7kbS Y3v Q

  7)确定负责人员和相关测试人员51Testing软件测试网7\`0t`tF

  6)制定详细的测试计划方案51Testing软件测试网['n}FT:H6R p%}s1I

  7)最后是执行计划  51Testing软件测试网-fd Jx/m3C+He5v

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

  例如:51Testing软件测试网;zY&n bHR

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

Ry6WA3d0

  'Action_A51Testing软件测试网TiDn+E

    Public strURL   

s m|u{gD-c1w0

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

'p4E4Y.]0H0

   Function QueryList()

&G*hHx]!R#h0

       ...... ......51Testing软件测试网X%kj4Y qDlF

       ...... ...... 51Testing软件测试网t:|B(EqX

   End Function51Testing软件测试网5P"]"z9X3Iv

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

["vN\R$v'|e"W0

  'Action_B

*];O#WYo#Bj0

  '如何调用QueryList函数和strURL

W9hlPAWt0

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

&PI2X9]f9k A0

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

N-e_+^:s0

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

Su9rH3c9Y@`?0

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

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

L/ZGaZ Nf0

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

^-X n!Rbb:W0

 51Testing软件测试网A){D-n'`b$@-Ct#F

其实第一种方法是基于版本控制来进行的,第二种方法是基于用例管理进行的51Testing软件测试网,VK8D!E,\&W)f8o

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

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

g7m j'N9N?D,w8v#G F0

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

@R7f6a0Nj2q `N_0

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

D;C"vP'Rs A,}0

    TOOL---OPTIONS----Ative screen51Testing软件测试网Nq Y,E7^O7};e

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

]6HrP%M C$H(g0

17.如何参数化link 51Testing软件测试网%I~tgy

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

0Q I.v.BB!_8w0

Browser("Browser").Navigate "http://www.51testing.com/cgi-bin/index.php"51Testing软件测试网x;I[c"Mi {0i

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

5D!J.E Cc&kU&W X0

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

Y?n'G}M_p0

Dim i,j, arr()51Testing软件测试网*c+A;L P"k1i'm

i=051Testing软件测试网O)J J-a:c#M)`

For Each element in tags

GVj2O%G$h x0

   If Ucase(element.tagname)="A" and left(element.InnerText,1)="[" Then

3fu&u"U#\-CE%U0

                       ReDim Preserve arr(i+1)51Testing软件测试网K6y9f D;\,~H X6r"d

                   arr(i)=element.InnerText

:[f{.yB}zS0

   i=i+1

$q/\-g;YQ0

       end if

|*CNp*y(d1E'{SuVp0

Next 51Testing软件测试网@0u~ |8m&u

For j=0 to i51Testing软件测试网8{$C nKW$@

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

O2DSR d M%OP#@0

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

? B;K;W/{0

                       Browser("Browser").Back51Testing软件测试网/C^yvMcB

Next  51Testing软件测试网d1WCF"N!i__2M

这段代码先是打开一个空的页面,然后输入url.51Testing软件测试网Wk%|;~FD c D

到达论坛首页。 51Testing软件测试网+Sb+vnP

然后得到所有版面的名称,也就是link的名称。51Testing软件测试网:FM"o'vH]0o+xr

存到数组里面。

m*[L H+S/[N+pq0

然后使用SetTOProperty更换录制时候录下的link的属性。

V0K O1fKs4R]X0

这时候再click  

Z_ck/R o f"K$y0

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

3I.i1D}:n0

A:如果你的目的是在debug过程中修改已执行过的命令,可以在Debug viewCommand中执行命令,如重新执行已经执行过的命令,修改变量的值等等。 51Testing软件测试网9O0Rq+^,Q\,{"pv

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

e%\7vf'y [ ZcRv)n Y0

已经执行,如果现在想修改“51testing”为“testing”,可以在command中执行51Testing软件测试网#@q{xW7C.dN!Y6l

Window("Flight Reservation").WinEdit("Name:").Set "testing"  51Testing软件测试网SP(F6M5GFIk

19动态变化值如何获取 51Testing软件测试网P.L?8?!beNoY*G

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

;|E'X;oFP V"j0

Browser("欢迎使用我的工作台").Page("欢迎使用我的工作台").Frame("managePlace_7").WebRadioGroup("userAccountId_0").select val 51Testing软件测试网;|^;E%@H

20.如何一一获得Table某栏linktext?51Testing软件测试网.[ q+KWN Y T7e c

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

&`cdH+m0

//////////////////////////////////////////////////////////////////////////////////////51Testing软件测试网(W` W([r%GN

Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Image("Tplus").Click51Testing软件测试网SbO1Cq(f:}!s

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

;v ?l0d,p3e,K?0

Browser("Login").Page("Page").Frame("contents").ViewLink("treeview").Link("开课设置").Click51Testing软件测试网 NL ?)C _ T

Browser("Login").Page("Page").Frame("main").WebList("drpStatus").Select "任意"51Testing软件测试网(kSiaX}?n

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

2y"pY(e;A ^0

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

9m,ob;cS i+H({.f Oy0

 51Testing软件测试网'~.Mp2L.t.N$dp

Dim finded,findCode,Nowout51Testing软件测试网:_+I2Q a3q8H

'define a constrat for find51Testing软件测试网#Kt3o4{;Jq-R

findCode = 110901  

bZ!j'Y `i0

finded = false51Testing软件测试网5f f3U JJQE R

 51Testing软件测试网0v8p4@i+f*x2C

Function MaxPage(pageString)51Testing软件测试网(c7{9Z?"e8B)^

  'msgbox pageString51Testing软件测试网|3i%sx]/]k

  Dim ilen,i,j

r U1Y3?2?5JC+H0

  ilen = len(pageString)51Testing软件测试网qh!Eiqox5yZ$f

  i=ilen

R{ ?%Tn]p0

  While i>051Testing软件测试网bH*D-u"yB~

       j = mid(pageString,i,1)

E(TZ#I3M'Zr~;F0

          'msgbox j

:\$X R3c8m }z_L0

          If instr("123456789",j)>0 Then51Testing软件测试网%b1S#f gNlC:wO5E#\

          MaxPage = j51Testing软件测试网3j f n\.A l,N^:]

                  'msgbox MaxPage

Q[ q'`5h.L0

                  Exit function51Testing软件测试网u.l^^ FzHt

          End If51Testing软件测试网+^*joBp?6^t

          i=i-1

|;a'Y)JFR,Z0

  Wend

R}8thM%T0

End Function

+x-A a"Vp0

 

2Z w_Rv X0

 

y@7u,y J$[5s,u0

Dim trowcount,maxp51Testing软件测试网0N2U0Q2r[K4UC

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

r+}7oz}P&KK x0

msgbox "Rowcount: "&trowcount

s,p-h \/]'{ b\#B3\0

Nowout = Browser("Login").Page("Page").Frame("main_8").WebTable("开课代码").GetCellData(trowcount,1)51Testing软件测试网(h6u3Og]~F

Nowout = trim(Nowout)51Testing软件测试网r!O1s)H}EZc

maxp = MaxPage(Nowout)51Testing软件测试网PNWX}M \

msgbox "max page: "& maxp

G1}i9o xsj*EIj0

 

gV1GS/M#SwC%p0

Dim nowPage,checkid51Testing软件测试网k6~,k~g K#b,Q P

For nowPage = 1 to maxp

{d~e)w*S r0

  If finded Then

\6EJ.i0G+G0

          Exit for51Testing软件测试网7J(o-ckp~

  End If51Testing软件测试网3W Q y&T:W)cU4[

 ' link to the当前所需page51Testing软件测试网M`4v&p] L&U6U!C

 If nowpage>1 Then

Kw#W.C hEL x0?0

   Browser("Login").Page("Page").Frame("main_8").Link("[2]").SetTOProperty "Text","["&nowpage&"]"51Testing软件测试网 [!m5zMDS'Y^

   Browser("Login").Page("Page").Frame("main_8").Link("[2]").Click51Testing软件测试网n+y%aV|%[M

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

a e S#x7\6_0

  end if51Testing软件测试网|;\ b+MU6\3uGD

 51Testing软件测试网b,H4@!X|7uw[ r8t

 ' Get the rowcount of table in now page

a0NQ k)kK%R4C0

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

!DBZ'lg [0o0

  msgbox "Rowcount: "&trowcount51Testing软件测试网d beTGPv/N3Z1Tt

 

#A_9Ka0@:o D:E0

 'link every record in the table of the page51Testing软件测试网8z,d!YUiF(s

  for i = 2 to trowcount - 2

:f@v:ZL-D O0

       Nowout = Browser

D%n#?cq Hd7U,iJ!TC0

TAG: 功能测试

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

评分:0

我来说两句

Open Toolbar