业务组件学习资料
2011年03月09日
11.6 QC和QTP构建自动化测试框架
做功能自动化测试都会不约而同地遇到一个比较棘手的问题--测试框架的搭建。这也是直接影响功能自动化测试成功与否的关键。框架做得好可以使测试事半功倍,反之轻则很难看到工作的成果,重则会导致整个测试失败。目前有很多关于测试框架的讨论话题,其中也有成型的测试框架,也有很多好的思想在里边,很值得借鉴。但是今天要讨论的不是那些已有的,而是HP已经为我们设计好的一个测试体系--业务组件测试。它是利用QTP与QC的完美结合组成的一个体系架构,它可以轻易实现目前比较流行的3层测试架构:脚本层、业务层、数据层相分离,为开展功能自动化测试提供一个高效、稳定、容易实现的测试。
11.6.1 BPT介绍
HP Mercury测试工具系列中测试管理工具Quality Center 从8.2版本开始提供了BPT(Business Process Testing,业务流程测试)的测试思想和实现流程。BPT并不是HP创建的一种新型测试方式,它只是一种新的测试思想,它将整个测试参与角色分为两类:一类是测试工程师;另一类是业务工程师。业务工程师不用熟悉脚本,不用去理解Component的构建(当然可以参与构建),他们主要的职责是使用已经建模完成的所有Component,也就是被测对象的操作步骤零件进行实际业务流程处理的案例组合,设计完成充分、有效的测试用例集。
以HP Loadrunner附带的flight订票系统举例来说,其登录步骤需要如下4个步骤。
① 打开程序,出现login窗口。
② 输入用户名。
③ 输入密码。
④ 点击确认。
在BPT中,我们可以把整个登录打包成一个Component,它只需要测试用例设计人员拼接用例时拖曳到用例步骤,然后在实际运行时输入两个参数就可以执行了。登陆该Component可以被BPT中所有测试用例调用,而不用重新录制或者编写脚本。
BPT的执行一般正确流程是由QC远程调用QTP来运行,在QC段单击Component上的输入参数列表就可以实时输入了。
而对于一个业务复杂的系统来说,可以根据测试用例设计的粒度不同,组成不同的Component,达到测试用例复用的目的。
11.6.3 BPT使用经验
1.根据划分的组件来实现组件脚本
使用业务组件时,首先需要将QTP连接QC(例如http://168.34.5. 123:8080/qcbin)。如果希望在每一次新建Action时都增加一些头部说明,比如作者、创建日期、说明等,则可以用Action Template来实现。方法是用记事本等文本编辑器,输入下面类似的内容:
'Company: xxxx
'Author: xxx
'Product: xxx
'Date: xx
然后将文件保存为"ActionTemplate.mst",并存放到QTP安装目录下的dat目录,重启QTP,新建的Action就会包含以上信息。
创建应用模版--Application Area,此时应用模版会自动调用前面创建的ActionTemplate.mst。
2.创建应用程序区域
在开发脚本之前首先需要创建一个应用程序区域。应用程序区域提供创建业务组件所需的所有资源和设置,每个业务组件都居于一个应用程序区域中,并从这些应用程序区域集成这些资源和设置。
创建过程为:依次选择"File"→"New"→"Application Area"命令,保存后自动上传至QC默认目录。在此也可以加载自己的函数库、对象库等,这样以后创建的组件都可以共享该应用程序区域的资源;同时也方便维护,这也是一个优点。例如,一旦函数库改变,在此重新加载新的函数库即可,不用在脚本中修改。总之这个应用程序区域很重要,以后所有的脚本均是基于这个区域的。
比如,如果要加载函数(这里笔者根据自己在实际工作中写的代码举个例子),则可以写下面的代码:
If jour_no(c) =jour_no_e(c) Then
Reporter.ReportEvent micPass,"当日交易委托查询","
委托单号"&jour_no_e(c)&"查询成功"
init()
report_log cPass,"当日交易委托查询","委托单号"
&jour_no_e(c)&"查询成功"
else
Reporter.ReportEvent micFail,"当日交易委托查
询","委托单号"&jour_no_e(c)&"查询失败"
init()
report_log cFail,"当日交易委托查询","委托单
号"&jour_no_e(c)&"查询失败"
End If
上面代码中的粗体字体部分就是笔者需要调用的函数,作用是将测试结果以文本的形式同时保存到用户本地的磁盘上。而这些被调用的函数就需要事先通过Function Libraries将其以.vbs或.txt的格式添加到Resources中,然后通过应用模版--Application Area中的Function Libraries将这些函数文件一一添加即可达到被调用的目的。
3.创建脚本
创建脚本时应在创建脚本之前在QC中组织好目录树,方便保存及调用。
新建业务组件选择Scripted Component,选择之前创建的应用模版,此时每次打开新的Scripted Component时,都会包含头部说明。
在我们使用QC业务组件(QC9.0版本)的过程中发现了这样一个问题,即通常脚本开发人员都会使用QTP自带的DataTable来添加测试用例,然后参数化。但后来考虑到自动化最终的使用对象其实是用户,如果用户想自己添加、修改或删除测试用例,那么这种DataTable的模式是万万不可采用的,因为用户可能根本就不会使用该工具,所以最好采用从外部文件(比如Excel、Word、TXT文件等)直接获取的办法,让用户在外部文件中写入测试用例,即前面讲到的第三层架构数据层。
同样举个例子,我们可以简单的利用以下代码实现:
datatable.ImportSheet "D:\个人网银测试用例.xls","历史递延交割成交查询","历史递延交割成交查询"
上面这段代码的作用是将外部文件D:\个人网银测试用例.xls中名为"历史递延交割成交查询"的表单内容导入到DataTable中名为"历史递延交割成交查询"的表单中,这样就可以达到灵活添加测试用例的目的。所以在用业务组件做自动化时,最好使用外部文件创建测试用例,以方便用户的使用,从而给他们留下一个良好的印象。
4.正则表达式
要学会使用正则表达式,在笔者做自动化的过程中,经常遇到某个对象(例如Webelement的innertext属性)不能被动态识别的问题。这时我们只要通过正则表达式就可以很好地解决这个问题,比如一个账户账号(16位的纯数字),我们就可以用正则表达式将该对象的innertext属性写成\d{1,16},这样每次不同的账户账号QTP就都能够识别了。
当然,不只是在对象中能够使用正则表达式,它同样可以被使用在检查点中,这就要看使用者到时候如何去灵活地使用它了。其实,正则表达式在自动化中的用途相当广泛,不过在用正则表达式之前,大家还得先去了解一下正则表达式的使用规则。
要学会利用QTP的Debug Viewer调试脚本,可以说这给我们在使用QTP的过程中带来了极大的帮助。
最后,也是最重要的一点,即在做自动化的时候,一定不要忘了在代码中添加结果信息检查点,还是拿前面的那段代码来举例,如下所示:
If jour_no(c) =jour_no_e(c) Then
Reporter.ReportEvent micPass,"当日交易委托查询","
委托单号"&jour_no_e(c)&"查询成功"
init()
report_log cPass,"当日交易委托查询","委托单号
"&jour_no_e(c)&"查询成功"
else
Reporter.ReportEvent micFail,"当日交易委托
查询","委托单号"&jour_no_e(c)&"查询失败"
init()
report_log cFail,"当日交易委托查询","委托
单号"&jour_no_e(c)&"查询失败"
End If
其中,粗体字为记录到QTP的结果信息,斜体字为记录到本地的结果信息。总之,结果信息必须要有,而且要尽可能的详细清楚。
BPT为Bussiness Process Testing的缩写,译为业务组件测试。
1)业务组件的简介
业务组件是组成流程测试的基本单元,组合不同的业务组件可以实现不同的业务流程测试。如将黄金交易系统的登录作为一个组件,将交割申报作为一个组件等,然后可以将这些组件按照一定的业务流程组合在一起,以满足不同业务流的测试。这里业务组件可以重复使用,从而在一定程度上提高自动化开发的效率。
2)业务组件测试的优点
业务组件测试有以下几个优点:
相关业务人员可以在没有脚本的环境下组合业务组件,实现业务流程。
对业务人员的编程能力没有要求,业务人员只需了解系统的业务流程,不用关心具体的脚本实现。这一点也实现了业务层和脚本层的分离。
一旦某个组件开发完毕,即可在不同的流程中使用该组件,实现高可复用性,从而加快业务流程测试的速度。
明确角色分工,业务人员负责流程的开发、组织;QTP工程师负责脚本的开发、维护,以及相应函数库的开发、维护。
因为实现了脚本的复用,提高了自动化开发的效率,在无形中降低了测试过程中维护的时间和成本。
3)业务组件测试的简易流程
业务组件测试的简易流程如图11-19所示。
图11-19 业务组件测试的简易流程
从图11-19可以看出整个过程分为两条线:第一条是由业务人员划分组件并组合不同的组件实现的不同流程测试;第二条是QTP专家负责组件的脚本的具体实现并负责调试成功,上传到QC供业务人员测试时调用。
注意:
此过程需要QC有Bussiness Process Testing组件许可的支持,也就是需要单独向HP购买。
3.整个流程的开发过程
下面我们还是以黄金外包项目为例,简单地演示一下整个流程的开发过程。
1)划分组件
个人网银交割申报业务划分为以下几部分:
登录。
递延交割申报。
递延交割当日委托查询。
递延交割当日成交查询。
递延交割历史委托查询。
历史递延交割成交查询。
注销。
2)组织业务测试流程
组织业务测试流程为:登录-递延交割申报-递延交割当日委托查询-递延交割当日成交查询-递延交割历史委托查询-历史递延交割成交查询-注销。
发表评论
-
WIN下用exp备份保存最近N天方案
2012-01-20 01:34 582WIN下用exp备份保存最近N天方案 2010年06月03日 ... -
[转]命令行创建快捷方式的批处理脚本
2012-01-20 01:34 1304[转]命令行创建快捷方式的批处理脚本 2010年10月27日 ... -
自动化测试规范小结
2012-01-20 01:34 745自动化测试规范小结 20 ... -
自动获取CPU使用率的脚本
2012-01-20 01:34 947自动获取CPU使用率的脚本 2011年04月28日 一个 ... -
2012-1-12
2012-01-19 09:24 6042012-1-12 2012年01月12日 瀹剁┓浜轰 -
怎么使用quicktime
2012-01-17 01:58 753怎么使用quicktime 2011年1 ... -
OCI
2012-01-17 01:58 848OCI 2011年12月05日 OCI编程的一般过程 ... -
ROM修改制作工具软件集合
2012-01-17 01:58 1129ROM修改制作工具软件集合 2012年01月11日 1. ... -
游戏编程101
2012-01-17 01:58 627游戏编程101 2011年11月21 ... -
MonoTouch:用.net开发iPhone应用
2012-01-17 01:58 577MonoTouch:用.net开发iPhone ... -
[转]GCC笔记
2012-01-15 21:15 652[转]GCC笔记 2010年03月23日 The His ... -
系统调用
2012-01-15 21:14 578系统调用 2009年08月26日 系统调用在用户空间 ... -
关于cgi库
2012-01-15 21:14 624关于cgi库 2009年07月02日 目前Web技术中生 ... -
嵌入式WEB服务器BOA的移植方法(三)
2012-01-15 21:14 534嵌入式WEB服务器BOA的移 ... -
SAMSUNG S3C2440的简易BootLoader ㈢
2012-01-15 21:14 570SAMSUNG S3C2440的简易BootLoa ...
相关推荐
jetpack从入门到精通.pdf 系统性的介绍 jetpack 组件的基础学习资料 ,带大家完整的学习Jetpack组件,由浅入深。 官网学习地址:https://developer.android.google.cn/jetpack/getting-started Jetpack 是一个由多...
基于标准URL的iOS路由系统,可实现业务模块组件化,控制器之间零耦合,可实现黑白名单控制,可进行native降级到hybrid。 软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、...
包括课程概述、课程安排、学习前提等方面的介绍,让同学们对组件化有一个直观的了解。 1-1 课程导学 第2章 环境及知识准备 帮助大家梳理课程要用到的开发环境及知识储备 2-1 环境及知识准备 第3章 业务开发流程与...
3. Flutter有状态组件和组件通信 0. 一个计算器的简单例子 再学习过程中在本例子中用到了几个...在State组件中写业务代码 2. State组件中的状态改变 先在类中定义实例变量 当需要发生变化的时候调用setState方法即可 当
主要介绍了Spring高阶用法之自定义业务对象组件化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了Vue封装功能组件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究...
适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究...
在学习组件化架构的过程中,从很多高质量的博客中学到不少东西,例如蘑菇街李忠、casatwy、bang的博客。在学习过程中也遇到一些问题,在微博和QQ上和一些做iOS的朋友进行了交流,非常感谢这些朋友的帮助。本篇文章...
.net EXT学习资料与源码 ext是一个强大的js类库,以前是基于YAHOO-UI,现在已经完全独立了, 主要包括data,widget,form,grid,dd,menu,其中最强大的应该算grid了,编程思想是基于面对对象编程(oop),扩展性相当的好.可以...
大数据日志收集框架Flume学习资料,含Flume接口API文档,Java版和C++版Client代码,以及服务配置Demo 根据日志收集系统架构,各服务器端日志主要通过Apache Flume发送至Kafka集群的各个Topic,Kafka针对各个业务日志...
spring boot 实践学习案例,与其它组件结合如 mybatis、jpa、dubbo、redis、mongodb、memcached、kafka、rabbitmq、activemq、elasticsearch、security、shiro等 #### Spring Boot 版本 - 2.0.3.RELEASE #### 模块...
飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个自主研发、功能完备、 开源开放的产业级深度学习平台,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于...
主要被用作HTTP或者HTTPS协议的接口定义,即使在非微服务架构体系下,也被广泛采用优势:HTTP协议本身是一个公开的协议,对于服务消费者来说几乎没有学习成本,所以比较适合用作跨业务平台之间的服务协议。...
高级篇\课件\09、商城业务.pdf 高级篇\课件\10、RabbitMQ.pdf 高级篇\课件\11、支付.pdf 高级篇\课件\12、定时任务与分布式调度.pdf 高级篇\课件\13、ShardingSphere.pdf 高级篇\课件\14、SpringCloud组件.pdf 高级...
另外,我们采纳了一些对保真度有更高要求的用户反馈的建议,在新版本中还重点完善了一些业务组件的动态交互效果,提供了更加丰富的动态组件。在新版本提供的rplib格式的组件列表文件中,我们还对组件的分类和拆分...
本设计源码提供了一个基于Android的视频播放器组件。...该组件采用插件式开发,无需关注视频底层技术,专注业务与逻辑开发,功能稳定,扩展性强,适合用于学习和实践Android技术,以及开发视频播放相关的应用。
飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个自主研发、功能完备、 开源开放的产业级深度学习平台,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于...
这是以前在学习谷粒商城项目自己一手整理出来的笔记,记录了微服务组件构建时会出现的问题以及对组件的应用输出了使用文档,输出的内容包含了 Nacos、OSS、Feign、Gateway。项目介绍:谷粒商城是一个类似京东的自营...
主要介绍了vue element-ui之怎么封装一个自己的组件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧