上位机软件自动化测试经验总结

发表于:2008-12-22 15:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:xixihahahu    来源:51Testing论坛

分享:

  一.摘要

  本文档主要描述QA在进行软件自动化测试项目中获取的经验,以及提出一些有利于下一次类似测试应该汲取的教训,以便为未来的软件自动化测试提供必要的依据。

  二.获得的经验

  1.  完整的项目回顾

  略(使用HP公司的QTP作为测试工具)

  2.  具体的开发总结

  略(公司的上位机软件,为了保密,称其为VS,软件的功能主要是物体经过某个传感器系统时,能够通过各种外设收集数据并予以判断,并且做出是否将交易记录递交数据库的决定)

  2.1 流程测试的风险

  将VS的通过传感器系统的流程纳入项目,是基于测试工具本身能使用动态链接库来扩展其自身语言(VBScript)无法完成的输入输出信号模拟功能。但这是有很大风险的,第一,数据通讯依赖串口,既要正确的通过串口发出信号,也要正确的通过串口捕获信号,但是一个串口只能被一个软件打开,使用什么技术来模拟这种输入输出信号呢?普通的商用机只有一个物理串口,如果没有很好的串口模拟技术支撑,不仅随时随地的流程自动化测试将化为泡影,测试成本也将上升。第二,我们不知道测试工具对哪些编译型语言编写的dll支持,是否支持的好,程序员能否熟练编写这种未知语言编写的dll;

  实际上,这两种风险在开发过程中我们都真实的遇到了。对于第一种风险,我们最终使用串口对接技术来解决,并且放弃了物理串口,使用虚拟串口。编写dll 时,我们一开始使用Delphi来写dll,但是测试工具无法正常调用,最后我们用C#成功的编写了测试工具可以正常调用的dll。

  2.2自动化测试的架构

  自动化测试的架构也是我们在项目开始初经常涉及的问题。好的测试架构能够提高开发效率,保证开发质量,规避开发歧途,降低项目后期整合时的维护难度。因为项目组成员,来自各个不同的部门,对于测试自动化的理解深浅不同,使用自动化工具的水平参差不齐,团队的合作开发使得我们亟需完美的测试架构。但是,这毕竟是我们第一次做自动化测试项目,没有任何的经验积累。公司目前采用的测试管理工具是QC,那么使用QC+QTP,就是我们架构的唯一选择。QC和QTP 能够无缝结合,使用QC可以方便的生成,运行,管理自动化测试案例。除了架构带给我们开发过程中的这些便利外,我们还需要考虑测试编码过程中编码的方式,编码的效率,测试对象的管理,函数的管理,代码的配置管理

  我们将测试对象做成一个共享对象库,每个团队成员进行某个自己负责的案例开发时,只要关联这个对象库,就能自动识别被测软件的对象。使用共享对象库,不但保证被测软件对象的唯一性,而且便于后期对象的维护。目前,在自动化测试中模拟操作的更好的代替方法是描述性编程,可以避免软件升级时对象库的维护。但是由于团队成员是初次参与这种项目,所以采用更成熟的对象库技术。

  编码方式有3种,一种是直录,一种是手工编,还有一种是混编。直录的优点是速度快而方便,缺点是它产生的新对象不会存到共享对象库,脚本相对累赘。手工编的优点是代码清晰简洁,可读性更好,缺点是相对麻烦,编码速度稍慢。混编是指主要采用手工编码方式,在人机交互复杂时用直录提高效率,完成脚本后再使用手工编码简化脚本。我们采用的就是混编方式。如果使用描述性编程,那就必须要完全使用手工编码了。

  本文为51Testing论坛会员xixihahahu原创,转载请保留作者及出处。

  在自动化测试中,函数库起到很大作用。在QC的自动化项目中,适当的编目函数库,将项目无关的函数放在公共的函数库中,将项目有关的函数放在项目根目录下。我们此次项目编写了大量的自定义函数,主要有两类:一类是起到简化主脚本代码的作用,使测试脚本看起来更加简洁,例如InitCom,FreeCom 函数等(用于进行串口的初始化);一类是起到检查点的作用,例如CheckDb,Check_Object_SelectedText函数等(检查点函数)。我们这次的自动化测试项目,很少去用工具自带的检查点。QTP本身包含一些检查点,但是有局限性,有些需要直录产生的图片的支持,有些需要对象库的支持,不利于手工编码,也很不简洁。通过直接调用检查点函数,就能很方便的检查软件功能的期望效果,不依赖对象库,也不依赖图片。

  代码的配置管理没有做,这是缺陷,直接后果是对于测试代码形成的版本历史无法追溯。这跟公司使用的CVS有关。事实上使用QC+QTP的架构后,我们的版本控制依赖QC所支持的配管工具,其中微软的VSS和开源的Subversion是比较著名的2个,但是这些都不能和CVS兼容。

  2.3 无法识别的对象

  项目中比较棘手的是遇到对象无法识别,或者识别程度不够好。对象无法识别表示计算机对该对象一无所知,也就无法正常的操作对象或者获取该对象的运行时属性,涉及到该对象的功能就无法验证它的期望值。对象无法识别有两种原因造成,一种是测试工具本身的插件就不支持识别该对象,另一种是由于将要识别的对象放在容器里边而这种容器本身不能识别。举例来说:测试工具能够识别VB中的Label控件,但是当Label控件放置在PictureBox中,就无法识别了。原因:QTP的VB插件不能识别PictureBox,因为它这个插件本身就不支持该对象;PictureBox是个容器,将Label放在其中就有了嵌套关系,工具就不能直接定位和识别到Label了。对于类似PictureBox这样的对象,一般没有办法正常的识别,所幸的是自动化测试的检查点一般不会对容器做检查;对于放置在容器中的原来可以识别的对象,可以采用遍历函数来对整个Form进行遍历,找到名称和开发名称相同的,然后再返回所需要的属性值。

  对象识别程度不够好,一般指该对象的所有属性值不能唯一定义这个对象。测试工具针对这种缺陷提供了一个解决方案,就是在对象描述中有一个描述位置的属性 Ordinal Identifiers。这个属性值确定了相似对象在窗体中出现的顺序,从而能够让测试工具唯一识别。但是当某个类似对象脱离界面时,窗体中的所有类似对象就会重新排序,用之前的对象描述识别的是一个其他的类似对象。这种缺陷导致测试运行与界面的相关性提高,但目前没有更好的解决方法。在VS系列软件中,左侧菜单栏就存在这种缺陷。

本文为51Testing论坛会员xixihahahu原创,转载请保留作者及出处。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号