不要追求绝对的公平,红尘之中没有公平而言,人活一世,难得糊涂。                                           it is no use doing what you like, you have got to like what you do.

Robot 的自动化功能测试框架

上一篇 / 下一篇  2007-01-09 11:11:07 / 个人分类:Robot技术

1. 前言

测试本身就是一项异常艰苦的工作,而成功的进行自动化的功能测试,对很多软件开发组织来讲,更是困难重重。本文介绍了构建在IBM Rational Robot基础之上的自动化功能测试框架,来帮助组织更好的进行自动化的功能测试。

)W*^E:gn0

2. 现实的挑战51Testing软件测试网@ x"s!x[

2.1 自动化测试的迫切需求51Testing软件测试网U`%i"X/g(YX ~

随着业务的变化,软件产品的种类越来越多,软件产品的升级越来越快,在很多的软件开发组织中,测试部门承受着巨大的压力,他们一方面要测试越来越多的软件产品,一方面要应对越来越短的测试时间,同时,还要面对捉襟见肘的测试资源。

_$G L@WP0

每 个版本发布都包括新增加的功能和已有的功能,已有的功能已经在以前的版本中进行过测试,但是还需要在此版本中执行回归测试。在这种情况下,测试部门往往会 考虑到,既然回归测试的测试用例都已经存在并且已经在上一个版本中执行过,那么在新版本中能否自动的执行这些测试?如果能这样的话,将极大的节省时间和资 源,将有限的资源投入到新功能的测试上,缓解测试的压力。51Testing软件测试网*fu9bx6r~ d[

通常情况下,软件开发组织会使用自动化测试工具,使用录制回放方式来进行功能测试的自动化。但是录制回放方式并不能解决全部问题。51Testing软件测试网q/Oi&@ C

2.2 录制回放中存在的问题51Testing软件测试网|rOg%Z-t

业界的经验表明,虽然录制回放方式能够快速的生成测试,但是仅仅单纯的使用录制回放是不够的。51Testing软件测试网+Fl(M$pI w9E Jh(Ns

首 先,也是最主要的原因,就是使用录制回放方式,往往需要耗费时间和资源来调试、维护脚本。这些工作量随着脚本数量的增加,可能会增大到几乎不可能再对脚本 进行有效维护的地步;其次,使用录制回放方式,要求应用已经开发完成并且在录制中不出现错误,但是往往当应用达到此条件时已经没有足够的时间进行测试;最 后,使用录制回放方式,要求每个测试人员均会使用测试脚本语言“编程”,而当前大多数软件开发组织测试人员专注于业务,往往没有兴趣和精力来“编程”。

W|:?#DP8r0

所以,录制回放方式并不能解决所有的问题,在自动化的功能测试上,需要有测试框架的支持。51Testing软件测试网&i4Ia l8a%P,IB

3. 解决之道

a8Uz1Kj+{({eun6r1C"E0

3.1 概述

c"C:y nYz`_0

IBM Rational Robot是一款优秀的自动化测试工具,自动化功能测试框架是基于Robot之上构建的。如下图:

(Mm(W Z.d4Zml3b _C0

图 1. 基于Robot的自动化功能测试框架51Testing软件测试网%d-fCC8El

51Testing软件测试网2x z8?*qd P
 业务测试人员类似于当前软件开发组织中使用手工执行测试的测试人员。可以看到,在解决方案中,除传统的业务测试人员外,增加了技术测试人员角色。技术测试人员偏重于自动化测试相关技术,实际上并不直接执行测试。

解 决方案的核心是使用Robot的SQABasic脚本开发的Robot测试技术框架。此Robot测试技术框架以表驱动为指导思想,读入动态结构,解释并 执行动态结构中的每一项,是自动化测试的引擎。同时,为了提高Robot测试技术框架的易用性,在解决方案中还包括测试设计工具,它是使用其它编程语言, 比如JAVA、Dephi等开发的应用程序。在测试设计工具中,测试技术人员首先建立和待测试应用一一对应的静态结构,此静态结构以页面为单位,随后业务 测试人员从静态结构中选择不同的页面,组成测试动态结构,即测试用例,随后,此动态结构被Robot测试技术框架读入并解释执行。51Testing软件测试网 s0KbVa

3.2 Robot测试技术框架51Testing软件测试网&A}JGU|'hk z

3.2.1 表驱动介绍

zB H0`@6tvS0

Robot测试技术框架是基于表驱动测试思想。表驱动测试就是预先在表中定义清楚代表每一步执行操作的关键字,然后由脚本读入表中的每一行,根据关键字来执行对应的动作。以CQ Web登录界面为例:

FQ V,Rn ^N0Y#s7{0

图 2. ClearQuest Web登录界面51Testing软件测试网0X:];uI@$E H

 
+mT iR _5RjF1Y(m6Q1M051Testing软件测试网3u2S*Ye%~4aA(g-_0w c
 当要自动执行“登录”按钮时,可以如下图来定义此表:

登录

%jB|5?!c0

然后在Robot的脚本中,打开表,读入此行并执行。这样的话,Robot便去点击界面上的“登录”按钮了。

,O3~w t;W/v0

'打开文件
T0I`mK Y4L]"K?0Dim sData() as string
M^ nQCcips~}X`0InFileName = getExcelFileName51Testing软件测试网7tk*z&~3]+b%I6j
ReadExcelData InFileName, sData()51Testing软件测试网 }U?#~e!m

===============================

E'@"T-@(sj0

‘解释并执行
"KW3{Q-QQr^0Select Case (sKeyWord)
U A)hQ6pAJBE,Y0Case "登录"
B0D@4y'H6L4@Z0Window SetContext, "currentwindow", ""51Testing软件测试网{kf(i:e
PushButton Click, "Text=登录", ""51Testing软件测试网"vZCMU|Y7i

以上是表驱动的简单示例。在自动化测试中,基于表驱动,还需要解决以下问题:对象识别、验证点、数据池、分支执行、数据关联、日志记录、调用其它脚本、脚本结束。本节将分别展示其在Robot测试技术框架中的实现方式。51Testing软件测试网p:s x-IjZr

3.2.2 对象识别51Testing软件测试网8ke5Cl2D

根据IBM Rational Robot识别对象并执行操作的要求,如果要让Robot找到界面上的对象并执行相关动作,需要给Robot指定每个对象的对象类型、对象标志、执行动作和数据,如下图所示。

A%kbC1S-Fqa0

图 3. 为Robot指定每个对象的对象类型、对象标志、执行动作和数据

Y.WJ8S,x_1vA;}D0 
FZ-U mEn;|}c0 以按钮举例来讲,如果要让Robot自动点击某个按钮,那么首先要告诉Robot需要在“Button”这种类型的对象上进行操作;其次要告诉 Robot,在此类型的对象上要执行什么操作,比如click;第三要告诉Robot要click那个具体的按钮上,比如要click“登录”按钮。
51Testing软件测试网3@7hG c`Z
 在Robot测试技术框架中,相应的处理为:

'打开文件
)SX*B l0Qe0Dim sData() as string51Testing软件测试网 K"@,eZ8v#~+`
InFileName = getExcelFileName
.I$Y%D.vsxp.f0V0ReadExcelData InFileName, sData()

$K a}me d\eT1a-`0

===============================

$Ql4O.Fl0

‘对文件中每一行51Testing软件测试网;u*Y |k"HyW9t} u(G
Select Case (sObjType)51Testing软件测试网 ~-_@L$v
Case "Button"51Testing软件测试网-s$MW;c6J#f:`z Q
ProcessButton(sObjAction, sObjData, sData)51Testing软件测试网Zk9_7`~rsu
Case “EditBox”
4^)o8ve;i? V6]tj0ProcessEditBox(sObjAction, sObjData, sData)51Testing软件测试网 z$S7y5\ i-b)n
Case “ComboBox”51Testing软件测试网 k;PUN8PtC
ProcessComboBox(sObjAction, sObjData, sData)51Testing软件测试网.B"i#dV2N f/?_:R0aJm
Case “RadioButton”
&j&[1ak#u9y0ProcessRadioButton(sObjAction, sObjData, sData)51Testing软件测试网 RHTa&E{5KJfL6P
51Testing软件测试网4}4i$q8Wg2z
===============================

@,ES'\:w8H7SL-`0

‘对按钮执行的动作
z"vu7L0h0Select Case(sObjAction)
'M2Y`i+Hs0Case “Click”
U9_hZw}y0Window SetContext, "currentwindow", ""51Testing软件测试网/zU$ko\{[(}\J]
PushButton Click, "Text=" & sObjData, ""
Rpu9i+i)zWY0VA,q0
V2t/J @9TE0===============================51Testing软件测试网Y ~(\9sh2t"\

‘对文本框执行的动作51Testing软件测试网8M4Ss|q#Y
Select Case(sObjAction)
\ pzh Kq/Z Q,[:~0Case “Click”
Qi `/`[/e:} e(g.L0EditBox Click, "Name=" & sObjData, ""
W,jY5c"f2D)e'oF0InputKeys "^+{HOME}{DELETE}"51Testing软件测试网~;L@/T3pM-L @
InputKeys sData
kvp!M ~|/_"yW0===============================51Testing软件测试网b3nd:Oa%D)e6vr

‘对组合框执行的动作51Testing软件测试网;U ZL}#Z6@"vL
Select Case(sObjAction)
q5D/u8{T}1E1l0Case “Click”
/?;D:Qs kvH|z0ComboBox Click, "Name=" & sObjData, ""
Q#Mtd%u2[L]$e0ComboListBox Click, "Name=" & sObjData, "Text=" & sData51Testing软件测试网0I%tAW~#L2L$n

===============================51Testing软件测试网%gZX+\/]

‘对单选按钮执行的动作51Testing软件测试网6Ed5|'Jd1oh
Select Case(sObjAction)
V,l|DPv n^(^0Case “Click”
'wPF]Y2O,R0RadioButton Click, "Name=" & sObjData
XOm2@^g5HO&I051Testing软件测试网'x!y9jR;Pv]

要强调的是,以按钮为例,虽然在表中需要为界面上每一个具体的按钮定义一行,但是在测试技术框架中,所有按钮处理的代码都是一样的。51Testing软件测试网 JwB!FIT

3.2.3 验证点51Testing软件测试网5k AihL8G5A

没有验证点的自动化测试就不能称之为测试。从这句话中就可以看到验证点在自动化测试中的重要性。对于验证点来讲,因为不同的测试、不同的应用验证点都不相同,所以Robot测试技术框架仅仅提供了扩展的机制,不同的验证点可以通过扩展机制加入到测试技术框架中。

V1vo"tW.~7\|R0

加入验证点之后,表的定义如下:

C^"M1P)W!mL0
'B3[4{P5W.n0 最后一行是加入的验证点。所有的验证点其对象类型均为VP,不同的验证点有不同的对象标志,上表中的验证点是VP_SUM,验证点的基线数据为24。

在Robot测试技术框架中,处理如下:51Testing软件测试网 HP|h6T @q

‘对文件中每一行
-I.\q$~e/Z2c3ZI0Select Case (sObjType)
qm8{ V hvi0Case ……
V9WZ!A&s*c k0Process……51Testing软件测试网ob ||5X&s y`2_
Case “VP”
e8I&O,p'u-de%?Y D0ProcessVP(sObjAction, sData)51Testing软件测试网j:a(eR4U a{$d0s
51Testing软件测试网X:{0b0p v8ri.gTt
===============================51Testing软件测试网o i!pu6@'I:vz

‘对验证点执行的动作
8O6s8\ST2w0g_VP_SUM_Baseline = sData51Testing软件测试网:h1a~!GA%n,EUw d
Callscrīpt sObjAction51Testing软件测试网l.u2Qq#I;d-L6X

===============================

8l Ih+s5[ ]fO0

‘验证点脚本的处理
t.v7xf$[0sData = g_VP_SUM_Baseline51Testing软件测试网2j&? T:R7tJ
SQAGetProperty “”, “”, sActual
H\2?P&[%F0if sData = sActual then51Testing软件测试网4Y-xl/N]j}
……
bIu&iv$S\0else51Testing软件测试网\-U4\ a$f
……51Testing软件测试网3Kz/Q@ \C,~\-q
end if

8K z+uH b~0l`0

将 验证点的基线数据放入全局变量g_VP_SUM_Baseline中,然后使用Callscrīpt函数来调用验证点的脚本。对每一个验证点单独的创建一 个脚本文件,脚本文件的名字和验证点的标志相同,都是VP_SUM。虽然各个验证点脚本的内容都不相同,但是一般的步骤是首先从全局变量 g_VP_SUM_Baseline中取出基线数据,然后使用SQAGetProperty函数从界面上取实际的数据,再比较实际数据和基线数据。

hI2O"vY vL0

3.2.4 数据池

`(f6n StI0

往往需要使用不同的数据来运行同一个测试,在自动化测试中是使用数据池来实现的。数据池的增加比较简单,就是往表中增加表示数据的列,每一列代表一次测试执行所需要的数据。如下表:51Testing软件测试网 L g$HH*Y0r)Nox
 从上表中看到,“数据1”这一列代表一次测试的执行所需要的数据,“数据2”代表另外一次测试的执行所需要的数据。51Testing软件测试网;ov{&XTd.wX0v,v2@pD

在Robot测试技术框架中,加入循环,按照数据列的数量来进行循环,每一个循环均从第一行执行到最后一行。

)E4H8g?3U|b(p?0

3.2.5 执行分支

lR Q G7YZ0

在 测试中,往往是同一个业务或者功能,但是因为输入的数据、选择的条件不同,而具有不同的执行流程。执行分支的处理比较简单,就是在相应的数据列的位置上, 填写代表忽略的特殊标志,比如“IGNORE”,当测试执行到此动作时,判断其数据是否是“IGNORE”,如果是,就不执行此动作而到下一个动作。对应 的表如下:
!LD"K _ _F+J R8Ip0 从上表中看到,第一次执行会执行VP_SUM验证点,但是第二次执行,因为验证点相应的数据是“IGNORE”,所以就不会执行VP_SUM验证点。51Testing软件测试网&tV p+[.X&^

在Robot测试技术框架中,在每次执行动作时,先判断其数据是否是“IGNORE”即可。

QM [ vZ b9BO0

3.2.6 数据关联

]w@x `7Sr0

在测试中,需要处理数据关联这种情况。数据关联是指前一个动作执行完成后,应用产生新的数据,此数据在随后的动作中需要用到。因为这些数据是在执行的过程中由程序产生的,所以没有办法预先在表中准备。在这种情况下对应的表如下:51Testing软件测试网OFVlT8h
 从上表可以看到,首先使用DC_GETID来将要关联的数据取出来,然后在需要使用此数据的地方,再使用DC_SETID赋值回去。

$`u-zw.r0gLA0

在Robot测试技术框架中,取数据的处理如下:51Testing软件测试网7R'hgj6K

‘对文件中每一行51Testing软件测试网 p#|0c\/sZ3p)k3ki
Select Case (sObjType)
f4LO;z7p4^|0Case ……51Testing软件测试网$FY;Ec(m}
Process……51Testing软件测试网Ow7f;iB{hT,k
Case “DC”51Testing软件测试网%v"Sb8r6W? KW
ProcessDC(sData)

y;oCHI;O,q7D*c"e0

===============================

,UylH v|9S/_HM0

‘对数据关联执行的动作51Testing软件测试网.R!k%I0dc#^al
Callscrīpt sData51Testing软件测试网-W T? ~&V*t-f&q;T

===============================

7J,{$J9qvq9x@0

‘数据关联中,获取数据脚本的处理51Testing软件测试网LR({b6P
SQAGetProperty “”, “”, g_DC_ID

@9M's{a;oyp!A0

对每一个数据关联,取数据单独的创建一个脚本文件,脚本文件的名字和数据关联的名字相同,都比如说都叫DC_GETID。虽然数据关联取数据脚本的内容各不相同,但是一般的步骤是使用SQAGetProperty函数从界面上取得数据,放入全局变量g_DC_ID中。51Testing软件测试网#vL|c$O&?ffHs2cC

在Robot测试技术框架中,赋值回去的处理如下:51Testing软件测试网)B(r9Zs]4q&@

‘对文件中每一行51Testing软件测试网kT:e+F!@)G)S
Select Case (sObjType)51Testing软件测试网OQ-N0x-t P
Case ……
];C#VT&e'JFF/t)H H}0Process……
:H^ v&j)N1z@0Case “EditBox”51Testing软件测试网ntv$y2s8k _;a6zN
ProcessEditBox(sObjAction, sObjData, sData)51Testing软件测试网6U1Z$wAML m

$@WZS-y!Q5NI0===============================51Testing软件测试网pl#{IMED.hBs-k

‘对文本框执行的动作51Testing软件测试网 hNF2])Y f H0k
Select Case(sObjAction)51Testing软件测试网6{-X!~(N!F)t'h
Case “Click”51Testing软件测试网4M.Yb3T x,m.eE
EditBox Click, "Name=" & sObjData, ""
;XD(^R)lH$t rKs0InputKeys "^+{HOME}{DELETE}"51Testing软件测试网6kQkJni5R
InputKeys g_DC_ID
@H%Z8`+_w1OW @0

'U-a%GZqsd4q0

即从全局变量g_DC_ID中取出数据,再输入到文本框中。

8mBm{ r0

3.2.7 其它处理

3xS9[4n3n9L~\-L0

其它处理包括日志记录、调用其它脚本以及脚本结束,相应的表如下:51Testing软件测试网}Dt$R%\#h

51Testing软件测试网x%];qT,YuK
 可以看到,在动作类型这一列,使用使用“L”代表记录日志,日志的内容存放在这一行的数据列中,比如上表中的“输入交易号”;使用标志“S”代码调用其 它脚本,要调用的脚本名称存放在这一行的数据列中,比如上表中的“Order”;使用标志“X”代表脚本结束。

在Robot测试技术框架中,相应的处理如下:51Testing软件测试网f}-\c,e!w

‘对文件中每一行
S(T"M7^$U l(J0Select Case (sActType)51Testing软件测试网Pmh;Lo](F$L
Case “G”51Testing软件测试网;dC4}oRu
Process……51Testing软件测试网o;s1q9z+K(?7} iK
Case “L”
x%O2z_:YN0Log(sData)51Testing软件测试网-jqH%o7X
Case “S”
~'Yt-k }&yY0Callscrīpt sData51Testing软件测试网Q+n.\O xV"|N
Case “X”51Testing软件测试网ZCH\3]buR
Exit51Testing软件测试网ufvP:g7}WwV

oIj7u7O2A@'`03.3 测试设计工具51Testing软件测试网E ?;k"fI X4h L a

测 试设计工具的最主要的目的就是为了提高Robot测试技术框架的易用性,帮助测试人员生成表驱动所需要的表。另外,测试设计工具通过使用数据库,能够在工 具级别为测试重用提供支持。测试设计工具主要包括两方面的功能:供技术测试人员创建测试的静态结构;供业务测试人员创建测试的动态结构。51Testing软件测试网$P baz8Knq

测 试的静态结构要求和应用保持一致,以页面为单位。即应用中各个功能的层次结构是如何来安排的,就相应的在测试设计工具中按照这种安排来建立静态结构,直到 每个页面为止。这样来设计的好处是:首先,静态结构和应用保持一致,将来应用发生变化,比较容易定位到静态结构中需要修改的地方;其次,建立静态结构,应 用是什么样子,就建立成什么样子,照搬即可,不需要很多的业务知识,比较适合于技术测试人员;最后,静态结构和应用保持一致,将来业务测试人员设计测试的 动态结构时,能够方便的根据应用在静态结构中找到相应的页面。51Testing软件测试网L9u5\7tF$M"q

以下是已经建好的静态结构的示例:

t)Y*m"Xe7p5F0

图 4. 静态结构示例
5^[s,Y,v2g)@;U0 
?`4cP#R8@0 可以看到,左边是和应用功能组织保持一致的树形结构。点开“集团理财”节点,可以在右边的上半部分看到此页面中的元素,页面上每一个元素都按照 Robot技术框架的要求输入必要的信息,比如对象类型、对象标志、执行动作等。这些内容是由技术测试人员根据页面来输入的。如果不希望人工输入的话,那 么也可以开发相应的工具去解析页面,来自动的生成每个页面的元素,或者是使用IBM Rational Functional Tester(简称RFT)的对象映射功能,由RFT去页面上抓取对象来生成。

,U|P8a,sX&V0

测 试的动态结构和测试的要求有关。在创建测试用例的过程中,测试用例的每一个步骤,均是选自静态结构中的一个页面,将页面加入到测试用例中之后,还可以指定 此次测试用例要测试页面上那些元素。另外,在测试的动态结构中,还可以指定测试数据、验证点、数据关联等操作。当设计完成后就直接生成真正可以被 Robot测试技术框架所执行的表。

&k F"RH|~M1^0

以下是已经建好的动态结构的示例:51Testing软件测试网%}7J[%M:X#P"L

图 5. 动态结构示例51Testing软件测试网MO Lf(u
 51Testing软件测试网6P[+QII
 可以看到,左边是和按照测试的要求组织起来的测试用例。点开“票据托管”这个测试用例,可以在右边的上半部分看到此测试用例的执行步骤,比如第一步是 “登录”,第二步是“票据托管导航”,依次下来是“票据托管”和“退出”,这些步骤都是从静态结构中选出来的。当点击测试步骤中“票据托管”这个页面,在 下方将此页面的元素显示出来,业务测试人员可以为每一个测试元素输入数据、指定数据关联、添加验证点等。

Dmk,`)`'T5](T0

当业务测试人员设计好测试用例后,就可以将测试用例传递给Robot测试技术框架,又测试技术框架解释并执行。51Testing软件测试网U;\"N z.C`

4. 结论

g5m cJ0Q2g'|/`0

可以看到,使用IBM Rational Robot提供的强大功能所搭建起来的自动化功能测试框架,能够帮助软件开发组织成功的实施自动化的功能测试。

|#\Av[\'IL p[6x;s3L0

1. 通过重用已有的静态结构和动态结构,能够有效的促进测试的重用,并且在IBM Rational Robot的支持下,可以自动的执行这些测试

#LUR6{Vh^0

2. 通过使用测试设计工具来生成动态配置,可以看到除测试技术框架的SQABasic脚本外,不需要再维护任何其它的脚本,降低了脚本调试、维护的工作量。并且将来的维护是基于测试设计工具来进行,也降低了自动化测试整体的维护工作量

A u'x:ogt'L0

3. 通过使用测试设计工具来生成静态配置,能够做到根据界面的设计来进行配置,而不需要等到待测试应用完全可用,就使得及早测试成为可能51Testing软件测试网,WK%C%lC\9im

4. 通过支持业务、技术测试人员的分工,在测试技术框架中封装自动化测试技术细节,使得业务测试人员不需要自动化测试技术的相关知识,只需要通过测试设计工具,就能够简单、直观的进行测试的设计和执行,降低了自动化测试的实施难度

d@ Qd'_\L'z'?0

另 外,在实施自动化功能测试框架中,还发现两个有趣的现象。第一,因为可以去自动化的执行测试,所以业务测试人员更多的在使用测试设计工具,从而导致测试设 计在整个测试中所占的比重有显著的提高,有效的提升测试的质量;第二,因为统一、一致的界面操作方式、提示方式和表达方式有利于自动化测试的进行,所以也 间接的促使开发团队在设计、开发过程中更加注重界面的规范性以及界面控件的可测试性。

8Ld1]*d%~ ab0

TAG: robot Robot技术

 

评分:0

我来说两句

Open Toolbar