自动化测试技术的探讨与研究
摘要:软件测试在软件开发中占有非常突出的重要位置,软件必须通过测试才能确保其在应用环境中正常工作。在测试过程,运用自动化软件测试技术可以减少测试周期,节约人力成本,同时也减少了人为出错的机率。
本文通过对自动化测试技术的介绍,对当前流行的几种自动化测试技术以及自动化测试工具的比较,系统全面的讨论了自动化测试技术。首先从介绍自动化测试的基本概念入手,然后对当前几种比较流行的自动化测试技术进行了研究和比较,接着介绍了几款成熟的自动化测试工具,最后对自动化测试进行了总结和展望。
关键词:自动化测试;手动测试;测试用例;测试工具;
一、前言
软件测试是对创造力和智力非常有挑战性的任务。测试一个大型软件需要的智能要超过设计这个程序的智能。 软件在它发行之前应当通过彻底的测试以保证它的可靠性和功能性。测试工程师要覆盖一个大型应用程序的所有情况是一件非常麻烦和费时的事情,但为了保证软件质量,我们不得不这样做。那么有没有省时省力的技术或者工具去帮我们做这样的事情呢,由此便有了下面对于自动化测试技术的探讨。
二、自动化测试的概念
自动化测试一般是指软件测试的自动化,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。
自动化测试一般包括测试过程自动化和测试结果分析自动化。测试过程的自动化指的是不用手工逐个的对用例进行测试。测试结果分析自动化指的是不用人工一点点去分析测试过程中的中间结果或数据流。
软件自动化测试就是模拟手动测试步骤,执行用某种程序设计语言编制的测试程序,控制被测软件的执行,完成全自动或半自动测试的过程。全自动测试就是指在自动测试过程中,根本不需要人工干预,由程序自动完成测试的全过程。半自动测试就是指在自动测试过程中,需要手动输入测试用例或选择测试路径,再由自动测试程序按照人工指定的要求完成自动测试。
三、自动化测试的前提
对于开发出来的软件产品,是不是都可以使用自动化测试技术,这个答案显然是否定的,对于是否应用自动化测试技术我们需要一定的前提条件。
1)软件需求变动不频繁。
测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根据变动的需 求来更新测试用例以及相关的测试脚本,而脚本的维护本身就是一个代码开发的过程,需要修改、调试,必要的时候还要修改自动化测试的框架,如果所花费的成本 不低于利用其节省的测试成本,那么自动化测试便是失败的。项目中的某些模块相对稳定,而某些模块需求变动性很大。我们便可对相对稳定的模块进行自动化测试,而变动较大的仍是用手工测试。
2)项目周期足够长。
由于自动化测试需求的确定、自动化测试框架的设计、测试脚本的编写与调试均需要相当长的时间来完成。这样的过程本身就是一个测试软件的开发过程,需要较长的时间来完成。如果项目的周期比较短,没有足够的时间去支持这样一个过程,那么自动化测试便成为笑谈。
3)自动化测试脚本可重复使用。
如果费尽心思开发了一套近乎完美的自动化测试脚本,但是脚本的重复使用率很低,致使其间所耗费的成本大于所创造的经济价值,自动化测试便成为了测试人员的练手之作,而并非是真正可产生效益的测试手段了。
另外,在手工测试无法完成,需要投入大量时间与人力时也需要考虑引入自动化测试。比如性能测试、配置测试、大数据量输入测试等。
四、自动化测试与手动测试
自动化测试相对于手工测试的优点:
● 优化测试速度:可非常快速的运行上万条记录
● 提高准确性、稳定性:可以不为外界因素干扰,准确运行测试用例
● 确定性:能真实快速搭建测试环境,测试数据,重现缺陷
● 提高工作效率:一边运行自动化测试,一边准备测试报告
● 测试环境搭建:可以结合多种编程语言及技术协助搭建测试环境,防止手工测试重复劳动,如批处理技术
● 提高技能:可提高测试人员技能,同时提高对测试的兴趣,防止对手工测试感觉枯燥
但是对于自动化测试也不要进入一个误区,有自动化测试不再需要手工测试这种观点是不对的。自动化测试虽然有如此多的优点,但是有些测试比如:本地化测试、用户体验测试、测试环境搭建方面并不能完全代替手工测试。自动化测试的基础也必须是对产品的运行,测试点有一定的手工测试的基础,自动化测试和手动测试是相辅相成的。自动化测试并不仅指自动化运行测试产品,数据处理也是非常重要的一个环节。并非只是自动化测试工具如QTP,Loadrunner,等才可以做自动化测试,很多的编程语言都可以运行自动化测试。比如QTP就是基于VBScript语言的一款自动化测试工具,只是在VBS上的一些封装。
五、自动化测试技术比较
● 基于组件的自动化测试技术
该测试是针对软件设计的最小单位——组件,进行正确性检验的测试工作.其目的在于发现各组件内部可能存在的各种差错,确保每个组件都能有效实现自己的预期功能。这一步是为了在选择组件阶段把好组件“准人”关,无论是自己开发组件、第三方组件或是其它来源的组件,都要对每一个组件进行测试。组件自身测试是典型的黑盒测试,即在不考虑代码内部结构的前提下,根据需求对应用程序进行测试。它的任务足验证组件的功能及其它特征是否与预期的要求一致。组件测试时应充分考虑到该组件可能涉及到的尽可能多的内外环境因素。
基于组件的自动化测试技术的过程模型
● 基于关键字驱动的自动化测试技术
在我们的测试脚本中可能会用到上千条这样的语句,测试工具通过按钮名字和显示文本来识别这个按钮。可以想见,当其中任何一个发生改变时,所有相关的脚本都会受到影响,维护这样的脚本是十分困难的。为解决该问题,我们可以做到以下几个分离,界面元素名与测试内部对象名的分离,测试描述与具体实现细节的分离,脚本与数据的分离。以上这“三个分离”正是关键字驱动自动化测试的核心思想,各司其职、互相独立,才能最大程度地减少相互之间的影响。
基于关键字的自动化测试模型
● 基于数据操作的自动化测试技术
所谓数据操作操作自动化测试技术,就是把数据作为测试动作应用的基本对象,并以此为出发点,把对数据驱动的软件测试活动转化为一系列数据操作,通过不同的数据操作体现被测软件的应激状态,进而达到软件测试的目的。从上文可知,关键字驱动脚本通过导航脚本控制,分别读取关键字支持脚本和数据文件的固有机制带来了执行效率问题,因此可以合并导航脚本和关键字支持脚本,即提高关键字脚本所处的层次,也就是说,把脚本执行控制字和数据操作关键字合并,形成一种真正的面向数据操作的脚本语言,同时为了解决文件数据固定问题,使用另一种脚本来描述多样的数据结构,同时把对数据的不同加工方式融入脚本描述中,这样就解决了数据结构定制和完备产生的困难。
● 基于模型驱动的自动化测试技术
模型驱动测试就是通过对SUT的功能与系统结构进行分析,然后结合测试策略构建起全面、清晰的测试模型,最后通过测试模型自动生成测试用例驱动测试人员完成SUT的测试。模型驱动测试的优点主要有两方面:
(1)测试模型为用户提供了更加清晰、准确和系统的测试设计。无论是基于数据驱动的还是基于关键字驱动的自动化测试技术展现给用户的都是一个个互不相关的测试用例啪,用户很难从生成的测试用例中理解整个测试系统的结构与测试重点。
(2)减少了测试用例维护工作,实现了测试资源的重利用,有效缩短了测试周期。建立起测试模型后,测试系统没计师可以在测试需求或SUT的系统设计规格发生改变后通过调整测试模型(而不是个性测试用例)来适应变化。
基于模型驱动的自动化测试架构图
● 基于数据驱动的自动化测试技术
数据驱动自动化测试是一种数据被包含在输入测试数据文件中,并且以数据来控制自动化测试脚本执行的流程和动作的测试。输入测试数据记录是从外部文件中读入的,并且是独立于测试脚本程序开发的。数据驱动测试使用存档的测试数据来驱动自动化测试过程,这些数据通常以简单的文本文件或Excel文件(电子表格)形式存在。
基于数据驱动的自动化测试框架图
六、自动化测试工具介绍
随着计算机应用的日益普及和深化,现代软件的规模越来越大、类型越来越复杂。设计人员和使用人员都希望在将软件系统投入运行之前,能尽可能地提高软件的质量。软件测试对确保软件质量有着极其重要的作用,但是手工的测试工作是非常繁琐和低效率的,为了更有效的进行软件测试,让一部分工作利用自动化工具进行自动测试是非常有效的方法。下面为几款具有代表性的自动化测试工具。
Rational Robot
是业界最顶尖的功能测试工具,它甚至可以在测试人员学习高级脚本技术之前帮助其进行成功的测试。它集成在测试人员的桌面IBM Rational Test Manager上,在这里测试人员可以计划、组织、执行、管理和报告所有测试活动,包括手动测试报告。这种测试和管理的双重功能是自动化测试的理想开始。
Win Runner
是一种企业级的用于检验应用程序是否如期运行的功能性测试工具。通过自动捕获,检测,和重复用户交互的操作,Win Runner能够辨认缺陷并且确保那些跨越多个应用程序和数据库的业务流程在初次发布就能避免出现故障,并且保持长期可靠运行。
QuickTest Professional
是一个功能测试自动化工具,主要应用在回归测试中。QuickTest针对的是GUI应用程序,包括传统的Windows应用程序,以及现在越来越流行的Web应用。它可以覆盖绝大多数的软件开发技术,简单高效,并具备测试用例可重用的特点。其中包括:创建测试、插入检查点、检验数据、增强测试、运行测试、分析结果和维护测试等方面。
AdventNet QEngine
AdventNet QEngine是一个应用广泛且独立于平台的自动化软件测试工具,可用于Web功能测试、web性能测试、Java应用功能测试、Java API测试、SOAP测试、回归测试和Java应用性能测试。支持对于使用HTML、JSP、ASP、.NET、PHP、JavaScript/VBScript、XML、SOAP、WSDL、e-commerce、传统客户端/服务器等开发的应用程序进行测试。此工具以Java开发,因此便于移植和提供多平台支持。
SilkTest
是业界领先的、用于对企业级应用进行功能测试的产品,可用于测试Web、Java或是传统的C/S结构。SilkTest提供了许多功能,使用户能够高效率地进行软件自动化测试。这些功能包括:测试的计划和管理;直接的数据库访问及校验;灵活、强大的4Test脚本语言,内置的恢复系统(Recovery System);以及具有使用同一套脚本进行跨平台、跨浏览器和技术进行测试的能力。
QA Run
QARun的测试实现方式是通过鼠标移动、键盘点击操作被测应用,即而得到相应的测试脚本,对该脚本可以进行编辑和调试。在记录的过程中可针对被测应用中所包含的功能 点进行基线值的建立,换句话说就是在插入检查点的同时建立期望值。在这里检查点是目标系统的一个特殊方面在一特定点的期望状态。通常,检查点在QARun提示目标系统执行一系列事件之后被执行。检查点用于确定实际结果与期望结果是否相同。
Test Partner
是一个自动化的功能测试工具,它专为测试基于微软、Java和Web技术的复杂应用而设计。它使测试人员和开发人员都可以使用可视的脚本编制和自动向导来生成可重复的测试,用户可以调用VBA的所有功能,并进行任何水平层次和细节的测试。TestPartner的脚本开发采用通用的、分层的方式来进行。没有编程知识的测试人员也可以通过TestPartner的可视化导航器来快速创建测试并执行。通过可视的导航器录制并回放测试,每一个测试都将被展示为树状结构,以清楚地显现测试通过应用的路径。
Telelogic TAU
TAU第二代包含三个最新的、最强大的技术用来加速大规模软件开发和测试:统一建模语言(UML)及它的许多最新修订版本中的特性,UML2.0;功能强大的测试语言TTCN-3和新的构造系统的方法:Model Driven Architecture(模型驱动构架)。这三个新的业界标准结合成TAU的已经过认可的软件开发平台,形成了一个系统,一个一流的稳定可靠的工具解决方案。TAU第二代是系统与软件开发解决方案的一个突破,它把业界从使用了太长时间的手工、易出错、以代码为中心的方法中释放出来,自然而然地迈向下一步,一个更加可视化、自动化及可靠的开发方法。
Telelogic TAU/Tester是基于通用测试语言TTCN-3,用于自动化的系统和集成测试的强大工具。TAU/Tester以现代化的开发工具为基础,提供高层测试功能,支持整个测试生命周期,加速自动化测试。TAU/Tester可使用户特别关注于测试的开发,因为TTCN-3语言是独立于开发语言或测试设备的,且是抽象和可移植的。
七、总结
通过研究和比较当前比较流行的几种自动化测试技术,我们可以对自动化测试技术发展方向做出以下展望。
采用标准化架构
在企业产品线日益膨胀的情况下,采用一个标准化架构开发通用测试平台是行之有效的方法,以提高产品从研发到生产测试的整个生命周期里测试硬件和软件组件的复用性。
多通道RF测试
无线技术变革已经对测量测试行业产生巨大影响,其中两个关键技术趋势尤为突出,其一是MIMO技术,其二便是多种无线标准在同一系统中的集成。这两个技术趋势都要求射频测量系统能够实现并行测试,这就需要可配置的多通道射频测试系统。
Peer-to-Peer高速传输与计算
随着测试需求的日益复杂和数据量的指数态增长,自动化测试系统需要更强的处理能力,分布式处理的架构也随之被提出。新一代高性能分布式架构应以下具有高吞吐量点对点拓扑结构、低延迟、能够提供用户自定义处理节点这三大特性。