具体实施方式
现在将参考示出的示例,并且这里将使用特定语言来描述相同的事物。然而应当理解的是,没有由此意图对该技术的范围的限制。由以下的详细描述并结合附图,其通过示例的方式共同示出了该技术的特征,该技术的附加特征和优点将是清楚的。
在软件工程中的测试用例是一组条件或变量,在该组条件或变量下测试人员将确定应用或软件系统是否正确工作。设计测试用例可能是测试编写者的日常工作的耗时部分。用于设计测试用例的一种常见的方法是手动编码来准备输入,标识预期输出,并确定测试自动化框架所提供的功能对于在诸如例如web客户端之类的客户端中所选择的对象是否适当。本技术可由测试编写者使用以用灵活的集成开发环境(IDE)来简化测试用例设计和维护。例如,该技术可以用来为客户端标识web应用中的对象,设计测试自动化框架,分析数据库模式以帮助准备输入,以及提供工作流引擎来支持测试用例步骤之间的数据传输。该技术可以改进测试用例编写者的生产力和效率。
为客户端创建测试用例的示例方法可包括使用超文本标记语言(HTML)解析器模块来标识客户端中的对象。用于测试客户端的潜在的测试用例功能或任务的列表可以从测试自动化框架填充到测试用例任务窗口中。通过将来自潜在测试用例任务的列表的所需任务放置在测试用例开发窗口内可以构建测试用例流。可以通过向下钻取到所需任务中来继续该方法以分配对象到测试用例开发窗口中的所需任务。测试用例可以从测试用例流生成。
为了编写测试用例,测试编写者熟悉客户端或web应用的上下文。编写测试用例的典型方法使用基本文本编辑器应用,测试用例编写者通过其编写测试用例。测试用例编写者可以尝试标识web应用中的对象,并可以进一步基于测试应用所使用的数据库模式来准备测试数据。测试用例编写者也可以根据所需的执行序列来将通过测试自动化框架可用的各种功能编码到测试用例中。文本编辑器可以用来在将测试用例放置到测试自动化框架内之前使测试用例定稿。
虽然很多第三方工具可以帮助测试编写者来标识web应用中的对象,但这些工具不能与测试自动化框架一起良好工作。同样,这些工具一般不分析数据库模式。其结果是,手动准备和维护测试用例编码的复杂性可以是复杂和紧张的。
与此相对,这里用于创建测试用例的技术可以与现有的产品开发环境集成,包括数据库模式和测试自动化框架。该技术可用于自动标识web应用中的对象,自动分析数据库模式,标识用于web应用中的对象的合适的功能,并可以用于用图形用户界面(GUI)工具(诸如例如通过拖放)设计测试用例。工作流引擎可用于支持测试用例步骤之间的测试用例转移。
参照图1,根据一个示例,用于为客户端115创建测试用例的系统100被示出。该系统可包括测试用例服务器110上的测试自动化框架120,测试自动化框架120具有用于测试客户端的各种功能或任务。测试自动化框架120可以使用功能模块125来标识和分析功能以在客户端中的对象和功能之间构建关系。在一个方面中,功能模块可以是HTML解析器模块。为了缩小针对特定对象的一组功能,测试自动化框架120可以基于对象的类别来使用映射规则。当测试编写者在设计测试用例时选择特定对象的时候,如下面进一步描述的那样,相关的测试功能或任务可以被列出并显示在GUI弹出窗口中。流构建器也可以填写一些功能的参数值,以减少来自测试编写者的输入量。例如,一些功能可能只使用与特定的对象结合的特定的参数值,并且值的自动填充可以节省测试编写者的时间和精力。
功能模块125还可以被用于标识客户端中的对象。功能模块125可以将功能填充到测试用例功能窗口中。该技术可以自动分析web应用或客户端115,并收集对象和关于对象的相关信息。例如,相关信息可能包括对象名称、类别等等。该技术还可以使能手动输入或标识对象。例如,测试编写者可能想手动输入对象到测试用例中,其中web应用尚未工作或web应用尚未开发。
系统100可以包括数据库分析模块140。数据库分析模块可以标识客户端或web应用所使用的数据库135。数据库分析模块可以进一步读取数据库的模式,以及分析表的定义和任何到数据库中另一个表的链接。作为数据库分析的结果,数据库分析模块可以在构建测试用例流中使用的用户界面中显示数据库元素的分层图形显示。该分层图形显示可以包括元素,诸如正常字段、结构(一对一链接)以及集合(一对多链接)。利用数据库分析模块,测试用例编写者可以很容易地一次为多个表准备测试数据。
该系统100可以包括开发模块130。开发模块130可以通过将来自各种可用功能的所需功能放置在测试用例开发窗口中来使能构建测试用例流。测试用例开发窗口可以使用显示模块145来提供GUI,通过该GUI测试编写者可以选择对象或功能并通过拖放界面将对象或功能放置在容器中。GUI可以提供被拖放到界面内的对象或功能之间的箭头和/或线。例如,箭头或线可标识功能的执行顺序、或者功能或对象的关联。
系统100可以包括向下钻取模块150。向下钻取模块150可以使到所需功能中的向下钻取能够在测试用例开发窗口中分配对象到所需功能。例如,通过在对象或功能上双击鼠标,测试用例编写者可以向下钻取到对象或功能的属性中以定义属性或行为。
系统100可以包括预览模块155。该预览模块可以给测试编写者提供可选的预览功能。例如,当由测试编写者选择时,预览模块可以在从测试用例流生成测试用例之前显示测试用例的预览。因此,预览模块可以使测试编写者能预览测试用例,并在测试用例生成前标识潜在的问题。例如,预览测试用例可以协助测试编写者验证测试用例的布局或调整测试用例的风格。预览模块也可以检查每个功能的语法以及输入功能值的可用性。检查语法和输入值可以帮助避免在最后的测试用例中的死循环。
系统100可以包括生成模块160。该生成模块可从使用开发模块130构建的测试用例流来生成测试用例。生成模块可以包括超文本标记语言(HTML)模块170和/或可扩展标记语言(XML)模块165。HTML模块可以生成HTML格式的测试用例。XML模块可以生成XML格式的具有相关信息的测试用例。最终的测试用例输出是指工作测试用例。测试用例可以被放置到测试自动化框架环境中,在其中测试用例被执行,并且从其可以生成测试结果。
生成模块可以包括工作流引擎或处理器,用于生成从测试用例流中的从一个步骤到下一个步骤的移动。例如,在预定义的条件下已经完成前一步骤后,工作流引擎可以移动到下一步骤。
生成模块还可以被配置为维持所设计的测试用例的整个上下文。例如,上下文可以被保持在XML文件中,并可以为了编辑、审查等等而被按需重新加载。
系统100可以进一步包括处理器175、存储器180、I/O总线185以及在执行所描述的模块功能中由各种模块使用的其他组件。在一个方面中,存储器180可以包括程序指令,当其被处理器175执行时,充当上面描述的模块。在一个方面中,所述程序指令可以采取安装包的形式,当其由处理器安装和执行时充当描述的模块。该存储器可以包括随机访问存储器(RAM)、只读存储器(ROM)、压缩盘(CD)、数字视频盘(DVD)、硬盘驱动器(HDD)、固态驱动器(SSD)等等中的一个或多个。
所描述的系统100可以允许与现有的数据库模式、现有的测试自动化框架的集成,并提供对象分析和测试用例预览。该系统可为测试编写者提供大量的时间和成本节省。例如,测试用例设计可以使用该系统在一天之内被设计,否则的话可能耗费测试编写者一个星期来准备。
现在参看图2,流构建器图200说明了使用拖放界面构建测试用例工作流。工具栏205可以提供有用的任务设计工具,诸如启动(START)、停止(STOP)、导入(Import)、客户端(Clieet)和数据(Data)。任务是特定的对象或功能上的一组动作。任务窗口210可以列出工作流中所涉及的任务。工作流通常可由许多任务组成,并且每个任务可以与特定的对象或功能相关联,并分配相关动作给该对象或功能。可以提供流窗口215来通过相应地选择对象和设置相关动作而添加新的任务。新添加的任务也可以在任务窗口210中显示。
测试编写者可以通过将开始任务从工具栏拖动到流窗口来开始。如图2所示,除其他之外,各种其他任务可以被拖入流窗口中,诸如导入和数据。一旦流已用所需功能创建,测试编写者就可以拖动停止任务到流窗口中。任务可以由指示任务的执行顺序的线或箭头来连接。因此,测试编写者可以很容易地将测试用例流从开始到结束的进展可视化,包括各种中间的功能。
图3描绘了来自流构建器中的流的过滤器功能310的向下钻取图300。向下钻取窗口使测试编写者能为特定的控件或功能设置属性。可用动作窗口315还允许测试编写者选择相关动作来添加功能。所选动作可以在所选动作窗口320中列出。该功能或相关的动作的参数也可以在参数输入窗口325中输入。如上所述,可以自动或提前填充一些参数。图3示出来自下拉列表的第二个参数的测试编写者的选择。下拉列表的内容可以通过HTML解析器模块/功能模块从web应用收集。
图4示出了来自流构建器中的流的文本字段功能410的另一种向下钻取图400。该向下钻取窗口允许测试编写者为文本框控件设置属性。例如,可以提供可用动作列表415。用户可以选择所需的动作并添加该动作到所选动作列表420。动作的参数可以在输入参数字段425处被设置。在此示例中,参数1是命令名称,参数2是控件字段的名称,其被自动标识,以及参数3是输入参数。
如上所述,流构建器可以分析并导入数据库信息。图5示出了来自流构建器中的流的导入功能的向下钻取图。更具体地说,图5说明了测试数据的准备。测试编写者可以从从其进行操作的可用表的列表510选择表。所选择的表可以被添加到所选表窗口515中。来自所选表的字段随后可以在选择字段窗口520中被选择。向下钻取窗口可以使测试编写者能在字段输入窗口525中输入每个字段的值。字段输入窗口可以包括所选字段的各种输入或参数的列表。
在要导入的数据已经如上面有关图5所描述的那样被定义和配置后,系统可以允许用户预览测试数据。图6示出从数据库中的amCable610和amPortfolio615表中导入的数据的预览。因此,测试编写者可确定表和数据是否已被正确标识、导入、配置等。
图7示出全部测试用例的预览。预览可使用预览模块生成并使用显示模块显示。从图2的流构建器窗口中定义的测试用例工作流中可以生成测试用例的预览。
测试用例预览可能类似于上面描述的HTML输出测试用例。该系统还可以输出测试用例的XML文档,其包括除了HTML输出中包含的内容之外的上下文信息。更具体地,XML文档可以容纳工作流的内容和上下文两者。XML文档可以包括控件、工作流和功能。XML文档可以重新加载到测试用例流设计工作室,以使能工作流的修改而无需从web应用重新标识控件。在图7中预览的测试用例的示例摘录的XML流在图8中被示出(“...”指示修订部分)。
参照图9,示出了为客户端创建测试用例的方法900的流程图。该方法可以包括使用功能模块,诸如解析器模块,或者更具体地,HTML解析器模块,来标识910在客户端或web应用中的对象。用于测试客户端的潜在测试用例功能的列表可以从HTML解析器模块填充920到测试用例任务窗口中。该方法还可以包括标识客户端所使用的数据库,读取数据库的模式,和/或分析表的定义和到数据库内另一表的任何链接。此外,该方法可以在构建测试用例流中使用的用户界面中显示数据库元素的分层图形显示。
可通过从潜在的测试用例任务列表中将所需的任务放置在测试用例开发窗口中来构建930测试用例流。例如,用户可以通过将所需的任务从测试用例功能窗口拖放进入测试用例开发窗口来将所需的任务放入测试用例开发窗口中。所需的任务可以是多种任务中的任何任务中的一个或多个。任务中的一个或多个对于对象可以是可分配的。
用户可以向下钻取或以其他方式选择所需任务以分配940对象给测试用例开发窗口中的所需任务。该方法还可以包括将输入值分配给至少一个任务,用于到测试用例的客户端的输入。例如,分配输入值可以包括分配数据操纵给任务中的至少一个以操纵客户端所使用的数据库中的数据。测试用例可以从测试用例流来生成950。在一个示例中,测试用例可以被生成为超文本标记语言(HTML)测试用例文档,其包含基于所需任务的用于客户端的HTML命令。在另一个示例中,测试用例可以被生成为XML(可扩展标记语言)文档,其包括HTML命令、所期望的功能和对象的标识。用户可能希望在生成HTML或XML输出(或生成为任何其他期望的格式、高级语言等等)之前预览测试用例。因此,该方法可以包括在从测试用例流生成测试用例之前选择性地显示测试用例的预览,以使用户能够在生成测试用例之前预览测试用例并标识潜在问题。
图10示出了为客户端创建测试用例的另一种方法1000的流程图。该方法可包括使用解析器模块/功能模块标识1010客户端中的对象。HTML解析器是解析器模块的一个示例,但也可以使用其他类型的解析器模块。用于具有对象使用的数据的客户端的数据库可以被分析1020。用于测试客户端的潜在测试用例任务的列表可以从HTML解析器模块填充1030到测试用例任务窗口中。测试用例流可以通过将所需的任务从潜在测试用例任务的列表放置在测试用例开发窗口中来构建1040。在测试用例开发窗口中,通过向下钻取或以其他方式选择所需的任务,用于所需任务的功能、动作或关联可被应用1050到对象和数据中的至少一个。然后可以从测试用例流生成1060测试用例。
参照图11,使用存储器1110、处理器1120和/或计算机可读介质可以实现系统1100和/或方法。例如,制品可以包括存储器或计算机可用存储介质,其具有嵌入到其中的用于验证对象的计算机可读程序代码或指令1115以及包括能够执行所描述方法的操作的计算机可读程序代码。在另一个示例中,存储器可以包括含有从其软件可以被安装的安装文件的便携式存储器或从其安装文件可以被下载的远程存储器。此外,存储在存储器中的程序指令可以体现在安装文件或已安装文件中。
在一些示例中,测试用例开发工具可以与测试自动化框架集成,测试自动化框架如基于Ruby、Fixture或Watir的框架。测试用例开发工具可以被用来读取和分析数据库模式,包括数据库模式的基于XML的文件。测试用例开发工具可以分析HTML文件来标识对象。在一个示例中,在对象的分析和标识之前web页面可以被转换成HTML文件。输出XML文件可以包括测试用例的上下文,包括已标识对象及相关属性和行为、容器中的每个对象的坐标、执行序列、数据库模式信息等等。测试用例开发工具也可用于检查在测试用例中的语法、拼写和其他问题。
某些示例的方法和系统可以以硬件、软件、固件或它们的组合实现。在一个示例中,该方法可以由存储在存储器中并通过适当的指令执行系统执行的软件或固件来执行。如果用硬件实现,作为一个替代的示例,该方法可以用本领域公知的任何合适的技术来实现。
可以存储在非临时性的机器可读介质中以允许计算机执行上述的任何一种方法的程序或代码的实现也在示例的范围内。例如,实现可以体现在任何计算机可读介质中,以便由诸如基于计算机/处理器的系统或ASIC(专用集成电路)的指令执行系统或可以从计算机可读介质中获取或取得逻辑并执行其中所包含的指令的其他系统来使用或与之连接。“计算机可读介质”可以是可以包含、存储、或维持程序指令和数据以便由诸如处理器这样的指令执行系统来使用或与之连接的任何介质。计算机可读介质可以包括许多物理介质中的任何一种,诸如例如,电子、磁、光学、电磁或半导体介质。合适的计算机可读介质的更具体的示例包括但不限于诸如软盘或硬盘驱动器这样的计算机磁盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦除可编程的只读存储器、或便携式设备,诸如紧凑型光盘(CD)、拇指驱动器或数字视频盘(DVD)。
各种技术或其某些方面或部分可采取程序代码(即指令)的形式体现在有形介质中,诸如软盘、CD-ROM、DVD光盘、硬盘驱动器或任何其他机器可读存储介质中,其中当程序代码被加载到如计算机这样的机器并且由其执行时,该机器成为用于实践各种技术的装置。在程序代码在可编程计算机上执行的情况中,计算设备可以包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。一个或多个程序,其可以实现或利用本文所描述的各种技术,可以使用应用编程接口(API)、可重用的控件等。这样的程序可以用高级过程或面向对象编程语言来实现以与计算机系统进行通信。然而,该(一个或多个)程序可能用汇编或机器语言实现,如果需要的话。无论如何,语言可以是编译或解释语言,并与硬件实现相结合。
本说明书中描述的某些功能单元已被标为模块,以更加特别强调它们的实现独立性。本文所讨论的各种模块、引擎、工具或模块可以是,例如,软件、固件、命令、数据文件、程序、代码、指令等等,并且还可以包括适当的机制。例如,模块可以被实现为硬件电路,包括定制VLSI电路或门阵列,诸如逻辑芯片、晶体管或其他分立元件这样的现成的半导体。模块也可以被实现在可编程硬件设备中,如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等等。
也可以在用于由各种类型的处理器执行的软件中实现模块。可执行代码的已标识模块例如可以包括一个或多个计算机指令块,其可以被组织为对象、过程或功能。然而,标识模块的可执行不需要在物理上位于一起,而是可以包括存储在不同位置的完全不同的指令,其包括模块,并且当逻辑上结合在一起时实现该模块的规定目的。
事实上,可执行代码的模块可以是单个指令或者许多指令,并且甚至可被分布在若干不同的代码段上,在不同的程序中,并跨越若干存储器设备。类似地,可操作数据可以在模块中在这里被标识并说明,并且可以体现在任何合适的形式中,并组织在任何合适类型的数据结构之内。可操作数据可以作为单个数据集被收集,或者可分布在不同的位置上,包括在不同的存储设备上。这些模块可以是被动的或主动的,包括可操作来执行所需功能的代理。
这些模块也可以是硬件和软件的组合。在一个示例配置中,硬件可以是处理器和存储器,而该软件可以是存储在存储器中的指令。虽然前述示例是本技术在一个或多个特定应用中的原则的说明,但对于那些本领域的普通技术人员将清楚的是可以做出多个形式、使用和实现细节方面的修改,而没有行使发明性劳动,并且不背离该技术的原则和概念。因此,不意图限制该技术,除了由以下权利要求集合限制之外。