0引言
SilkTest是美国Segue公司开发的一种软件GUI的自动测试工具。在自动化测试领域,Silktest作为近年来的主流回归测试工具,得到了越来越多的关注和使用。SilkTest是业界领先、对企业级应用进行回归测试的产品,可用于测试Web,Java或是传统的C/S结构。SilkTest提供了许多功能,能使用户高效率地进行软件自动化测试。
1 SilkTest的主要特点及工作原理
1.1 SilkTest主要特点
SilkTest的主要特点为:
(1)整合开发环境(IDE)。用户可以用它来开发、编辑、运行、分析和调试4Test文件。
(2)真正的对象识别。
(3)内置的全年全天候(24×7×365)无需人为干预测试时的恢复系统(Recovery System)。
(4)完全分布式测试。可以针对C/S应用进行测试,可使硬件资源有效使用。
(5)可扩展、高便携性、可编辑、易于维护的脚本语言(4Test Language)。
(6)用于重用性更好、更易于测试及脚本维护的GUI提取层(GUI abs Traction Layer)。
1.2 SilkTest的工作原理
在SilkTest看来,被测试软件(AUT)由许多GUI对象组成。用户在进行测试时通过键盘/鼠标与这些对象交互。具体应用时,SilkTest通过面向对象的概念,(类/属性/方法)识别这些GUI对象;测试时模拟用户的操作,与这些GUI对象交互,通过SilkTestrepository自动记录用户操作过程中对各个GUI对象的操作,然后将这些操作转换成4Test的脚本,写入脚本程序中。当对软件做了修改并重新运行这个测试时,SilkTest就可以利用测试回放功能把测试前所做的输入操作重新应用到本次测试中,并自动比较软件对本次测试和以前测试的响应是否相同,如果不同,就表明对软件的修改产生了新的错误,实现自动测试的目的。
2 SilkTest在数据驱动测试中的应用
数据驱动技术实行的就是测试脚本和数据的分离技术,使得测试脚本成为可以驱动所有类似测试用例组的通用脚本,使测试用例的修改和维护更加容易,简化了回归测试。
2.1 测试环境
使用SilkTest的集成开发环境IDE,在开发基于应用服务器的分布式应用软件过程中,往往需要对服务器和IDE工具之间的协同工作能力进行测试,以保证开发出的应用程序最终可以正确地安装到应用服务器上并正常工作,其典型步骤如图1所示。
如图1所示,首先,在IDE中将服务器端组件部署到应用服务器上①。这需要在IDE中进行一系列的手工操作;然后,需要在IDE中生成或配置与服务器端组件相对应的客户端组件③;最后,从IDE中运行客户端组件,进行客户端与服务器端交互操作测试,并产生测试结果②。
2.2 SilkTest在数据驱动中的具体应用
考虑到上述测试的部署、配置和运行的操作主要在集成开发环境中进行,因此可以通过使用SilkTest录制操作来实现测试的自动化。SilkTest将所记录的图形用户界面对象转换成4Test语言对象。由于4Test语言是面向对象的,所以可以对4Test语言脚本进行各种修改,也可以用变量代替录制测试步骤过程中使用的实际值,从而实现数据驱动的自动测试。在测试IDE工具软件时,不同测试用例组的操作之间具有极大的相似性,因此存在采用数据驱动的方式来进一步优化用SilkTest录制测试操作的可能性。也就是说,录制一个典型的测试流程,然后通过对SilkTest录制的脚本进行编程修改,将其改造成可以驱动全部测试用例的通用驱动程序。
(1)用SilkTest实现数据驱动的回归测试的流程,如图2所示。
(2)具体的录制修改过程。根据SilkTest的要求,在用SilkTest录制测试步骤之前,应当首先录制与测试过程中的鼠标或键盘事件相关AUT的各个GUI控件。用SilkTest记录这些控件时,只需要将鼠标依次在GUI控件上划过即可。SilkTest会将这些控件转换成相应的4Test语言对象。SilkTest在记录控件的同时,也记录了它们与父控件之间的隶属关系。所记录的GUI控件对象及其隶属关系称为测试框架(Frame)。SiIkTest还会自动为所记录GUI控件命名,但是这些名称通常是由控件名和序号组成的,不易于理解,因此需要将所记录的控件用易于理解和记忆的名称重新命名,以便于今后的开发和维护。
在测试框架录制完成之后,需要录制手工执行的典型测试步骤。SilkTest会将记录下来的手工操作步骤转换成4Test语言的脚本。下面的代码是记录配置服务器连接操作的一段4Test语言代码示例:
在上述代码中,用4Test语言记录了在部署配置对话框中输入服务器名、端口号、登录用户名和密码等内容,并点击“连接”按钮与服务器进行连接。应当注意的是,代码中使用录制时输入的具体值作为各个方法的参数,SilkTest运行测试时会自动将这些值填充在部署配置对话框的相应位置上。
为了实现数据驱动,让测试具有更大的灵活性,需要对录制好的4Test语言脚本进行修改,用参数替代录制过程中使用的实际值,然后通过某种方式为这些参数赋值。对于上面的例子,可以定义一个包含各个输入项的数据类型:
然后把这个数据类型传递给ConfigureHost方法:
在测试时,使用有关服务器配置的实际值可以存放在某个数据文件中,并在程序的适当部分将其读入。
对于不同的测试用例组,它们之间的差别可能还包括组件名称和文件存储位置等内容的不同,那么只需要用上面所说的方法将这些存在差异的地方的具体值用参数代替,并在运行特定的测试用例组时,从相应的数据文件中读取相应的值,就可以把专用的测试步骤变成通用的测试步骤。因此,仅需要用SilkTest录制一个典型测试用例的运行步骤,再经过一些相应的修改后,就可以采用SilkTest自动运行这类回归测试中的所有测试用例。另外,由于实现了数据驱动的测试,因此对测试项目的增加和修改也非常容易。
(3)使用SilkTest来验证AUT的GUI的正确性。
在这种情况下,SilkTest依次执行4Test语言脚本中的各个操作,并判断每步操作是否会导致预期的显示结果。如果每一步的显示结果都与所预期的一致,SilkTest认为测试通过,否则,就认为测试失败,并在自动生成的测试结果文件中显示运行结果与预期结果之间的差异。
但是,所述方法使用了SilkTest,实现了涉及软件之间协同工作能力的数据驱动回归测试,其中SilkTest自动执行的是运行测试用例组的步骤。也就是说,SilkTest只是实现了测试用例组的执行过程,而不涉及测试用例组和测试用例本身的逻辑,所以即使所有的测试步骤都顺利执行,并不代表测试也已经顺利地通过。
为了利用SilkTest自动对测试结果进行判断,可以在测试用例中加入输出语句,这样在运行测试时,所有测试用例的运行结果都会输出到指定的日志文件中。当SilkTest运行完一个或一组测试用例,将包含测试结果的日志文件与一个基准文件(Benchmark File)进行比较。一般来说,基准文件是在一个或一组测试用例全部正确运行的情况下得到的测试输出日志,它通常是在测试用例设计完成时就确定的。如果包含测试结果的日志文件与基准文件完全匹配,可以认为测试通过。如果它们之间存在差别,那么就认为测试没有通过,并在SilkTest的测试结果文件中打印两个文件之间的差别。
3结语
阐述了自动化回归测试工具SilkTest的主要特点及工作原理;介绍了SilkTest在数据驱动技术中的应用;简化了测试人员的测试复杂度;提高了测试效率和保证测试的可靠性;降低了测试费用。