1、 中文3430英文2176 附录 1 外文译文 GUI 自动化测试研究 摘要 :指出了目前自动化测试所采用的录制技术存在的不足 , 针对不断变化的图形用户界面测试代码很难维护和扩展的问题 , 采用基于对象的捕捉技术 , 设计了以 Windows消息机制为基础的 GU IATF测试框架 , 实现了高度灵活并易于扩展的图形用户界面自动化测试。 关键词 : 软件测试 ; 回归测试 ; 自动化 0 引言 测试是一种旨在评估一个程序或系统的属性或能力 , 确定它是否符合其所需结果的活动。在整个软件开发过程中 , 从需求分析到系统设计直到代码实现
2、 , 都会出现或多或少的问题。如何保障软件的质量 , 软件测试就成为关键的技术。软件测试的工作量很大并具有一定的重复性 , 尤其在测试后期所进行的回归测试中( 回归测试在软件出现发展性的改变和修正性改变时运行 ), 需要验证以前发现的问题在新版本中是否解决 , 大部分测试工作是重复的。实现软件测试的自动化可以使大量的测试程序化地反复执行 , 不仅节约了大量的劳动力 , 而且提高了测试效率并保证了测试的质量。 1 录制技术的不足 目前一些录制技术被应用到图形用户界面的自动化测试中 , 在软件开发周期中 , 系统需要不断地更新和维护 , 为了保证测试质量 , 测试代码对不断
3、变化的系统要有很强的适应能力 , 换句话说 , 测试也同样需要维护 。 测试脚本的录制过程是根据具体的界面和操作进行的 , 一旦脚本的执行界面发生改变 , 运行就会出现异常 , 甚至仅仅是被操作对象位置的改变或图像分辨率的改变都可能会造成图形用户界面自动化测试的失败 , 因此 , 基于录制技术的自动化测试维护的代价相当高。另外 , 脚本录制的过程是固定的 , 所以脚本的运行会完全按照操作步骤 , 不具备灵活性。 2 自动化测试框架的提出 在目前的软件测试中 , 一个备受关注的问题是如何高效地实现图形用户界面的自动化测试 , 并使测试代码具有很高的灵活性。本文提出了一种基
4、于对象捕捉技术的 图形用户界面自动化测试框架 GUIATF( Graphics User Interface Automation Testing Framework), 为测试人员方便地创建并灵活地维护测试代码提供保证。当用户界面发生变化时 , 测试代码能很快地进行更新 , 对用户界面的变化有很强的适应能力。 3 GUIATF框架的工作原理 GUIATF框架的基础是消息机制,通过消息的发送来触发相应的事件。消息的初始接收器必须是窗口对象。 Windows消息通常直接由该窗口对象处理。 通常产生于应用程序主框架窗口的命令消息被传送到命令传送中描述的命令目标链。GUIAT
5、F框架要完成的任务是为测试人员开发自动化测试代码提供功能强大的接口 , 模拟测试用例中定义的用户操作 , 通知系统发送一系列的消息给应用程序 ,实现测试用例的自动化运行。 3.1 GUIATF的作用 图 1GUIATF的作用 从图 1可以看出 GUIATF将消息发送给系统 , 系统响应消息之后通知应用程序来触发对应的事件 , 完成测试用例中定义的一系列用户操作。 GUIATF是连接应用程序和用户操作的桥梁。在自动化测试过程中 , 测试用例是批量运行的 , 为了跟踪测试结果 , GUIATF需要不断记录执行过程、探测不期望出现的事件
6、以及在运行异常时保存现场截图。这些结果数据通过日志管理存储在日志数据库中 , 便于测试人员查看和分析测试结果。 3.2 GUIATF的结构 GUIATF框架由四个模块构成 : 对象定位、字符转换、消息发送和日志记录 ,如图 2所示。对象定位模块将用户要操作的控件对象转化为 GUIATF框架自身定义的自动化对象 , 然后再对其定位 , 在定位过程中 , 需要获取控件的一些属性信息 ,最常用到的是控件显示在界面上的名称。在不同的语言版本中 , 同一个控件的名称是不同的 , 字符转换模块提取当前环境的语言类型 , 将要检索的控件名称转换为当前语言环境中对应的名称 , 发送给对
7、象定位模块。对象定位成功后 , 消息发送模块将模拟用户操作的消息发送到被锁定的对象 , 比如 : 用鼠标点击被定位的按钮或在被定位的编辑框中录入信息等。在以上三个模块执行的过程中 , 日志跟踪模块分别记录它们工作的详细信息 , 以便自动化测试运行结束后 , 测试人员通过查看日志信息分析测试结果。 图 2GUIATF的结构 (1)对象定位模块 对象定位模块使 GUIATF框架在处理控件对象方面具备功能丰富的接口 , 测试人员通过调用它们可 以方便、高效地实现自动化对象的创建、检索自动化对象包含的子对象、激活对象、确定对象角色、状态和
8、位置等功能。应用程序中的每一个控件都属于主窗口中的子窗口 , 包括按钮、编辑框等 , 它们都是 Windows系统中的窗口。每个窗口都有一个窗口句柄作为其在系统中的唯一标识 , 对象定位模块通过获取窗口句柄将其转化为自身定义的自动化对象 , 主要定义如表 1所示。 表 1 对象定位模块主要成员函数及属性 成员函数及属性 功能 Public Constructor(stringName) 根据空间名称创建自动化对象 internal bool CheckForUnexpected Window() 检测不期望弹出的窗口 Pu
9、blic AllSearch FindAllChildren( string FindName) 检索所有子对象 PublicWinObj FindChild(Roles FindRole) 检索某个制定的子对象 Public bool VerifyChildDoesNotExist(Roles FindRole) 验证子对象不存在 Public int ChildCountget; 自对象数量 ( 属性 ) Public intWindowHandleget; 对象窗口句柄 ( 属性 ) Public string Stateget
10、; 对象状态 ( 属性 ) Public Roles Roleget; 对象角色 ( 属性 ) Public Rectangle Positionget; set; 对象位置 ( 属性 ) (2)字符转换模块 字符转换模块实现了 GUIATF框架跨语言自动化测试的能力。它将自动化对象的属性信息动态转换为当前语言环境下对应的表现形式。在应用程序中存在的每一个字符串都有一个 ID值 , 唯一地标识该字符串的含义 , 我们把它称为键 ( KEY),对于一个键 , 可以对应多个值 ( VALUE), 每一个值代表一种语言的表现形式。应用程序中包含的所有字符串组成一个键的集合 , 这个键集合对应了多个值集合 ,每一个值集合相当于一个语言包。比如 : 我们将一个英文版的应用程序汉化的过程就是用中文语言包中的汉语将英文替换。 图 3 字符 转换过程