本申请涉及律师案号为MSFT-4148题为“System and Method for Selecting TestCase Execution Behaviors for Reproducible Test Automation”(“选择用于复验自动化的测试实例执行行为的系统和方法”)的与本申请一起提交的美国专利申请,以及律师案号为MSFT-4149题为“Automated Test Case Verification that is LooselyCoupled with Respect to Automated Test Case Execution”(“相对自动化测试实例的执行松散耦合的自动化测试实例验证”)的与本申请一起提交的美国专利申请。
具体实施方法
纵览
测试实例的开发中的一个挑战是要准备提供综合性测试的测试实例集。较大比例的测试实例实施较小比例的测试中的用户动作。为了理解为什么这会发生,考虑通常可通过若干不同的用户动作来执行单个操作。例如,在微软Word中创建一新文档可通过以下动作来完成:
点击File(文件)菜单,点击New(新)子菜单,再点击New Document(新文档)菜单项。
按下Alt+F键调用File菜单,按下N键来调用New子菜单,然后按下N键来调用New Document菜单项。
按下Alt键调用主菜单并重复按向左箭头键直到选中File菜单,重复按向下箭头键直到选中New子菜单项,按向左箭头键一次以扩展New子菜单,重复按向下箭头键直到选中New Document菜单项,然后按下Enter键以调用New Document菜单项。
通过可访问API来调用New Document菜单项。
点击New Document工具栏按键。
通过可访问API调用New Document工具栏按键。
按下Ctl+N。
执行创建新文档的脚本对象模型方法。
应当测试这些打开文档的每一个不同方法,每一个都可能调用不同的代码路径。根据本发明某些实施例,实施所有可能的执行路径和数据值。
因为多个执行路径是普通的,验证处理在集内许多测试实例中都完全相同。常常,验证代码将被复制-粘贴到每个测试实例中。除了冗长且耗时外,还因此造成维护问题。例如,如果在执行或验证处理中进行随后的改变,必须找到并修改整个受影响测试实例集。根据本发明某些实施例,测试实例的维护定位于自动化堆栈中的单个位置,使得测试实例能几乎免于维护。
在典型的测试实例中,涉及测试实例执行的代码和涉及确定执行结果的代码(验证代码)被硬编码到测试实例本身。执行代码常常与验证代码相混和。根据本发明某些实施例,验证处理和执行处理的细节彼此分开并与测试实例分开。
通常测试实例并不区分测试操作和用来调用那些动作的步骤。对于每个执行方法常编写显式测试。例如每个测试可包括必须重复以调用要测试的操作的每个序列的鼠标移动、按键点击和键击的代码。对于UI测试,每个测试不得不跟踪由每个UI组件使用的那类控制、标识所使用的特定控制、并指定可在UI分层结构中的哪儿找到该控制。根据本发明的某些实施例,测试实例根据用户动作而不是根据执行细节来编写。因而用户界面细节与用户动作细节分开。
自动化测试实例通常极紧密地限于测试中的特定软件,即典型测试实例直接根据所测试的对象进行编码。例如,应用程序通过测试实例的自动化测试常常直接操纵该应用程序的状态。用于用户界面(UI)的自动化测试的测试实例常常被直接写入该UI的一个或多个控件,并通过显式编码测试实例中控制的名字或唯一标识符来标识控制。如果控制改变(例如从按键到列表框,甚至从一按键(例如按键36)变成另一按键(42)),则该UI的所有测试实例必须改变。
为了解决这些和其它问题,可创建从脚本测试实例、基于模型的测试和单元测试可使用的多层库。该库可包括物理层、逻辑层、验证层、执行行为管理层以及数据管理层的一个或多个层。物理层、逻辑层和测试实例可包括自动化堆栈,而验证、执行行为和数据管理层可分开但与逻辑层在同一层上。
逻辑层可基于可采取的动作(例如“打开文档”的动作)而不是用户界面的特定细节(例如诸如“打开File菜单并点击Open、等待File Open对话框打开、输入要打开的文件名、点击OK、等待File Open对话框消失、等待应用程序打开文档并为进一步的输入作好准备”的具体细节)来提供应用程序的视图。逻辑层还可提取尽可能多的用户界面实际的知识,从而当用户界面改变时无需编辑写入该层的测试。逻辑层还可将可变性引入执行的各个物理方法,从而可通过鼠标或键盘等执行写入该层的单个测试实例而无需对该测试实例有任何改变。
物理层将测试从与特定控制通信的高度特定细节中隔离开,包括诸如什么是特定控制的标识代码、以及如何访问该控制(通过鼠标、键盘等)的细节。物理层可提供围绕应用程序的用户界面的对象模型从而测试具有对该用户界面的强类型化访问。物理层还可使执行方法能独立于控制定义,从而无论执行方法有多少都只需单个对象模型。
验证层可独立于测试实例并与测试实例的直接联系隔离,从而对验证细节的改变无需对测试实例有任何改变。验证层可比较实际状态和期望状态以确定测试实例结果是否象期望的一样。
执行行为管理层可独立于测试实例并与测试实例的直接联系隔离,从而无需对测试实例作改变或仅需对其作最少改变就可改变执行行为的可用性或任何特定行为的实现。执行行为层可选择可应用于测试实例的一个或多个适当行为。执行行为层可确保实施所有可能的执行路径。
当测试实例需要测试数据时,数据管理层可由测试实例使用。数据管理层可提供所有测试数据的集中存储,并无需对测试实例作改变或仅需对其作最少改变就可改变测试数据或产生测试数据的方式。数据管理可确保实施所有可能数据值。
每个层可提供对其下层的(直接)访问但测试实例可按需调用任何层。例如显式验证菜单行为的测试实例可使用逻辑层来创建包含各种形状的绘图,然后使用该物理层来直接操作菜单,并去到用于结果验证的操作系统服务。可隐藏执行方法细节。写到逻辑层的测试在执行方法之间切换时可不需要变化。如果测试实例与执行方法完全隔离,则在测试实例外部并于之分开的机制可在编译时或运行时使用以指定应当对测试的特定运行使用哪种执行方法。
示例计算环境
图1和以下讨论旨在提供一种本发明的示例实施例可在其中实现的适当计算环境的简要一般说明。然而,应当理解手持式、便携式以及所有类型的其它计算装置可预期用于本发明。尽管以下所述为通用计算机,但仅是一个示例。本发明还可在与网络服务器互操作并交互的瘦客户机上操作。因而,本发明的示例实施例可在其中仅含极少或最少客户机资源的网络化主机服务的环境中实现,例如其中客户机装置仅用作万维网的浏览器或接口的网络化环境。
尽管不是必需的,本发明可通过由开发者使用和/或包括在网络浏览软件中的应用程序编程接口(API)来实现,它将在诸如程序模块的由一个或多个计算机(例如客户机工作站、服务器、或其它装置)执行的计算机可执行指令的一般上下文中描述。一般而言,程序模块包括执行特定任务或实现具体抽象数据类型的例程、对象、程序、组件、数据结构。通常,程序模块的功能可按需在各个实施例中组合或分布。此外,本领域技术人员将理解本发明可在其它计算机系统配置中实践。适用于本发明的其它众所周知的计算系统、环境和/或配置包括,但不限于,个人计算机(PC)、自动取款机(ATM)、服务器计算机、手持式或膝上型装置、多处理器系统、基于微处理器的系统、或可编程的电子消费品、网络PC、小型计算机、大型计算机等等。本发明的实施例还可在任务由经通信网络或其它数据传输介质链接的远程处理装置执行的分布式计算环境中实践。在分布式计算环境中,程序模块可置于包括存储器存储装置的本地和远程计算机存储介质中。
因而图1示出本发明可在其上实现的适当计算系统环境100的示例,尽管如上阐明的,该计算系统环境100仅是适当计算环境的一个示例,并非旨在提出对本发明使用或功能性范围作任何限制。计算环境100也不应被解释为对示例性操作环境100中所示的任一组件或其组合有任何依赖性或任何需求。
参照图1,用于实现本发明的示例系统包括以计算机110形式的通用计算装置。计算机110的组件可包括,但不限于,处理单元120、系统存储器130以及把包括系统存储器在内的各种系统组件耦合到处理单元120的系统总线121。系统总线121可能是若干总线结构类型中的任何一种,包括存储器总线或存储器控制器、外围总线、以及使用多种总线架构的任一种的本地总线。作为示例,而非限制,这些架构包括工业标准架构(ISA)总线、微信道架构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)局部总线和外围部件互连(PCI)总线(也称为Mezzanine总线)。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是能被计算机110访问的任何可用介质,并包括易失性和非易失性介质、可移动和不可移动介质。作为示例,而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以任何方法或技术实现、用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的易失性和非易失性介质、可移动和不可移动介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字化多功能光盘(DVD)或其它光学存储技术、磁盒、磁带、磁盘存储器或其它磁性存储设备、或任何其它可用于存储所需信息并可由计算机110访问的介质。通信介质通常在诸如载波或其它传输机制的已调制数据信号中体现计算机可读指令、数据结构、程序模块、或其它数据,且包括任何信息输送介质。术语“已调制数据信号”意指以在信号中编码信息的方式设置或改变其一个或多个特征的信号。作为示例,而非限制,通信介质包括诸如有线网络或直线连接的有线介质,和诸如声学、射频(RF)、红外线和其它无线介质的无线介质。以上任何介质的组合也应包括在计算机可读介质的范围中。
系统存储器130包括诸如只读存储器(ROM)131和随机存取存储器(RAM)132的易失性和/或非易失性存储器形式的计算机可读介质。包含有助于如起动时在计算机110内元件间传送信息的基本例程的基本输入/输出系统(BIOS)133通常存储在ROM 131中。RAM 132通常包含可被处理单元120立即访问和/或当时正被操作的数据和/或程序模块。作为示例,而非限制,图1示出了操作系统134、应用程序135、其它程序模块136、和程序数据137。
计算机110还可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。作为示例,图1示出了读取和写入不可移动、非易失性磁性介质的硬盘驱动器141,读取和写入可移动、非易失性磁盘152的磁盘驱动器151,读取和写入可移动、非易失性光盘156,诸如CD-ROM或其它光学介质的光盘驱动器155。其它也在示例性计算环境中使用的可移动/不可移动、易失性/非易失性计算机存储介质包括,但不限于,如磁带、闪存卡、数字化多功能光盘、数字化录像带、固态RAM、固态ROM等等。硬盘驱动器141通常通过诸如接口140的不可移动存储器接口与系统总线121连接,而磁盘驱动器151和光盘驱动器155通常通过诸如接口150的可移动存储器接口与系统总线121连接。
如上所述并如图1所示的驱动器及其相关联的计算机存储介质为计算机110提供计算机可读指令、数据结构、程序模块、和其它数据的存储。在图1中,例如,硬盘驱动器141被示为存储操作系统144、应用程序145、其它程序模块146、和程序数据147。注意这些组件可以与操作系统134、应用程序135、其它程序模块136、和程序数据137相同或不同。在此给予操作系统144、应用程序145、其它程序模块146、和程序数据147的编号不同至少说明他们是不同的副本。用户可通过诸如键盘162、以及通常称为鼠标、跟踪球或触摸板等的定位装置161的输入装置向计算机110输入命令和信息。其它输入装置(未示出)可包括话筒、操纵杆、游戏垫、卫星接收天线、扫描仪等等。这些和其它输入设备常常通过与系统总线121耦合的用户输入接口160与处理单元120相连,但也可通过诸如并行端口、游戏端口或通用串行总线(USB)的其它接口和总线结构连接。
监视器191或其它类型的显示设备也可通过诸如视频接口190的接口与系统总线121相连。诸如“North-bridge”的图形接口182也可连接至系统总线121。“North-bridge”是与CPU或主机处理单元120通信的芯片组,并承担与加速图形端口(AGP)通信的责任。一个或多个图形处理单元184(GPU)184可与图形接口182通信。在这方面GPU 184一般包括诸如寄存器存储的芯片内存储器存储,且GPU 194与视频存储器186通信。然而,GPU 184仅是协处理器的一个示例,因而在计算机110中可包括各种协处理装置。监视器或其它类型的显示装置也可通过诸如视频接口190的接口与系统总线121相连,该接口还与视频存储器186通信。除监视器191以外,计算机还可包括诸如扬声器197和打印机196的其它输出设备,它们通过输出外围接口195相连。
计算机110可以在使用与一台或多台远程计算机,诸如远程计算机180的逻辑连接的网络化环境中运行。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等装置或其它公共网络节点,而且通常包括上述与个人计算机110相关的许多或全部组件,尽管在图1中仅图示了存储器存储设备181。图1中所描绘的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可包括其它网络。这样的网络化环境在办公室、企业范围计算机网络、内联网和因特网上是常见的。
当用于LAN网络化环境中时,计算机110通过网络接口或适配器170与LAN171连接。当用于WAN网络化环境中时,计算机110通常包括调制解调器172或其它用于在诸如因特网的广域网173中建立通信的装置。可以是内置式或外置式的调制解调器172通过用户输入接口160或其它适当机制与系统总线121连接。在网络化环境中,与计算机110相关的程序模块或其一部分可存储在远程存储器存储装置中。作为示例,而非限制,图1示出了驻留于存储器装置181中的远程应用程序185。应当理解,所示网络连接是示例性的,且也可以使用其它用于在计算机间建立通信连接的方法。
本领域技术人员可理解,计算机110或其它客户机装置可用作计算机网络的一部分。这样,本发明适合具有任何数量存储器或存储单元的任何计算机系统、以及在任何数量存储单元或存储体上发生的任何数量的应用程序和进程。本发明可应用于带有可用于网络环境的具有远程或本地存储器的服务器计算机和客户计算机的环境。本发明还可应用于具有编程语言功能、编译和执行功能的独立计算装置。
自动化堆栈分层
在本发明某些实施例中,通过对应用程序采取与对象模型视图或其它类型视图相反的用户中心视图的逻辑功能模型来定义应用程序。不断重复使用的代码可用用户中心方式来组件化。例如,动作可按逻辑层中的目标来分组,SceneElements可包含影响活动景物上诸如创建、选择、取消选择、剪切、复制、粘贴、删除元素的元素集的方法。变换方法组可具有旋转、缩放、并以其它方式将变换应用于景物元素的方法。路径可包含操纵是路径的景物元素的方法等。在大多数应用程序中,大多数用户动作可用多种不同方法来执行。不同执行方法所需的基础结构通常是相同的。因此,在本发明的某些实施例中,执行行为管理器在各测试实例上共享,并为测试实例选择适当的行为(逻辑功能模型方法)。在本发明某些实施例中,在测试实例或逻辑功能模型方法执行一种操作之前,通知验证管理器。验证管理器可存储应用程序的完全当前状态的一个副本。该副本形成操作完成时的期望状态的基础。在本发明某些实施例中,测试实例执行一序列的动作而不知道如何执行或验证这些动作。
图2是根据本发明一实施例示出使用分层体系结构的示例性自动化测试系统的框图。图2的自动化测试系统可使能测试实例创建和维护中的效率从而可使用较少的测试实例来完成更综合性的测试。测试实例更易于创建、更易于维护并更易于理解。
自动化测试系统250可驻留于一个或多个计算机上,诸如参照图1所述的示例性计算机110。自动化测试系统250可包括一个或多个测试执行器252、数据管理器254、行为管理器256以及相关联的行为数据库(未示出)、验证管理器258和自动化堆栈200。测试执行器252可根据应用程序262来执行测试实例260。数据管理器262在本发明某些实施例中可提供测试实例260所需的测试数据。数据管理器可提供对集中存储的所有测试数据的访问,并允许测试数据或对产生测试数据的方式进行改变而无需改变测试实例或只需测试实例的极少改变。
行为管理器256可从行为数据库中选择测试实例260的适当行为。验证管理器258可提供对执行测试实例260的结果的验证。
图3是根据本发明一实施例示出自动化测试系统的自动化堆栈的示例性分层体系结构的框图。图3是图2系统一部分的更详细框图。在图3中,自动化库200可包括一个或多个层。自动化库200的每个层可包括一个或多个对象集。自动化库200的层可包括以下的一个或多个:物理层202、逻辑层204、测试实例层206中的一个或多个测试实例、综合性验证层208、行为层210以及数据管理层213。行为层210可包括执行行为管理器212和执行行为数据库214。或者,执行行为可驻留在逻辑层204中。
自动化库200可包括一个或多个物理层202、逻辑层204、以及测试实例层206中的一个或多个测试实例,而执行行为层210、综合性验证层208以及数据管理器层213可存在于自动化体系结构堆栈230之外。在本发明某些实施例中,执行行为层210、综合性验证层208、以及数据管理层213尽管与逻辑层204分开却都被结合到逻辑层204中。因为执行行为层210、综合性验证层208、以及数据管理层213都与逻辑层204分开,可从体系结构堆栈外部访问执行行为层210、综合性验证层208、以及数据管理层213。
自动化库200可代表系统库上的包括一个或多个组件的一个层,例如以下的一个或多个:操作系统、外部工具、图形动画子系统等。在图2中,示例性系统库240包括内部测试自动化模块216、可存取性模块218、UI自动化模块222、图形动画子系统228(包括图形动画对象模型220和图形动画应用程序224)、以及系统层应用程序226。
自动化库200可包括图形动画子系统228的布局和控件。自动化库200的布局部分可包括图形动画子系统228的每个视觉元素实例的类。即,布局部分可包括表示图形子系统228的“顶层”视觉元素的所有类,这些“顶层”视觉元素诸如但不限于:新项目对话框、一个或多个工具箱窗格、以及主菜单。控件部分可包括每种视觉元素的类。即,控件部分可包括用于图形动画子系统的所有系统和定制控件的类,这些控件诸如但不限于:按键类、组合框类、文本框类、以及色彩选择器类。这些控件仅可通过顶层元素(例如通过主菜单、工具箱窗格、或新项目对话框)访问。自动化库200的控件部分中的每个控件可包括访问和操纵控件所需的所有方法和属性,包括所有输入方法的实现(例如通过键盘、鼠标、可存取性软件等)。
自动化库200可用于引导任何类型的测试,包括基于模型、集成、性能、载入、压力、接受、单元、建立验证、基本功能、退出标准、综合性/扩展功能、局部化、全局化、可访问性以及其它测试。自动化库200可通过已写成脚本的测试实例来访问或包括这些测试实例。或者,访问或包括在自动化库200中的测试实例可用XML、编译语言、字节代码、数据库、文本、表格等来表示。
自动化库200的每个层可直接访问(或调用)下面的层。即,测试实例层206可直接访问逻辑层204。逻辑层204可直接访问物理层202等。在本发明某些实施例中,向一个层提供了访问或调用更深一层的装置,即,例如在需要时测试实例直接访问内部测试自动化层216、物理层202等是可能的。
测试实例层206可包括应用于要测试的应用程序或模块、特征或功能的一个或多个测试实例。可将测试实例写成脚本。写到逻辑层204的示例性测试实例可以是,例如:
Start Graphics Animation Subsystem
Add a new Project
Draw a rectangle from 0,0 to 4,4
Set the color of the rectangle to red
Save the project
Shut down the Graphics Animation Subsystem
可以理解,以上示例性测试实例所缺少的是涉及结果验证的代码、涉及执行选项的代码、涉及标识诸如控件的特定UI元素的代码等。由于封装了应用程序的逻辑操作,测试实例层206的写到逻辑层204的测试实例因此应当几乎不需要随自动化库200中的变化而改变。
在本发明某些实施例中,逻辑层202涉及应用程序期望执行的功能而不是每个功能的操作如何实现。逻辑层202可封装或包装图形动画子系统228的逻辑操作,提取逻辑操作的实现特性。在本发明的某些实施例中,逻辑层202提取掉UI的所有知识并提供在测试实例层206、验证层208、行为层210和数据管理器层213的测试实例之间的接口。逻辑层202还可提供图形动画对象模型220(图形动画应用程序224的内部状态)以及测试实例之间的接口。逻辑层可提供用来执行单个用户动作的一序列动作的可变性。
物理层202提取执行方法使得写入物理层的测试实例不必说明执行细节,诸如控件是否通过使用鼠标、或键盘、可存取性软件等来调用。物理层可提供用来与特定控件交互的方法的可变性。物理层202还可提供围绕UI的对象模型,即物理层202可提供与UI的接口。因此,当应用程序或UI中的元素改变时,可在物理层中而不是在所有测试实例中作出改变。
写入物理层的另一示例性测试实例可以是,例如:
Start Graphics Animation Subsystem
Invoke the File menu
Invoke the New submenu
Invoke the New Project menu item
Type the name to give the new project
Close the New Project dialog box
Wait for the Graphics Animation Subsystem to finish creating the new project
Activate the rectangle shape tool
Drag the mouse from 0,0 to 4,4
Select“Red”from the list of possible stroke colors in the color-properties pane
Invoke the File menu
Invoke the Save menu item
Wait for the Graphics Animation Subsystem to finish saving the project
Invoke the File menu
Invoke the Exit menu item
Wait for the Graphics Animation Subsystem to shut down
可以理解,以上示例性测试实例没有指定动作(例如“Invoke the File Menu”(“调用菜单项”))如何实现(即未指定执行路径)。因为执行管理器从全体可能执行路径中选择,运行测试实例多次将执行所有可用的执行路径多次。因为所有的验证代码驻留于测试实例之外,可更完整地进行验证处理而无需改变测试实例。类似地,如果任一动作的期望结果包括变化,测试实例也无需改变。可以理解,测试实例并不包含对任何UI的引用。因此,如果UI改变则测试实例无需改变。可以理解,测试实例集中于用户可能采取的动作上。
测试实例写入的物理层中的相应代码可如下:
class UIPane
{
UIButton Minimize{return new UIButton(“idOfTheMinimizeButton”);}
UIButton Restore{return new UIButton(“idOfTheRestoreButton”);}
UIButton Close{return new UIButton(“idOfTheCloseButton”);}
}
class UIColorPane derives from class UIPane
{
UIComboBox AvailableColorsForFill{return new UIComboBox
(“idOfTheAvailableFillColorsComboBox”);}
UIColorPicker CustomColorsForFill{return new UIColorPicker
(“idOfTheCustomFillColorColorPicker”);}
UIComboBox AvailableColorsForStroke{return new UIComboBox
(“idOfTheAvailableStrokeColorsComboBox”);}
UIColorPicker CustomColorsForStroke{return new UIColorPicker
(“idOfTheCustomStrokeColorColorPicker”);}
}
class UIButton
{
Area boundingBox;
UIButton(identifier)
{
GraphicsSubsystem.Control control=GraphicsSubsystem.FindControl(identifier);
boundingBox=contro1.BoundingBox;
}
Invoke()
{
ScreenCoordinate clickPoint;
clickPoint.x=boundingBox.Left+(boundingBox.Width/2);
clickPoint.y=boundingBox.Top+(boundingBox.Height/2);
Mouse.Move(clickPoint);
Mouse.Click();
}
}
因为逻辑层204仅与功能相关而与实现细节无关,且因为大多数测试实例被写入逻辑层204,所以测试实例可在软件生命期中前期编写。一旦代码完成,可运行测试实例,因而可更早更快地进行更多的测试。
综合性的验证层208在本发明的某些实施例中封装验证处理。逻辑层204在本发明某些实施例中在逻辑层204执行测试实例之前通知验证层208以使验证层208能取得测试前状态的抽点打印。在执行测试实例之后,逻辑层204通知验证层208已执行测试实例。然后验证层208可确定实际结果是否与期望结果一致。其它有关验证层的信息可在相关的律师案号为MSFT-4149题为“Automated Test CaseVerification that is Loosely Coupled with Respect to Automated Test Case Execution”(“相对自动化测试实例的执行松散耦合的自动化测试实例验证”)的美国专利申请中找到。
逻辑层204在某些实施例中对每种实现逻辑操作的方法实现(执行行为214的)特定行为。例如,在本发明某些实施例中,对于CreateNewProject行为,这将包括实现应用程序的对象模型、发送一序列键击、通过可存取性模块调用菜单项、使用鼠标调用菜单项、使用箭头键在菜单上导航来调用菜单项、并使用助记字符导航菜单来调用菜单项。执行行为层可确定哪些行为与逻辑操作相关。
在本发明某些实施例中,对每种实现逻辑操作的方法可实现一独立行为(存储在执行行为数据库214、逻辑层202或其它地方)。行为的使用使得编写少得多的测试实例同时仍然提供同样程度综合性的测试成为可能。执行行为层210的执行行为管理器212在本发明某些实施例中确定各执行行为214中的哪些行为与考虑中的逻辑操作相关。在本发明某些实施例中,加权因子和其它设置可用来选择一特定行为。有关行为层210的其它信息可在相关的律师案号为MSFT-4148的题为“System and Method for Selecting Test Case Execution Behaviors for ReproducibleTest Automation”(“选择用于复验自动化的测试实例执行行为的系统和方法”)的美国专利申请中找到。
然后逻辑层204可使用选定行为来执行操作。在本发明某些实施例中选择机制可在运行时配置。该特征使测试行为能更改而无需更改测试实例本身。例如,如果制作菜单机制最近已重新编写,则可能需要使用制作菜单机制来执行动作,一般给予新代码好的测试。或者,如果在快捷键处理中有一已知缺陷,则在修复缺陷之前需要对使用快捷键的方法避免使用。该改变可通过行为层而不在测试实例本身中进行。
图4是在自动化测试中使用体系结构堆栈的方法的流程图。在步骤402,接收写入体系结构堆栈的测试实例。该测试实例可被写入逻辑层。或者,测试实例可被写入堆栈中的较深层。在步骤404,可向验证层发送将执行测试实例的通知。在本发明某些实施例中,取得应用程序的测试前期望状态的抽点打印。在步骤406,解析测试实例的语句。在本发明某些实施例中,测试实例的每个语句表示一逻辑操作。在步骤408,确定与逻辑操作相关的行为。测试实例本身并不实现每个步骤的细节,而是向执行行为管理器询问适当的行为。在本发明某些实施例中,执行行为层的执行行为管理器确定在执行行为数据库中的哪些行为与考虑中的逻辑操作相关。执行行为管理器可浏览用于实现测试实例中步骤的各个行为之间的关系集并作出选择。加权因子和其它设置可用来选择一特定行为。在步骤410可使用选定行为来执行操作。对测试实例中的每个语句可重复步骤406到410。在步骤412可通知验证层已执行测试实例。验证层可确定实际结果是否与期望结果一致。或者,验证处理可在执行测试实例中每个语句之后进行。
在此所述的各种技术可用硬件、软件、或在适当时用两者的组合来实现。因而,本发明的方法和装置或其某些方面或部分可采取包括在诸如软盘、CD-ROM、硬盘、或任何其它机器可读的存储介质的有形介质中的程序代码(即指令)的形式,其中当程序代码由诸如计算机的机器载入并执行时,该机器变成实践本发明的装置。程序代码在可编程计算机上执行的情形中,计算装置通常包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储单元)、至少一个输入装置、以及至少一个输出装置。可例如通过使用数据处理API等利用本发明的领域专用编程模型方面的创建和/或实现的一个或多个程序,最好用高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,如果需要程序也可用汇编或机器语言来实现。在任何情形中,语言可以是编译或解释语言,并可与硬件实现相组合。
尽管本发明已结合各附图的优选实施例进行了描述,可以理解可使用其它实施例或可对所述实施例作更改和添加来执行本发明的相同功能而不从其背离。因此,本发明应不限于任一单个实施例,而应根据所附权利要求在宽度和范围内作解释。