51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5532|回复: 21
打印 上一主题 下一主题

[原创] 基于对象库+excel的框架

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-7-18 12:17:15 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
做QTP自动化时间不久,之前都是写的一些小的处理数据的功能,现在要做一个类似框架的自动化程序,在网上看了大家关于框架的讨论,所以请对我自己想写的程序有大体如下想法,请大家发表下看法:

对象处理:为解决版本升级后对象不能识别的问题,所以采用对象库(听说描述性编程比较复杂)。

输入数据:用EXCEL作为数据驱动。将测试用例的数据写在EXCEL中,然后在脚本中对有效和无效的用例作判断,给出测试报告。

脚本和函数:在脚本中,将基本的操作都模块化,比如:新增、删除、修改。。
同时把可重用的函数方法写成FUNCTION。

输出报告:测试报告的部分也即是错误处理,写成FUNCTION
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

22#
发表于 2008-7-30 22:45:17 | 只看该作者
脚本驱动数据,数据在驱动脚本,如此循环,做得多了,就成了框架.呵呵~~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

21#
发表于 2008-7-30 12:01:59 | 只看该作者
自动化框架,现在还觉得对这个概念有点迷茫,努力学习中......

看了大家的讨论也颇有收获......
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2008-7-23 12:49:48 | 只看该作者
动手去实践吧 , LZ讲的东西是可以用的,我现在用到测试框架就是这种模式;
基于excel、对象库和测试脚本,excel记录各种测试数据、对象的名称等,对象库只是用例存储和识别对象的地方,而脚本则用例解析、驱动数据表示数据的执行;
而且以后维护起来比较方便,脚本是基本不用修改,只需要修改对象库和测试数据,能够快速适应测试需求。但是这里的脚本就像前面的人所讲到的,是要模块化的,分成一个一个单独的函数,然后各个函数进行简单组合,组成一个更高级的函数;最后写测试脚本的时候,只需要一段很短的脚本就能实现一种类型的测试;而这些是需要在实践中积累的,也与你测试的项目有关!
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2008-7-19 10:18:47 | 只看该作者
框架这东西没有严格的定义,大家的理解不同要求不同,所以认同的框架也就不同
但是框架一般要实现一些内容:
1、高效的管理和调度测试脚本
2、如何更方便的对脚本进行扩展和维护
3、进行完整的错误处理和日志记录,包括错误日志和运行结果日志
4、如何让业务脚本开发人员的工作更加简单快捷
5、抽取出常用的公共函数
6、测试数据的管理和维护,甚至数据的自动生成
等等
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2008-7-19 03:17:19 | 只看该作者
原帖由 小孩 于 2008-7-19 02:38 发表
现在WHO都说框架,我们到底了解框架多少,我们做出来的东西到底算不算框架呢!


我的理解,框架就是一个自动化体系结构流程上的总体设计,使得自动化的开发、维护、使用更加简单高效

只要符合这些目的和要求,就可以说是框架啦。

因此框架的内容很多,框架的种类也很多。

正因为框架的内容和种类都很多,所以大家做出来的框架也都不大一样。

所以不用追究是不是框架,大家可以多研究研究框架一般需要包含哪些内容,哪种类型更合适。

[ 本帖最后由 yabest 于 2008-7-19 03:24 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2008-7-19 02:45:17 | 只看该作者
不过我有点不理解的问题是,JavaWindow("Test").JavaButton("label:=New").Click,在写这句脚本之前,要不要这样定义:
lable=Description.Create()
lable("name").Value="New"

一种是隐试描述性编程
一种是显试描述性编程
JavaWindow("Test").JavaButton("label:=New").Click
lable=Description.Create()
lable("name").Value="New" 改成 lable("label").Value="New"
JavaWindow("Test").JavaButton(lable).Click
他们就是一样的结果
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2008-7-19 02:38:41 | 只看该作者
现在WHO都说框架,我们到底了解框架多少,我们做出来的东西到底算不算框架呢!
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2008-7-18 19:16:01 | 只看该作者

回复 14# 的帖子

你对描述性编程理解有错误
JavaWindow("Test").JavaButton("label:=New").Click本身就已经识别了JavaButton这个对象了
属性名就是label,而属性值则是New

lable=Description.Create()
lable("name").Value="New"
这个lable是个Description对象,其属性名是name,值是New
这是两回事
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2008-7-18 18:19:34 | 只看该作者
这个方法是描述性编程:

另外,QTP还支持脚本描述的方法来定义和访问对象,即不需要在仓库里定义,也能访问和操作实际对象
( Written by yabest,http://www.yabest.net
如上面两个任务,可以如下实现
1. 不需要在仓库里定义Check按钮对象,直接用下面脚本来实现测试
buttonNum = CInt(JavaWindow("Test").JavaEdit("Record Num").GetROProperty("value"))
For buttonIndex = 0 to buttonNum - 1
  JavaWindow("Test").JavaButton("label:=Check", "index:="+CStr(buttonIndex)).Click
Next
2. 不需要在仓库里定义New、Modify、Delete、Check按钮对象,直接用下面脚本来实现测试
JavaWindow("Test").JavaButton("label:=New").Click
JavaWindow("Test").JavaButton("label:=Modify").Click
JavaWindow("Test").JavaButton("label:=Delete").Click
JavaWindow("Test").JavaButton("label:=Check").Click
--------------------------------------------------

不过我有点不理解的问题是,JavaWindow("Test").JavaButton("label:=New").Click,在写这句脚本之前,要不要这样定义:
lable=Description.Create()
lable("name").Value="New"
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2008-7-18 18:08:04 | 只看该作者
我不知道怎么把对象和代码分离,我现在写的代码还是用了对象库里的代码,只能做到的是读入excel的数据并作处理。

看过yabest写的一篇帖子,这个方法应该就是基于对象库的处理吧:
只录制一个按钮对象,它设有两个特征属性 label=OK, index=0
然后用下面的脚本,就可以完成测试
buttonNum = CInt(JavaWindow("Test").JavaEdit("Record Num").GetROProperty("value"))
For buttonIndex = 0 to buttonNum - 1
  JavaWindow("Test").JavaButton("Check").SetTOProperty("index", buttonIndex)
  JavaWindow("Test").JavaButton("Check").Click
Next
或者窗口上有New、Modify、Delete、Check等好几个按钮,要把这几个按钮一一按过去
我在对象仓库里只设置一个按钮对象AnyButton,label特征属性值填任意值,然后用下面脚本执行测试
JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "New")
JavaWindow("Test").JavaButton("AnyButton").Click

JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Modify")
JavaWindow("Test").JavaButton("AnyButton").Click

JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Delete")
JavaWindow("Test").JavaButton("AnyButton").Click

JavaWindow("Test").JavaButton("AnyButton").SetTOProperty("label", "Check")
JavaWindow("Test").JavaButton("AnyButton").Click
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2008-7-18 17:21:46 | 只看该作者
你用的是9.0以上的版本的话,对象库里支持修改对象层次的
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2008-7-18 15:52:49 | 只看该作者
是啊,新增一个页面就是一个FRAME,如果我写代码的话,我怎么知道是新增到了第几个页面?就算知道,那么多页面也很难处理啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2008-7-18 15:44:13 | 只看该作者
你录制的脚本可能在多个frame上吧,所以会出现这么多的frame,楼上说的可以重命名,但是重命名后还是以前的对象没有区别。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2008-7-18 15:27:59 | 只看该作者
原帖由 FLY000 于 2008-7-18 14:46 发表
因为我录制的时候会产生这样的代码,frame的名称好多,我觉得这样不好管理对象。

Browser("BI@Report 2.0").Page("BI@Report 2.0").WebElement("分析应用服务器").Click
Browser("BI@Report 2.0").Page("BI@Repo ...


在对象库中可手工调整对象的层次关系、重命名对象、删除一些“无用”对象



推荐新书《QTP自动化测试实践》
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2008-7-18 14:46:53 | 只看该作者
因为我录制的时候会产生这样的代码,frame的名称好多,我觉得这样不好管理对象。

Browser("BI@Report 2.0").Page("BI@Report 2.0").WebElement("分析应用服务器").Click
Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame").Link("创建主题域").Click
Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_2").WebEdit("name").Set "测试主题域2"
Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_2").WebEdit("description").Set "test"
Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_2").WebList("dsname").Select "sybaseshl"
Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_2").Link("确认创建该主题域").Click
Browser("BI@Report 2.0").Page("BI@Report 2.0").Image("plus3").Click
Browser("BI@Report 2.0").Page("BI@Report 2.0").WebElement("维表维护").Click
Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_3").Link("单级代码维").Click


Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_4").Link("返回到父页面").Click
Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_3").Link("多级代码维").Click
Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_4").Link("返回到父页面").Click
Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_3").Link("通用代码维").Click
Browser("BI@Report 2.0").Page("BI@Report 2.0").Frame("Frame_4").Link("返回到父页面").Click
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2008-7-18 14:21:16 | 只看该作者
实际项目中总结经验,然后提高自动化测试框架的优化水平
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-7-18 14:18:25 | 只看该作者
你咋老是和frame过不去了,faint
这个影响你什么呢?
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2008-7-18 14:15:26 | 只看该作者
我看到别人框架里的代码没有frame,请问下怎么才能把frame去掉,我设置了frame还是不行
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-7-18 12:56:26 | 只看该作者
呵呵,还是动手吧,光想得不到锻炼的,实际问题中去提高自己解决问题的能力
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-24 08:35 , Processed in 0.089852 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表