APP下载

软件自动化测试技术的应用探索研究

2018-09-04张欢李继安张红金

电子产品可靠性与环境试验 2018年4期
关键词:测试工具自动测试软件测试

张欢,李继安,张红金

(工业和信息化部电子第五研究所,广东 广州 510610)

0 引言

随着软件规模的不断扩大,软件设计的复杂程度的不断提高,软件开发中出现错误或缺陷的机会越来越大。随着软件产业化的发展,人们对软件的质量、成本和进度提出了更高的要求。由于人们对于软件质量的重视程度越来越高,就导致了软件测试在软件开发中的地位越来越重要,而软件测试是目前用来验证软件是否能够完成所期望的功能的唯一有效的方法。

软件测试一般分为手工测试和自动化测试。软件规模的扩大给测试工作带来了很多问题,手工测试的速度太慢,效率太低。一种成熟的软件自动化测试机制,是可以在机器空闲时执行无用户参与的自动化测试的。自动化测试是可重复的测试,并且在相同的测试案例中可以使用完全相同的测试数据进行再测试,可以做到以最小的代价进行全面的系统测试。自动化测试可以高效地完成一些重复性测试,降低人为因素对测试过程的干扰,排除测试的随机性和盲目性,降低冗余,减少遗漏等。

1 软件自动化测试的涵义及现状

软件自动化测试就是执行某种程序设计语言编制的自动测试程序,控制被测软件的执行,模拟手动测试步骤,完成全自动或半自动测试。自动化测试就是通过自动化测试工具或其他手段,按照测试工程师的预定计划进行的自动测试,目的是减轻手工测试的劳动量,从而达到提高软件质量的目标。自动化测试的目的在于发现老缺陷,而手工测试的目的在于发现新缺陷。测试自动化涉及到测试流程、测试体系、自动化编译、持续集成、自动发布测试系统和自动化测试等方面的整合,也就是说要让测试能够实现自动化,不仅是技术、工具的问题,更是一个公司和组织的文化问题。

自动化测试最初是通过外部的手段来录制测试的操作过程,再回放其过程从而达到自动化测试的目的。随着研究的不断深入,又诞生了基于数据驱动、基于领域驱动和基于功能驱动等多种不同的自动化测试技术。自动化测试技术的诞生不仅提高了测试的效率,同时也提高了测试的精度。虽不能完全取代手动测试工作,但也对测试技术的发展起到了巨大的推动作用。就目前的操作系统而言,主要的自动化测试技术有以下几种。

a)phoronixtestsuite

可支持多种类型操作系统的性能测试,但其配置文件的处理方式简单、不利于扩展添加。

b)Autotest

支持Linux系统内核的自动化测试,但其搭建困难、对支撑软件版本要求严格,暂不支持国产平台搭建。

c)linuxdesktoptestingproject

用于功能的自动化测试,但其脚本重用率低、对测试人员的要求较高。

2 自动化测试框架

通过分析操作系统测试标准,以及现有的工具情况,本文提出了一种基于过程的自动化测试模型,通过对测试过程的抽象来达到自动化测试的目的。该模型将测试过程中使用的测试用例、测试脚本和测试数据按照预定的准则进行标准化,并以配置文件的形式进行执行过程的编辑,最后通过脚本驱动将配置文件内容转化为自动化测试流程。

2.1 自动化测试框架的系统结构

国产操作系统自动化测试框架主要包括测试工具库、接口库、测试脚本库、测试数据结构和测试驱动等,结构如图1所示。

图1 自动化测试框架

a)测试工具库

主要用于存储测试工具,以及执行配置文件,在配置文件中按照预定义标准将测试工具在执行测试时的执行过程进行脚本化抽象,测试执行时测试驱动会对该配置文件进行 “翻译”,将其转换为可执行的shell脚本。

b)接口库

主要用于存储操作系统的操作接口,包括操作系统的远端连接接口、执行监控接口、日志提取接口和命令执行接口等。

c)测试脚本库

主要用于存储操作系统功能测试脚本和接口脚本。由于国产操作系统的非图形化功能都可通过命令行来实现,因而通过设计自动化测试脚本,自动执行并返回系统执行结果可有效地帮助测试人员节省测试的时间。

d)测试数据结构

主要用于存储测试结果的数据结构及组成,由于不同种类的测试工具或测试脚本执行所得到的测试结果的数据结构并不完全相同,因此,为了保证系统的可扩展性,可自定义测试数据的解析方法。

2.2 自动化测试框架的原理

自动化测试框架分为用户接口层、业务处理层和数据处理层,如图2所示。

图2 自动化测试框架业务模型

a)用户接口层

用户接口层提供了使用该平台的一整套API,通过这些API用户可以方便地进行机器性能测试,包括测试用例选择、测试机器选择、查看测试结果和查看每个机器的运行状态等功能。这些API以soap协议方式和本地调用两种方式提供给用户使用,包括机器信息模块、测试用例模块、测试记录模块、启动测试模块和运行时监控模块。

b)业务处理层

业务处理层接收测试作业,然后安排测试作业的执行。实现方式是为每个测试机器建立一个单独的线程,专门处理该机器的测试任务。根据系统的资源耗用程度来动态地调整测试任务分配方式,保证在系统健康、平稳运行的过程中使得每个测试任务都得以完成。

c)数据处理层

负责和数据库交互,提供系统运行时所需要的数据,以及保存运行时所产生的数据。对上提供查询数据服务,业务处理层需要的数据全部由数据处理层提供,包括查询机器信息、查询测试用例信息和查询测试记录信息等。

2.3 企业自动化系统性能测试的框架

2.3.1 企业自动化系统性能测试

自动化系统性能测试的着重点是准确地获取系统在某一状态下的性能指标。

a)测试的准确性

自动化系统性能测试通过模拟用户操作,对服务器发起负载,同时监控服务器的状态,考察系统业务的响应时间和资源之间的关系,从而获取系统的性能指标。通过工作负载分析,建立尽可能地接近实际情况的测试场景,同时通过一系列的测试前准备工作,以及测试采样设置,减少性能测试中的干扰因素。

b)节约测试成本

进行性能测试的成本,特别是硬件成本很大。在保证测试准确性的基础上,可通过以下方式来节约测试成本,例如:在企业员工的机器上安装负载生成器,每台机器在测试时分担一小块的负载生成任务。

c)减少手工工作量

性能测试需要使用大量的不同用户帐号进行操作,手工创建这些用户帐号信息以及设置权限等工作量非常大,借助自动化捕获回放工具可以完成这部分工作,同时使用前面的自动化系统回归测试框架进行关键功能的冒烟测试。

2.3.2 企业自动化系统性能测试框架的构建

性能测试小组搭建和配置标准版本的系统软硬件环境,并安装性能监控器部件,然后部署小组从版本管理系统上将稳定的代码待测版本取下,进行构建并部署到专门的性能测试环境,完成系统的配置和初始化。系统在进行性能测试前经过自动化系统回归测试框架的冒烟测试,验证系统的基本功能是否正常,同时通过自动化工具进行测试用数据的创建,例如:用户帐号信息、权限和其他的测试实体,尽可能地减轻手工工作量。在这些任务完成后性能测试小组根据工作负载模型和测试用例,创建和执行测试脚本和场景,收集并分析测试数据,得出系统的性能指标。

3 软件自动化测试的优缺点

3.1 软件自动化测试的优点

如果测试活动自动化在多数情况下可提供其最大价值,如对软件进行的功能性测试,是测试系统在做什么,这些测试可以明确地知道应该在什么情况下输入什么,会有什么样的输出。这样的测试就很容易被自动化,也能从自动化中取得较大的效果。对软件进行的性能测试包括在不同的系统负载下进行的测试,这些测试需要采用工具辅助完成,也非常适合于采用自动化。自动化测试,可以提高某些测试任务的执行效率,除此之外,其还有以下几个优点。

a)对程序的回归测试更方便

软件测试实行自动化进程是因为测试工作的需要,更准确地说是回归测试和系统测试的需要。由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大地提高测试效率,缩短测试的时间。

b)可以执行一些手工测试有困难或不可能进行的测试

比如:对于大量用户的测试,不可能让足够多的测试人员同时进行测试,但是却可以通过自动化测试同时模拟许多用户,从而达到测试的目的。

c)更好地利用资源

将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来,以使他们投入更多的精力在设计更好的测试用例上。有些测试不适合于自动测试,仅适合于手工测试,将可自动测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。

d)测试具有一致性和可重复性

由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试可重复的效果。

e)测试的复用性

由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。

f)其他

此外,手工不能做的事情,自动化测试能做,例如:负载、性能测试等。

3.2 软件自动化测试的误区与缺点

在软件测试自动化的实施过程中会遇到许多误区,比较普遍的有以下几种。

a)不正确的观念或不现实的期望

一般来说,人们对新技术的解决方案常常深信不疑,认为可以解决面临的所有问题,对测试工具也不例外。事实上,如果期望不现实,无论工具如何先进,都满足不了期望。

b)希望测试发现大量的新缺陷

测试运行第一次时最有可能发现新缺陷。但是,如果测试已经运行,再次运行相同的测试发现新缺陷的概率就小得多。

c)安全性错觉

如果自动化测试没有发现任何缺陷,并不意味着软件没有缺陷,可能是测试设计本身就有缺陷;并且,测试覆盖率也不会达到百分之百。

d)自动化测试的维护性

当软件修改后,通常也需要修改部分测试,这样必然导致对自动化测试的修改,所以在自动化测试的设计和实现时,要防止自动化测试带来的好处被高维护成本所淹没。

e)测试自动化可能会制约软件的开发

由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发。

虽然测试自动化可以带来非常明显的收益,但也有其限制性。首先,其不能取代手工测试,手工测试比自动测试发现的缺陷更多,并且手工测试可以处理意外事件,虽然工具也能处理部分异常事件,但是其对真正的突发事件和不能由软件解决的问题无能为力;其次,测试自动化对测试质量的依赖性极大,并不能提高有效性,还可能会制约软件的开发。

此外,对于周期短、时间紧迫的项目不宜采取自动化测试。由于推行自动化测试的前期工作相当庞大,将自动化测试框架应用到一个项目中也要评估其合适性,项目很可能被大量的测试框架的准备和实施工作拖垮。

4 结束语

软件测试自动化由于具有效率高、能快速全面地实行回归测试等特点,正在成为国内外软件界的热点之一。但是,软件自动化测试还不能解决软件潜在的所有问题,为此,在自动化测试前的准备工作中首先需要对软件自动化测试有一个正确的认识。软件测试工具尽管能够提高测试效率、覆盖率和可靠性等,但是软件的自动化测试过程是一个循序渐进的过程,并不是一开始就对所有的测试实施自动化,同时这也是不现实的。自动化测试虽然有很多优点,但其实质上还只是测试工作的一部分而已,是对手工测试的一种有益的完善与补充。如何规范自动化测试、选择恰当的自动化测试工具,还有待于我们在具体的测试过程中去探索、去研究、去实践。

猜你喜欢

测试工具自动测试软件测试
基于OBE的软件测试课程教学改革探索
JXG-50S型相敏轨道电路接收器自动测试台
Http并发连接测试工具
EXCEL和VBA实现软件测试记录管理
关于某型雷达自动测试系统的几点认识和建议
关于软件测试技术应用与发展趋势研究
手车式真空断路器回路电阻测试电流线接头研究
软件测试工程化模型及应用研究
福禄克推出先进的连接式测试工具系统
基于ATE与BIT组合的NAMP自动测试与故障诊断系统设计