韩小明@xiammy的专栏

没水的地方挖井,有水的地方修渠

韩小明ID:xiammy
439326次访问,排名106好友12人,关注者67
毕业后一直在广联达工作
xiammy的文章
原创 174 篇
翻译 0 篇
转载 22 篇
评论 1133 篇
韩小明的公告
作者毕业于浙江大学,非常热爱体育运动。现在尤其热爱羽毛球运动。在休息时间非常热爱技术文章写作。
最近垃圾评论泛滥,为了不污染大家的视听,暂时关闭评论,请大家理解。
欢迎转载,但请注意,除非特别声明,本站采用Creative Commons License许可:署名,非商业。

最近评论
yb00k:感觉 这个还是个垃圾东西 适合IE7的变到IE8 就变样了 点都不规范 一点兼容性都不强....强烈支持 firefox
wuhuiran:我嵌入式数据库一直用BerkeleyDB,看到你的博文才知道还有一个SQLite,谢谢。BerkeleyDB不支持SQL
wuhuiran:我嵌入式数据库一直用BerkeleyDB,看到你的博文才知道还有一个SQLite,谢谢。BerkeleyDB不支持SQL
liquankun:瑞星还是不咋地!
白花了几个月的钱
外国的杀软不一定比国产的好!
但是国产的就是比不上国外的!
没办法!技术赶不上人家 还竟搞内讧
不经历大灾难 就不知道什么是团结!



正真的高手是不用杀毒软件的,没什么好不好的,是你自己技术不行而已
wangdei:http://www.bt285.cn BT下载 有300W部BT种子.
http://www.yaonba.com.cn NBA中文网 有200W条NBA直播
http://www.5a520.cn 小说520网 有300W部小说
http://www.bt285.cn/yazhou/ 亚洲BT 有BT亚洲
http://www.bjxlz.cn p……
文章分类
收藏
    相册
    图书
    链接
    宗刚的专栏(RSS)
    快乐学习(RSS)
    陈亮亮的专栏(RSS)
    朋友
    张恂论 OO
    言之有李(RSS)
    赵伟的小家
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 自动化测试框架:自己的框架收藏

    新一篇: 自动化测试框架: 控制界面的关键 | 旧一篇: 别动不动拿"重构"说事

    这段时间一直在为公司内部开发自动化测试框架,简称GTF。这些代码都是公司的财产,不方便共享。当然了,如果公司愿意,我倒愿意开源了。

    不说这些了,因为这个框架现在还属于开发阶段,很多事都是言之过早。最近几个博文中,我会持续将我在架构过程中的想法写下来。供自己和大家一起分享。

    这些想法,并不属于我一个人,我工作中的同事们给了我很大的帮助。

    这一篇主要说明架构方面的考虑。

    在现有的提供自动化测试解决方案的产品很多,包括:Robot,TestComplete,WinRunner等等。我只接触过这些,公司里也进行过很大的尝试,但是结果往往总是不竟如人意。

    这中间,排除那些人员方面的原因,也总结这些自动化工具,在使用过程中的不方便的地方:

    1. 定位控件不方便。标准控件还好,非标准控件就只能靠很多非正常方法去获取。而且,控件的识别往往和界面布局相关。
    2. 验证数据不方便。这点更是针对非标准控件(什么?你不用非标准控件?),数据的检测,甚至夸张到使用图片检测。
    3. 代码维护不方便。由于在编写过程中,大量的和界面相关的代码,导致最后在需求变更的时候,代码的维护,成为测试人员的负担。

    针对这些情况,我们经过讨论,何不自己做一个测试框架。当然了,这是基于我们的丰富的知识积累的决策。大家不需要关心这个决策的情况。不过,可以多关注一些我们在做的过程中的分析结果。

    通过分析流行的测试框架,有多种方式:

    第一、最典型的就是消息驱动,自动化工具通过脚本录制和编写,保存为测试脚本。在回放的过程中,将这些脚本转换成为Windows消息,发送给我们应用程序的窗体和各种控件。

     

    这种方式的好处在于,自动化工具和应用程序之间能够做到完全的隔离。但是,由于使用了Windows消息,它也拥有了一个非常致命的缺点。那就是消息队列的异步性与程序的顺序性之间的矛盾。很多消息发送给了应用程序,但是应用程序的处理可能已经和消息队列错位了。有一些关于代码的时间片等待,就是因为这个问题。

    另外,就是由于完全的隔离,对于操纵控件数据的能力大大降低。毕竟,拥有大量数据的控件都不是标准控件。

    第二、嵌入式。TestComplete就是这类工具。它有支持不同语言的版本。大概思路,就是在程序编译的时候,注入自己的控件代理。脚本的回放,直接可以通过代理,操纵到应用程序。

     

    可惜的是,这类软件开发的时候,更多的是考虑平台的兼容性。对于特有平台上的支持不是十分完美。特别是对自定义控件(比如Delphi中,除了VCL的标准控件)支持也没有做到最好。不过,我这里必须承认,TC的内部实现机制可能十分强大,我不能窥探所有。如果有人清晰,可以指点一二。

    针对上面的两种,我们想到的第三种方式:一体式。这种方式中,通过给程序在打包的过程中,添加额外的框架代码,是的程序自动提供控件的访问方式。自动化的模块也会作为测试程序的一部分运行。

    应用程序在执行脚本的时候,自动通过脚本,控制各控件界面的显示和关闭。它应该是第二种方式的变种。但是由于是自己实现的,所以在对各类自定义控件支持的都非常好。

     

    针对一开始提出的几个自动化测试的难题,我们提出了,自动封装窗体上所有控件的概念(这些概念后面会详细介绍),对于测试人员,只要关心真正的业务操作流程。而业务流程中涉及到的控件,已经为他们自动提供好。这样,脚本也自然只成了业务流程的脚本。其复杂度也就大大降下来了。

    按照这个思路,最主要的是可以充分发挥“程序是我们自己的”的优势,对于测试人员,开发人员是他们的最好的访问控件的工具。有什么控件找不到,开发人员可以快速地给他们适配一个访问方式。这也大大降低了测试人员对软件系统内部的了解程度。

    因此,自定义的测试框架,最大的优势来源于其无限的扩充能力,以及简洁的封装界面。相信这个框架一定能给我们自动化测试方面带来很多优势。

    发表于 @ 2007年05月24日 22:24:00|评论(loading...)|编辑

    新一篇: 自动化测试框架: 控制界面的关键 | 旧一篇: 别动不动拿"重构"说事

    评论

    #chen82607 发表于2007-05-25 21:17:56  IP: 121.34.96.*
    框架太大了,,能细化点吗??
    #Stanley_Xu 发表于2007-05-27 20:17:03  IP: 141.24.49.*
    你的意思是不是想用command line test的方法做gui测试?

    如果你提出的“框架”是为了方便测试框架读取控件属性,我觉得叫辅助手段更确切。此外gui测试尽量要不用用消息来处理。虽然有时候效果好,但已经有别于用户的真实操作了。

    举个delphi7 ide的例子:先最大化ide,然后调入一个项目,虽然ide还是最大化的,但是ide并没有把屏幕最上面完全占满。你去读消息或者读控件属性,能发现这问题吗?屏幕截图做比较,能找出来吗?

    用你说的方法或许可以轻松添加一批测试代码,但是代码是否真正有用还值得推敲。
    2007-05-28 07:19:34作者回复
    你说的问题,是不是可以这样考虑?总有一些测试是不可能或者不方便测试的。但是自动化测试,应该将重点放在业务流程验证上。
    2007-05-28 07:21:26作者回复
    另外,框架是指脚本编程的基础平台。这本身并没有什么。如何做到和项目隔离,我后面会有文章介绍
    #shrinerain 发表于2007-05-28 00:51:17  IP: 60.12.88.*
    使用windows消息机制驱动被测程序?

    这个...除非是做性能方面的测试,如果做一般的GUI功能测试,不可能采用这种方法.

    成熟的自动化测试工具,比如Function Tester, QTP,都是直接模拟鼠标键盘操作,不会去从底层发windows消息.

    将自动化代理嵌入程序,当然对自动化有利.但这个风险太大,很难保证代理程序不会对原始代码造成影响.

    小弟目前也是专职做自动化测试.
    2007-05-28 07:20:21作者回复
    模拟键盘鼠标操作,从原理上,就是消息啊
    #shrinerain 发表于2007-05-28 00:54:25  IP: 60.12.88.*
    小弟目前也在尝试建立一套自动化框架...

    但我说的框架是指流程,规范,软件工程方面的东西以及自己的关键字驱动模型.

    希望有机会探讨.
    #shrinerain 发表于2007-05-29 21:54:58  IP: 60.12.88.*
    2007-05-28 07:20:21作者回复:
    模拟键盘鼠标操作,从原理上,就是消息啊
    -----------------------------------------------

    底层当然是消息,但是消息不一定就能对应到鼠标键盘操作.
    一个简单的例子,你可以向一个readonly=true的textbox发消息,修改它的状态,但是从客户来说,利用鼠标键盘,这个操作是不可能完成的.

    直接发消息不适合用来做GUI自动化,至少成熟的自动化测试商业软件都没有采用这种办法,
    #wxssaa 发表于2007-09-07 13:03:01  IP: 220.231.42.*
    老兄,我觉得你写的很好,目前我也在做这方面的工作,我觉得其实框架搭建好了,等于是给测试人员有了更大的发挥空间。可以多抽时间去考虑如何设计更好的Case了。我认为测试工作最重要的还是要找出一套能够设计完美测试方案的框架,我以为你的文章是写的这方面的。
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 韩小明