自动化测试浅析

时间:2022-02-07 06:59:19

自动化测试浅析

摘要:本文阐述了自动化测试的概念及实现自动化测试的方法,并介绍了主流自动化测试软件及其自动化测试框架的构造,最后简单介绍了用自动化测试脚本语言Tcl实现一硬件系统中主备板间的自动切换的测试事例。

关键词:自动化测试;单元测试自动化;更大规模测试自动化;Tcl

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)05-11355-03

1 引言

软件测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤。软件测试自动化,是一项让计算机代替测试人员进行软件测试的技术。测试自动化通常借助测试工具来执行,测试工具可以进行部分的测试设计、实现、执行和比较的工作[1]。通过运用测试工具,可以达到提高测试效率的目的。本文首先介绍了自动化测试的概念及怎样实现自动化测试,接着介绍主流自动化测试软件及其自动化测试框架的构造,最后介绍用自动化测试脚本语言Tcl(Tool Command Language)实现一硬件系统中主备板间自动切换的测试用例。

2 自动化测试简介

软件测试跨越整个软件开发流程,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。测试应当有意制造错误从而确定是否漏过预期应当发生的事件,或者发生了预期不该发生的事件,测试的目的是检查错误。经验表明,测试人员多数的时间花在对系统逻辑流程和控制流程的理解(白盒测试),测试覆盖路径的确认,同一测试用例对不同程序修改版本的测试结果验证和手工填写测试报告上等场合,这些领域适当采用测试工具可以提高测试效率和测试正确性[2]。为此我们引用自动化测试。

测试自动化可理解为测试过程自动化和测试结果分析自动化。测试过程的自动化指的是不用手工逐个的对用例进行测试。测试结果分析自动化指的是不用人工一点点去分析测试过程中的中间结果或数据流。适合于软件测试自动化的场合:

(1)回归测试,重复单一的数据录入或是击键等测试操作造成了不必要的时间浪费和人力浪费;

(2)此外测试人员对程序的理解和对设计文档的验证通常也要借助于测试自动化工具;

(3)采用自动化测试工具有利于测试报告文档的生成和版本的连贯性;

(4)自动化工具能够确定测试用例的覆盖路径,确定测试用例集对程序逻辑流程和控制流程的覆盖。

常规情况下,软件的自动化测试能够发现10%-15%的软件错误。手工测试能够发现80%左右软件错误,由于自动化测试和手工测试存在重合的错误发现,因此尚需有5%-10%的错误需要通过两者结合和采取其它途径进行发现。

3 测试自动化实现方法

3.1 单元测试自动化

单元测试自动化是最轻量级的测试,它的测试目标是特定模块的函数或者代码块。通常单元测试是由开发工程师自己来做的,因为进行这种测试涉及到程序内部设计和代码实现的细节。对于单元测试,我们希望能像使用编译程序器编译一样,每次修改代码后,即可运行编译器进行编译,如果没有错误,完全可不用去看编译报告,当有问题时编译器才会发出警报,并给出一定的线索。我们用编译器来检查语法错误,用单元测试来检查语义错误[3]。单元测试适合于充分的测试代码片断,它的前提是对代码的具体实现非常了解。

3.2 更大规模测试的自动化

下图自动化是一个典型的测试环境

在这测试环境中,被测系统看作一个整体,它接受到外界的输入后,会产生一些相应的输出。而外部环境是由用户界面和测试工具组成。用户界面就是用户使用被测系统的接口。测试工具这里指的是外部支持系统,可能是一个关联子系统,也可能是一些驱动库,这些系统可能是真实的系统,也可能是专为测试做的模拟系统。一般情况,相对测试系统来说,用户界面是主动的,由它发起对某个功能点的测试,而测试工具是被动的,它接收到由被测系统发出的消息后,发回相应的响应。

我们需要编程序来完成用户界面以及测试工具的动作,我们把上图的外部环境分为三种类型来讨论:用户界面,模拟外部子系统和真实外部子系统。这里只考虑模拟外部系统的测试工具,对于真实的外部子系统,它的动作是不用测试者设定,然而某些情况下我们还是需要观察它与被测系统间交互的消息,确认其中的某些检查点。可采用脚本语言来实现测试自动化。脚本语言的特点首先它自动逐条执行语句,并可以方面的修改源代码来设定一系列的动作,另外,脚本语言一般都有非常强大的字符串处理能力,这对于我们实现测试自动化以及结果分析都非常有利。

3.2.1 测试过程自动化

一般来说,用户界面和模拟外部子系统的测试工具功能比较简单,主要是收发短消息或涉及鼠标键盘操作,其中没有复杂的逻辑和算法,可被认为是一个一个的消息触发器组成的,而且每个触发器的动作都是预先设定好,接收到消息A则发送消息B,因此用脚本语言很容易模拟它们的动作。在用脚本语言实现过程自动化的时候,可以通过在脚本中设置控制点,控制脚本的执行。当脚本运行到控制点时,将等待用户输入,然后根据输入进行进一步的动作。这样可逐段执行脚本,便于调试。通过构建自动化测试平台进行过程自动化测试,大大减少了测试过程中所需做的重复性工作,降低了人性的弱点对程序质量的威胁。

3.2.2 结果分析自动化

构建好自动化测试平台后,我们可对测试结果进行自动化分析了。对某一个功能点的测试往往包含用户界面,被测系统和测试工具的多次消息交互,通过查看这些消息的内容和顺序是否与预期一致来判断一个测试用例是否通过,形成自动分析案例。对于某个测试用例,可预先编制一个目标文件,其中包含所有完成这个用例所需交互消息,包括用户界面与被测系统间的消息,以及被测系统与测试工具之间的消息。

在自动测试平台中,加入一些控制,在收发消息的同时将消息依次存入到一个文件中,当测试用例完成后,可将两文件做对比,如果匹配的话说明测试成功,如果不匹配,则给出最先不匹配的位置信息。编写目标文件不一定要包含所以消息,有时候可能只需要比较某个测试工具接受的消息就可以判断是否正常,那么在脚本中只需将该测试工具所接受的消息存入文件即可。这样手工编写目标文件容易,比较速度也快。比较文件时所用的匹配算法也可根据自己的需要加以调整,可以是精确匹配,也可以只是检查目标文件中的消息是否在当前生成的文件中依次出现。一些脚本语言,例如TCL具有很强的字符处理能力,可方便的实现某些匹配算法。

通过用脚本来实现测试过程与测试结果分析,可形成维护一个测试用例库。每次代码集成的时候都可以通过运行这些脚本对程序进行回归过程测试,整个测试过程不需要人工干预[4]。当出现问题时,会生成相应的测试报告,给出错误信息。这个测试用例库在整个软件的生命周期中都可重复利用。

4 主流自动化测试工具介绍

4.1 工业标准级负载测试工具LoadRunner

Mercury Interactive 的 LoadRunner 是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使用LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的周期。LoadRunner 支持广范的协议和技术,为特殊环境提供特殊的解决方案。

4.2 全球测试管理系统TestDirector

TestDirector是业界第一个基于Web的测试管理系统,它可以对全球范围内的测试进行管理。通过在一个整体的应用系统中集成了测试管理的各个部分,包括需求管理,测试计划,测试执行以及错误跟踪等功能,TestDirector极大地加速了测试过程。一套基于Web的测试管理系统提供了一个协同合作的环境和一个中央数据仓库TestDirector能消除组织机构间、地域间的障碍。

4.3 WinRunner

Win Runner是Mercury Interactive公司推出的一种企业级自动化测试工具。通过自动录制、检测和回放用户的应用操作,来帮助测试人员自动完成应用程序的功能性测试。可提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障及长期稳定运行。用WinRunner进行自动化测试主要分为5步:

(1)创建GUI Map文件。WinRunner可以通过它来识别被测试应用程序中的GUI对象。

(2)创建调试测试脚本。通过录制,编程,或两者的组合创建并调试测试脚本。

(3)运行程序。运行测试时,WinRunner会自动操作应用程序,就象一个真实的用户根据业务流程执行着每一步的操作。

(4)结果分析。WinRunner通过交互式的报告工具来提供详尽的、易读的报告。这些测试结果还可以通过Mercury Interactive的测试管理工具TestDirector来查阅。

(5)维护测试。WinRunner可以创建在整个应用程序生命周期内都可以重复使用的测试,从而大大地节省时间和资源,充分利用测试环境。

4.3.1 WinRunner自动化测试框架构造

根据类和封装的思想,将WinRunner中的类提取来进行封装。所有的类全部封装于函数(ExecuteCase)中,针对每一类,均有具体的行为与之对应,根据配置文件中传入参数的所属类,ExecuteCase会将相应的接口进行处理。如果有新类或特殊类,也可以将ExecuteCase函数进行扩充,从而满足不同的测试需求。

5 硬件主备板间自动切换软件的自动测试事例

Tcl(Tool Command Language)是一种可运行在 Unix,Windows 和 Macintosh 等各种平台上的自动化测试脚本语言。具有良好的扩展性,以便用户为其增添新的功能模块。Tcl语言将程序设计概念高度抽象,真正地把程序设计与操作系统底层结构隔开,因此不依赖于任何平台,具有良好的可移植性[5]。下面简单介绍用Tcl实现一硬件系统中主备板间自动切换的测试事例。

5.1 对active_boards的切换

proc operation_on_active

{action i_pairmode}{

global print_fsm_1

global print_fsm_2

global board_info_1

global board_info_2

global active_board_1

global standby_board_1

global active_board_2

global standby_board_2

global id

#wait_state_normal //当boards的状态为normal的时候才切换

mode $id A#

if { $i_pair==1 } {//当只有一对boards的时候

log_out "HA_operation: $action $active_board_1(chassis)

$active_board_1(slot)

$active_board_1(board) "

gsend "oam $action $active_board_1(chassis)

$active_board_1(slot)

$active_board_1(board) $mode\n"

expect -i $id timedout {timedout "on prompt"}

-re "Successfully"

after 5000

} elseif { $i_pair==2 } { //当有两对boards的时候

log_out "HA_operation:

$action $active_board_2(chassis)

$active_board_2(slot)

$active_board_2(board) "

gsend "oam $action $active_board_2(chassis)

$active_board_2(slot)

$active_board_2(board) $mode\n"

expect -i $id timedout

{timedout "on prompt"} -re "Successfully"

after 5000}}

4.2 对standby_boards的切换

proc operation_on_standby { action i_pair mode } {

global print_fsm_1

global print_fsm_2

global board_info_1

global board_info_2

global active_board_1

global standby_board_1

global active_board_2

global standby_board_2

global id

#wait_state_normal //当boards的状态为normal的时候才切换

mode $id A#

if { $i_pair==1 } {//当只有一对boards的时候

log_out "HA_operation:

$action $standby_board_1(chassis)

$standby_board_1(slot) $standby_board_1(board) "

gsend "oam $action $standby_board_1(chassis)

$standby_board_1(slot)

$standby_board_1(board) $mode\n"

expect -i $id timedout

{timedout "on prompt"} -re "Successfully"

after 5000

} elseif { $i_pair==2 } {//当有两对boards的时候

log_out "HA_operation:$action

$standby_board_2(chassis)

$standby_board_2(slot)

$standby_board_2(board) "

gsend "oam $action $standby_board_2(chassis)

$standby_board_2(slot)

$standby_board_2(board) $mode \n"

expect -i $id timedout

{timedout "on prompt"} -re "Successfully"

after 5000}}

6 结束语

软件测试跨越整个软件开发流程, 软件生存期中的一个重要阶段,是软件质量保证的关键步骤. 运用主流自动化测试工具,构建自动化测试平台及自动化测试框架,可提高测试效率和准确性。自动化测试脚本语言的应用更为软件自动化测试提供了有利的支撑。

参考文献:

[1] 张克东. 软件工程与软件测试自动化教程[M]. 电子工业出版社, 2002.4.

[2] Elfriede Dustin. 自动化软件测试―入门、管理与实现[M]. 清华大学出版社, 2003.8.

[3] 朱菊, 王志坚. 基于数据驱动的软件自动化测试框架[J]. 计算机技术与发展, 2006,16(5).

[4] 张毅坤. 面向对象软件测试的特点及方法[J].西安理工大学学报,2002,18(4).

[5] Brent B. Welch. Tcl/Tk编程权威指南[M]. 中国电力出版社, 2002.6.

本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:厦门绿苑小区电子巡更系统设计方案 下一篇:融信小区LonWorks智能化系统解决方案