QTP关键技术(转)

上一篇 / 下一篇  2009-03-04 17:26:54 / 个人分类:qtp

一 对象识别及存储技术基本常识51Testing软件测试网6tPL)G r

51Testing软件测试网w!q!p L4eHD

51Testing软件测试网~9Ge)BP*kx\cb B

1)测试对象模型(Test Object Model)
8hs n8?7fI0        测试对象模型是QTP用来描述应用程序中对象的一组对象类。每个测试对象类拥有一系列用于唯一确定对象属性和一组QTP能够录制的方法
Pn|,M A*o%| m/a\5k0 51Testing软件测试网4pVi#r9h"@;u
2)测试对象(Test Object)51Testing软件测试网{8?zO8c)^V1zW S
        用于描述应用程序实际对象的对象,QTP存储这些信息用来在运行时识别和检查对象
4{D%ub[R,o0 
2`e,B4DBN{} lE03)运行时对象(Run-Time Object)51Testing软件测试网2_VH%_zF;[c
        是应用程序中的实际对象,对象的方法将在运行中被执行
+q@8Wq ^ |aw I9h0 51Testing软件测试网U iMk] x)`
4)QTP的录制过程51Testing软件测试网8UB U:t#G"zU]0fi
        A.确定用于描述当前操作对象的测试对象类,并创建测试对象
| J5zcke0        B.读取当前操作对象属性的当前值,并存储一组属性和属性值到测试对象中
~gD&| W1O0        C.为测试对象创建一个独特的有别于其他对象的名称,通常使用一个突出属性的值51Testing软件测试网'^W.I2a*v,}v1`)l U
        D.记录在对象上执行的操作51Testing软件测试网(LD7B-~X1HcIqJ
 51Testing软件测试网.pH*]4f3Zvr:h
5)QTP的回放过程
|$\r3Tf!}0V0        A.根据对象的名称到对象存储库(Object Repository)中查找相应的对象
V3Xlr/oj+@1o5E0        B.读取对象的描述,即对象的属性和属性值
}@q]0Y g0        C.基于对象的描述,QTP在应用程序中查找相应的对象
jF#|GA&S ]9Z%O0        D.执行相关的操作51Testing软件测试网qKj6lmqi;jj~1h
 51Testing软件测试网"SRV HS u8Bsqf
二 对Check Point的较为深入理解51Testing软件测试网g,d6iy i1J#C

51Testing软件测试网6Zei YB],s+j+{;l

1. 定义:51Testing软件测试网L(M)z.FG{
        将特定属性的当前数据与期望数据进行比较的检查点,用于判定被测试程序功能是否正确
a8z+[L.Oi*Q0        Check Point可以分两类:QTP内置验证点和自定义验证点51Testing软件测试网wA&O g f,gHVC F!v
 
Bo4d]d7YE{2N02. QTP内置验证点实现原理及优缺点
h5\CZ Tw:I0        A.录制时,根据用户设置的验证内容,记录数据作为基线数据
6e"m#d+dw4o3ExDD0        B.回放时,QTP捕获对象运行时的数据,与脚本中的基线数据进行比较
(Wo){m Mvo0        C.如果基线数据和运行数据相同,结果为PASS,反之为Failed.
5Rl,yw:@9s:_?H0        D.优点是 操作简单方便
MK4u/K&]w*v e P;Y0        E.缺点是 QTP默认的检查的属性有时不符合自己的要求,如希望得到检查的属性没有在里面, 而默认的属性不需要检查等。
R;X9RC*X+[f0 
'C'_its2O"|03. QTP内置验证点结果的应用51Testing软件测试网(kLvUzTV
        A.录制的验证点在没有进行调整前,仅仅是给出了检查结果是通过还是错误的51Testing软件测试网5_ a6y:{j
        B.实际的测试过程中,可以根据验证点的结果进行不同的操作
L#h5J3tr|4T0       If Window("Flight Reservation").WinEdit("Name:").Check(CheckPoint("Name:")) = True then
r0S5zIeb U*C'm T0              msgbox "oh, success!"
])L6W C(xt[0Else
v7cC$\Th0              msgbox "oh, failure!"
Z2jA7_^U3v0End If
6h-TJ K UEXW T4la0 
m ~4~7xF6G-\T r04. 自定义验证点的应用及优缺点51Testing软件测试网 }OT$e3VS;n
        A.使用条件语句对实际值和期望值进行对比,然后用Reporter对象报告结果51Testing软件测试网7CB:_ F]
       '检查Ticket Number
x&A J;[0@%F;z0If CStr(dbTicketNumber) = CStr(DataTable("oTicketNumber", dtLocalSheet)) Then51Testing软件测试网~d)dQ(RG@)W
       Reporter.ReportEvent micPass, "打开订单- TicketNumber", "期望结果是:" & dbTicketNumber & ", 界面显示实际结果是:" & DataTable("oTicketNumber", dtLocalSheet)51Testing软件测试网K~\_ K9v:J*E
Else
O;p F/D5V0       Reporter.ReportEvent micPass, "打开订单- TicketNumber", "期望结果是:" & dbTicketNumber & ", 界面显示实际结果是:" & DataTable("oTicketNumber", dtLocalSheet)
:WSX*a K3i@fy Vb?0End If51Testing软件测试网_PQri3}
        B.优点是 非常灵活,前者实现的所有检查都可以用此方法来实现;
8BwrnO~(_9C(v0        C.缺点是 代码量大,对测试人员的要求高。51Testing软件测试网 eER$rn
 
i%M#k0S\ab(W05. 对Check Point的深入理解
q(C Awu1c*bm`3\051Testing软件测试网4sAy ^j
        A.个人认为在比较简单的和有Active Screen的情况下可以使用QTP内置的Check Point,在比较复杂的情况下可以通过编程和使用Reporter来完成.
P E~*A)g#P0        B.在使用check方法时,必须先在Keyword View或者Active Screen中新建CheckPoint。否则无法对该对象进行check,系统报错说无法在对象仓库中找到此对象。如果插入检查点,系统会自动把相关的对象添加到对象库中。51Testing软件测试网N {B9t KzFi
        我认为检查点并不是一个实实在在的对象。因为你可以对同一个对象设置不同的检查点,可以把它的某个属性既设定成True,也可以设定为False。而对象库中的对象的属性值是必须依赖于对象的实际属性值的。如果随意更改有可能无法识别。还有就是可以针对同一个对象设定多个检查点。在测试窗口中可以看到这两个检查点的名称是区分开来的。所以我认为检查点并不是实际存在的对象,而是一些类似映射的东西。51Testing软件测试网$j[6d3VL7M9G
        尽管检查点并不是对象库中的实在的对象,但是它必须对应到对象库中的某个实实在在的对象,好像它的一个映像一样,而且在实际的操作过程中,QTP还是把它作为一个对象来处理的。
sa(@ONbnwGV0        因为我们无法像其他对象一样把“检查点对象”添加到对象库中,而QTP又认为它是个对象,所以我们无法在专家视图中直接添加检查点脚本。但是我们可以采用编成描述的方式来实现检查点的功能。
,V(} C+P7Y0        CheckPoint 是一个依赖于Object Repository(对象库)中的某个对象的“虚拟对象”。其具体含义是:如果它所依赖的QTP 对象库中的对象没有了,那么此CheckPoint 也就不存在了;这个“虚拟对象”的属性是从它所依赖的对象的属性中“抽取”出来的,它具有它所依赖的对象的一个或几个属性,但不能增加它所依赖的对象没有的任何属性。
$ZW^5a/g0        CheckPoint 是一个“虚拟对象”的重要原因是:每个Object都能在Object Repository找到它的Name、Class Properties,而CheckPoint 在Object Repository中就根本不存在。选择脚本中的某个对象后,在Object Property 的对话框里面有个Respository按钮,点击它后,你会看到此对象在Object Respository 的Name、Class 和 Properties。51Testing软件测试网 b:f8Dtz,O
        选择一个CheckPoint后,在CheckPoint Properties 的对话框里没有 Respository 按钮,在Object Respository中也找不到此CheckPoint的Name、Class 和 Properties(因为它在对象库中根本就不存在!)。

]5cYLJW9?051Testing软件测试网^e wv(l+R

------------------------------------------------------------------------------------------51Testing软件测试网3b-?o,PQ;A

jg(v5AG0一 对同步点的理解51Testing软件测试网P8r!?CJ[2B

3o)p,{PX3Gk051Testing软件测试网VUXj]:~%W

@3_]Y%rW(V)p,L0  1)QTP的脚本语言是VBScript,脚本在执行的时候,执行语句之间的时间间隔是固定的,也就是说脚本在执行完当前的语句之后,等待固定的时间间隔后开始执行下一条语句
elQfQ.{Z0 
)R UzO#^d7r/t%A0  2)问题:假设后一条语句的输入是前一条语句的输出,如果前一条语句还没有执行完,这时候将要导致错误的发生!51Testing软件测试网Sq p7vUe(n z
 
*s%k]mF4JB;Y^)Z5t0  3)措施:加入同步点、加入Wait语句51Testing软件测试网B,g%b g!n,b"[

51Testing软件测试网GG4f,N9rzn

  4)同步点Synchronization Point
8Zj t7Bi1D na1^%o D0  QTP脚本在执行过程中如果遇到同步点,则会暂停脚本的执行,直到对象的属性获取到了预先设定的值,才开始执行下一条脚本。
d~j%lg`[0如果在规定的时间内没有获取到预先设定的值,则会抛出错误信息。51Testing软件测试网DopZVfA
 
+iSeuF"v-A0例如:51Testing软件测试网&{ \^NoBP
  Window("Flight Reservation").ActiveX("Threed Panel Control").WaitProperty "text", "Insert Done...", 1000051Testing软件测试网6}v(kQ4ex#Z8QZ
  执行到上面这条语句时,QTP会暂停执行,直到显示”Insert Done…”,
u\WHYfd S0  如果在规定的时间10,000ms后text的值没有等于”Insert Done…”,则会抛出错误信息
~-HG+Xp5u0 
"mvy^S&A#xJ^A!d05)如何获取Synchronization Point
*Qq#x#sBt6B0       A.在Recording状态下,通过Insert è Synchronization Point实现
r Q wr w yA:l0       B.非Recording状态下,在Expert View下,通过Insert è Step Generator è Category(TestObjects)è Object(The Object you’reTesting) è Operation(WaitProperty)è PropertyName、PropertyValue、TimeOut分别填写"text", "Insert Done...", 10000

4yh!Z l N/zY-Q051Testing软件测试网2V ~v(`*r&ZJ$^ t'M.W

6)Wait51Testing软件测试网uY1E$Wy2YJ:};hE
  总的来说就是死等,比如说wait 10,当运行到这条语句时,等待10秒钟后,才开始再读下面的语句。所以说写脚本的时候一定要估计好时间,否则的话会浪费运行的时间,或者出现等待时间不足的现象。

MV-c0u.p1zL0

Sp5h.jg]^0二 并列Action间的参数传递 

!Lgu9el.Ggm1n+?^0

Mf ?.~ Sz0  思路:将Action1的输出参数,传递给Action2作为输入参数。
H9\ u/Q%RPI0 
*R@%su~3s2]0  1)创建两个Action,关系是并列关系,不是嵌套的.
lA2k8RwIq&n'~0           51Testing软件测试网N})O7II"~Z

'x&o EN`3}}s$]y0  2)右键Action1,选Action Properties,在Output Parameters中添加参数OutAction1,点OK51Testing软件测试网hr"d+nr?1j
 51Testing软件测试网2q qB y-CM
  3)右键Action2,选Action Properties,在Input Parameters中添加参数InAction2,点OK
%P%i*Z~"o+{ K0  
Ukq4v0r.en0  4)将Action1的输出OutAction1,传递给Action2的输入InAction2
a_+C s3s"E0 
RG/m y;[ Z"\1H0  右键Action2,选Action Call Properties,弹出Action Call Properties窗口;
-yx1mn5D0  选中InAction2的Value,弹出Value Configuration Options窗口;
)N:H/PIf7U0  在Parameter中共有四项可供选择,选择Test/Action parameter,51Testing软件测试网%uMD#h2D"n
  在Output from previous call(s)中的Action选择Action1,Parameter中选择OutAction1;
Oq7sG0f9S)^u)|0  表示Action2中的参数InAction2,是由Action1中的参数OutAction1传递而来。51Testing软件测试网mS(~we Hp)r

-\0t ~.RX(A/V0      51Testing软件测试网}:JVao y

  以上就完成了两个并列Action间参数的传递,Action2只能调用Action1的输出参数,而不能调用Action的输入参数。
 
三 嵌套Action间的参数传递
  参数传递思路:
  将Action1的输入参数InAction1传递给Action2的输入参数InAction2,
  将Action2的输出参数OutAction2传递给Action1的输出参数OutAction1。
  此文为Hollyzhao于2007年09月在http://blog.csdn.net/softesting 发布,夜深了,有点累~
  1)创建两个Action,嵌套关系,在关键字视图,拖动Action2到Action1下面有缩进的地方
    
  2)右键Action1,选Action Properties,
  在Input Parameters中添加参数InAction1,
  在Output Parameters中添加参数OutAction1,点OK
 
  3)右键Action2,选Action Properties,
  在Input Parameters中添加参数InAction2,
  在Output Parameters中添加参数OutAction2,点OK
 
  4)在Action1和Action2间建立关联
  右键Action2,选Action Call Properties,弹出Action Call Properties窗口;
  此文为Hollyzhao于2007年09月在http://blog.csdn.net/softesting 发布,夜深了,有点累~
  选中InAction2的Value,弹出Value Configuration Options窗口;
  在Parameter中共有四项可供选择,选择Test/Action parameter,
  在Parent action parameters的parameter中选择Action1
  同理,OutAction2的Store In值为OutAction1
             
  以上的操作就是把输入值 通过Action1的输入参数,传递给Action2的输入参数进行使用,
  然后Action2运行后,将输出参数通过Action1的输出参数传递出去。
  这里只是对嵌套Action进行最基本的讲解,在实际使用当中还要灵活运用。

TAG:

 

评分:0

我来说两句

日历

« 2024-01-21  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 224633
  • 日志数: 58
  • 文件数: 305
  • 书签数: 21
  • 建立时间: 2007-01-31
  • 更新时间: 2009-07-27

RSS订阅

Open Toolbar