在AC上开发和运行QTP自动化测试脚本
上一篇 / 下一篇 2010-11-25 11:42:50 / 个人分类:自动化测试框架
AC应用案例:金融系统自动化测试
对于金融业务系统来说,测试案例往往涉及到数据校验,交易确认,业务关联等等,手工测试执行起来比较复杂,更不用提自动化测试的实施了。这也是当前金融系统业界功能自动化测试程度不高的原因之一。51Testing软件测试网 Y]m8P:M[0Wst8K J
1 金融系统业务测试的复杂性
比如某个银行支付系统的转账案交易,手工测试大概的流程如下:
R)h5{:Y2`/E1T01.创建Test Account A和Account B,并在各自名下建立相应权限的转账卡51Testing软件测试网h&zEY Z%_
2.使用Account A登录银行转帐系统,使用名下某一张卡对Account B做转账交易,支付金额为1000元人民币.51Testing软件测试网 nCn-EH8l w
3. 查看Account A和B的余额,确认A账户减少1000元,B账户上增加1000元。51Testing软件测试网6Ew V]%ir8F?%d0R!`
以上三个步骤从银行业务角度来看是各自独立的三个功能,但在转账场景里,又有密切的联系。步骤2依赖于步骤1的先决运行,步骤3则需要步骤2的转账数据。
"PK,JNJ0使用QTP等工具针对以上案例开发脚本,则会面临棘手的问题,如果把三个功能写在一个脚本里,就会大大降低每个功能脚本的复用性。若开发成三个不同的脚本,那么彼此的关系和数据交互又需要增加额外的开发成本来实现。51Testing软件测试网j {"ULK.F
2 使用AC的观点完成TestJob的定义
在AC的世界里,一切都得非常简单,三个功能将被定义成三个TestJob。51Testing软件测试网*Y?/^rh
Create_Account_Info负责创建测试账户A和B,然后将accountA,accountB作为参数输出。在AC中做如下定义:
D5~k%q4QGb(t(ZC} j0<QTPname="Create_Account_Info"
description="以管理员身份登录后台系统创建测试账户及相关卡信息" depends="">
<JobOutput
name="accountA"/>
<JobOutput
name="accountB"/>
<Lib
location=”common\lib\lib_utility.vbs”/>
<Run
path="testcase\qtp\admin_createaccount"></Run>
</QTP>
其中admin_createaccount是录制好的qtp脚本路径, lib_utility.vbs是脚本使用到的lib文件,AC将会自动加载到QTP运行环境中。
uyufv&D(nM3Ogp0Transfer_FromAToB则会运行转账交易,将account A里的款项转给account B,并将转账数额作为参数输出。在AC中做如下定义:51Testing软件测试网 x;Y8[7RZt
<QTPname="Transfer_FromAToB"
description="以账户A登录,转账给B账户" depends=""Create_Account_Info">
<JobInput
name="accountA"/>
<JobInput
name="accountB"/>
<JobOutput
name="transfer_amount"/>
<Lib
location=”common\lib\lib_utilityvbs”/>
<Run
path="testcase\qtp\transfer_bank"></Run>
</QTP>
Verify_Account根据输入的两个account信息和转账金额,检查account的余额是否预期变化。在AC中做如下定义:51Testing软件测试网U/M0|Zo$y0_;n4P
<QTPname="Verify_Account
" description="检查账户A和账户B的余额是否预期变化" depends=""
Transfer_FromAToB">
<JobInput
name="transfer_amount"/>
<JobInput
name="accountA"/>
<JobInput
name="accountB"/>
<Lib
location=”common\lib\lib_utilityvbs”/>
<Run
path="testcase\qtp\transfer_bank"></Run>
</QTP>
以上三个TestJob被AC组织起来,将会根据depends关系计算出执行路径:51Testing软件测试网Z6Maj6my
Create_Account_Info→Transfer_FromAToB→Verify_Account
vh%eFpS0同时,AC搭建一条全局数据通道,所有TestJob的JobInput和JobOutput等数据都可在这条通道中进行交互。针对QTP脚本,AC提供了框架vbs函数writeInitoACChanel(paraname,paravalue)和getDataFromChannel(paraname)实现写入和读出全局数据的功能。51Testing软件测试网K!o/l5q3k1M9r3M
上面谈到的是一种理想的TestJob结构模型,在实际的业务中,还有一些比较复杂的因素。比如,Create_Account_Info创建测试账户,测试卡号等信息这些工作,更合适在产品实例安装结束之后,作为基础数据被sql脚本直接创建至Database中。
4h].h0E's!u2_0这时,我们可将Create_Account_Info从QTP改由Java类型,而接口维持不变。
<Javaname="Create_Account_Info"
description="Java程序调用jdbc运行sql脚本,在数据库中创建基础数据" depends="">
<JobOutput
name="accountA"/>
<JobOutput
name="accountB"/>
<ClassPath location=”javacase\jdbc_sql.jar”/>
<Run
path="jdbc.createAccount"></Run>
</Java>
其中jdbc.createAccount是按照AC规范自开发的java程序,调用jdbc运行sql脚本。
N&mpV a-n ov0这种好处显而易见,Create_Account_Info从QTP转换成Java类型之后,只要接口维持不变(JobOutput不变),那么其它两个TestJob,Transfer_FromAToB和Verify_Account不会受到任何影响。51Testing软件测试网R9@9b s]M
同理,Verify_Account也可改写成Java或者selenium类型,以不同的方式进行验证。
Te(d[^ ?(x@(vv0另外一种复杂的情形可能会出现在QTP层面上,如果QTP的脚本规模较大,而又在同一个产品实例的上下文中完成不同的功能。比如,登录后做查账,查账之后做理财交易等等,都是基于一个web session上完成的。针对这种情况,AC的QTP提供了一种Factory Mode(工厂模式)的开发方式,使得所有的测试案例的定义和执行可以在同一个QTP执行环境中完成,非常适合QTP大规模的脚本开发工作。51Testing软件测试网!N%X(o*D0R IH/{ t,I
3 AC提供QTP的工厂开发模式
基于录制生成的QTP脚本,是面向功能的,而不是结构化的测试案例。这使得QTP在维护和增加测试案例时,成本十分昂贵。为此,AC引入工厂开发模式,使得QTP的开发像Junit一样清晰方便。51Testing软件测试网#h;{{NL`)Ra.R7R
QTP的工厂开发模式有如下规范:
q`V4f\01. 每个QTP的测试案例在表现形式上都是一个Vbscript的函数,测试案例的增加/删除通过增加/删除一个VBS的Function来达到。51Testing软件测试网J/d"x8?{L;my
2. 工厂模式不支持对象库模式的脚本,所有的功能都以Description编程来实现
9vy+D0lt$M3rE%?R03. 使用checkDependence函数来检查每个测试案例的运行结果状态
{nbks04. 调用writeIntoACChannel和getDataFromChannel来完成测试案例之间的数据交互。
'm!j h;Aswt05. 每个测试案例都是一个函数,一个函数是否成为一个测试案例取决于在TestJobFile.xml中的定义。51Testing软件测试网8|8B-D2S3{
示例:
*~C-Iju-`f0QTP自带的Flight演示程序,录制生成的脚本如下模式:51Testing软件测试网9Q#HQ6@ew3J
‘登录客户端
Dialog("Login").WinEdit("Agent
Name:").Set "testing"
Dialog("Login").WinEdit("Password:").Set
"mercury"
Dialog("Login").WinButton("OK").Click
‘输入机票信息,下订单
Window("Flight
Reservation").ActiveX("MaskEdBox").Type "081210"
Window("Flight
Reservation").WinComboBox("Fly From:").Select
"Frankfurt"
Window("Flight
Reservation").WinComboBox("Fly To:").Select "London"
Window("Flight Reservation").WinButton("Insert
Order").Click
Window("Flight Reservation").Close
从QTP录制脚本转换成工厂模式脚本,步骤如下:51Testing软件测试网]!p:B0y0qJ@G
1. 创建一个testcase.vbs
m#{_U2W(~[2y-l02. 将原始脚本进行description改写,并按照工厂模式规范,写入testcase.vbs
(hYxqA"j0Function login
'调用框架函数ReportRunningInfo,写日志
ReportRunningInfo
"start to run login test case"
……………Description创建……………………
Dialog(dlgLoginDesc).WinEdit(editUserDesc).set
getDataFromACChannel("user")
Dialog(dlgLoginDesc).WinEdit(editPasswdDesc).set
getDataFromACChannel("passwd")
Dialog(dlgLoginDesc).WinButton(btnOKDesc).Click
if(Window(flightWindowDesc).Exist(30))
Then
‘调用reportPass,向AC报告当前案例成功状态
reportPass
"has sigin in successfully"
login
= True
Else
‘调用reportFail,向AC报告当前案例失败状态
reportFail
"failed to sigin in"
login
= False
End
If
'将用户名写入数据通道,供后续执行的测试案例使用.
username
= "sheng.liu"
writeIntoACChannel
"displayname",username
End Function
Function bookFlight
ReportRunningInfo
"start to run book flight test case"
'检查login案例是否成功,如果失败,当前案例则返回失败.
If
Not CheckDependence("login") Then
bookFlight
= False
Exit
Function
End
If
…………..Description创建及调用……………………
'从数据通道中获得login案例写入的用户名,作为订单用户名下单.
username
= getDataFromACChannel("displayname")
Window(flightWindowDesc).WinEdit(nameEditDesc).Set username
qT7ZY}UU&\0Window(flightWindowDesc).WinButton(insertBtnDesc).Click51Testing软件测试网9m/iB:Ec#]"L8P-X
……………………….
End Function51Testing软件测试网X \YCUrD9S
3. 定义TestJobFile.xml文件,指定工厂模式和测试案例。
oGfF/jF3f0<QTP name="QTP_DesktopClientTest_AC"
description="demo"factoryMode="true"depends="Java_Init" iteration="">
<Lib
location="testscripts\DesktopClient\testcase.vbs"/>
<Testdata
type="xsl" location="data\data_global_shining.xls"/>
<Testdata
type="xsl" location="data\data_global_shining.xls"/>
<Testdata
type="iteration" location="data\testdata.xls"/>
<Case
name="test.vbs" description="demo" depends="">
<Testname="login"description="login flight
app"><Run path="login"/></TestJob>
<Test
name="bookFlight"description="book
flight"><Run path="login"/></TestJob>
</Case>
</QTP>
4. 运行AC框架
DX)P%PG'yQ+g/`0AC会从指定的lib路径中获得testcase.vbs,然后以工厂模式运行login和bookflight两个测试案例。并最终形成测试报告。51Testing软件测试网+q!g N)sLd
从上面的示例可以看出,经过工厂模式改写后,QTP自动化测试具有以下优势
[3`Ny#M*k~m01. 测试案例的粗细粒度更加细微,可以有效地与手工测试案例形成一一对应的映射关系
K7dbj ~U02. 扩展性大大增强,增加新的功能点,只需开发新的function函数即可集成到AC中。
&\+C(X7zG5L1w7@@c03. 案例之间的依赖关系和数据交互更加密切。51Testing软件测试网,~7j2[&]!?YVx
总之,工厂模式非常实用于大规模的QTP的自动化测试脚本开发,大大减少维护成本,提升开发效率。51Testing软件测试网(p)fLOw,c R
Automation Center免费,并逐步在www.cesoo.info发布开源,详情了解
TAG:
- 引用 删除 ac659574848 / 2011-08-29 17:27:57
-
评 3 分
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | 5 | 6 | ||||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 |
我的存档
数据统计
- 访问量: 14948
- 日志数: 21
- 建立时间: 2007-12-03
- 更新时间: 2010-12-21