Autotest自动化测试框架研究软

2016-05-14 15:49李青杨晓娟朱博张新玲
软件导刊 2016年7期
关键词:自动化测试分布式

李青 杨晓娟 朱博 张新玲

摘要:Autotest是一个开源自动化测试框架,能够大规模、完全自动化地完成Linux底层系统测试,处理测试过程中出现的内核错误、硬件死机、网络故障等。Autotest易于集成现有的内核和硬件测试,便于测试人员编写简单的测试用例和加入分析工具进行测试结果分析。Autotest框架实现分布式处理大量Linux内核测试,不仅能充分测试Linux内核和硬件的稳定性、可靠性和健壮性,还能有效提高测试效率。

关键词关键词:自动化测试;Linux内核;分布式;开源框架

DOIDOI:10.11907/rjdk.161123

中图分类号:TP306文献标识码:A文章编号文章编号:16727800(2016)007001403

随着软件行业的日益成熟,软件自动化测试成为保障软件质量、加速软件开发的重要手段。现存的自动化测试框架主要是针对上层软件的测试,被测对象与底层平台分离,需假设底层平台稳定可靠。而当底层平台本身成为被测对象时,以上假设将不成立。目前针对底层系统的自动化测试技术还不成熟。因此,内核测试一般采用人工方式,测试效率较低。

Autotest是完全自动化开源测试框架,针对包括内核和硬件的底层系统进行测试,提供终端到终端的自动化功能和性能测试,使测试者能够在不了解内部框架的情况下,简单进行基本测试和集成测试。Autotest设计之初是为了解决开源的Linux系统测试不足的需求,随着功能的不断拓展,Autotest能够执行许多不同的测试,增加新的结果分析工具,集成已存在的测试框架,展现了强大的包容性、扩展性和易用性。

1几种测试框架介绍

1.1AutoBench

IBM Autobench是针对Linux系统的开源测试框架,基于httperf的Perl脚本编写而成,构建和引导测试脚本运行。通过该框架,用户能够便捷地设置测试用例的执行环境和参数,并行执行测试。但是,该框架的测试控制机制和错误处理机制不够健全,扩展性和维护性较差,不利于用户二次开发。

1.2Linux Test Project

Linux Test Project(LTP)是目前较为流行的Linux功能测试和性能测试框架,主要用来测试Linux内核基本特性。它提供测试套件,用户能够验证Linux的可靠性、耐用性和稳定性,亦可针对不同的测试目的和LTP中的接口函数进一步开发新测试用例。但是,它缺乏对测试结果的分析以及对日志的解析工作,本质仅是多个测试的集合,因此LTP并不能作为通用和完全自动化测试内核的框架。

1.3Xentest

Xentest是一个专门针对Xen虚拟化测试的自动化测试框架,通过在Xen上运行Linux下的标准测试套件对底层虚拟化进行测试。但Xentest只能紧密围绕Xen,不能成为内核或硬件测试的通用框架。

1.4Crackerjack

CrackerJack是一个完整的内核自动化测试框架,主要目标是通过回归测试寻找不同内核版本间不相容的API。它是一个很有价值的测试工具,但是功能太过狭隘。

1.5其它工具

Linux自动化测试框架研究逐渐深入。张达运等提出一种基于Lua的Linux内核测试工具,降低了Linux内核及驱动接口测试的编程难度。韩涛等设计一种Linux下自动化测试执行管理工具,通过对测试过程和测试资源进行管理,提高了测试效率。

2Autotest框架研究

2.1总体架构

Autotest采用分层结构以满足不同规模集群的测试需求。Autotest框架从上到下主要分为4层,如图1所示。

(1)用户接口:包括Web接口、命令行接口和DJANGO。作用是便于用户与Autotest交互,包括管理作业、管理Client主机、查看结果等。

(3)Serve端:包括调度数据库和AutoServ服务。主要任务是分配和调度测试作业执行。调度数据库用于选择要执行的作业,开启Autoserv进程;Autoserv用于管理Client中运行的作业、检查Client工作状态、修复失效的Client节点、管理作业的执行情况等。

(4)Client端:实际执行测试。执行单个测试任务或者作为集群中的一个测试节点执行测试。

Autotest框架工作流程如图2所示。测试Linux系统发布新版本,首先将测试任务导入AutoServ测试作业队列中;AutoServ负责将测试任务下达到Client端,在Client端安装测试环境,如Linux新版本等,并执行测试任务;测试结束后将结果发送到结果分析工具中分析,如存在缺陷则为系统打补丁。整个过程中Client端作为Autotest系统的最底层,在单个机器上运行简单的测试。Server端作为指挥中心,自动安装和执行客户端,协调多机测试。

2.2Autotest Client

Client端主要用于测试本地Linux系统内核,包含多种常见的Linux内核测试用例,用户可直接使用这些测试用例,亦可进行二次开发或者重新创建测试用例。Client端采用Python编写而成,提供C语言的编译和执行工具,使得每个测试用例均可与额外的C语言编写资源捆绑,易于集成已实现的测试工具。Autotest框架提供了标准化接口,在Client端编写测试用例时,均能调用该框架中的接口实现功能,例如作业控制、错误处理机制、结果收集和分析机制等,用户无需手动定义这些机制。

Client端仅为测试单个计算机Linux底层系统提供基础功能。以往测试不同硬件配置下的内核,要在多台物理设备上安装Client端,手动执行测试并收集分散在不同物理设备中的测试结果,这对于大规模计算机集群测试十分复杂且低效。为解决此问题,Autotest的Server端应运而生。Server端围绕Client端设计一个单独的层。AutoServ进程通过SSH远程连接被测对象,自动安装Autotest Client端执行作业,并将结果从被测机返回。用户可以任意设置被测对象的数量,同时将结果收集到Server端分析。

Server端提供了恢复失败测试系统机制。AutoServ通过监听串行控制台、网络控制台和系统日志的输出,与外接服务相互作用,收集被测机的故障信息。最坏的情况下,AutoServ进程可以记录失败作业运行的测试和发生故障的测试机最后的已知状态。在被测机出现故障导致系统崩溃时,AutoServ首先尝试把机器返回到已知的良好状态,然后对被测机重新安装。最后,将已修复的故障机重置到具有最小的人为干预的工作状态。

2.4前端与调度器

Autoserv作为一个独立的应用程序,不能满足扩展到数千个测试机和实现共享机器池有效利用的要求。为了满足这些需求,Autotest框架将Autoserv顶层封装为共享服务,用户通过一个基于Web或基于命令行的界面,与中央服务器实例交互,而不是直接执行Client端或Server端。

前端是一个Web应用程序调度测试,监控执行中的测试并管理测试机器。调度器是在AutoServ运行的一个进程,其目的是为了执行和监控Autoserv进程上运行的后台程序。调度器连续匹配可用的机器和预定的测试作业,开启Autoserv进程执行这些作业,并监视流程完成。在整个执行过程中,更新数据库中每个作业的状态,跟踪作业进度。完成后,调度器调用解析器将Autoserv的结果记录到测试结果数据库。调度器与前端通过该数据库交互,执行已计划的测试作业。最后,用户进行结果分析。

当测试规模扩展到成千上万台机器时,自动化测试平台的健康管理变得至关重要。调度器启动特殊Autoserv流程,在每次作业前检查机器运行状况,在数据库中标记不能被修复的机器。此外,调度器定期复检已知宕机的机器,捕捉可能发生的任何手动修复。所有Autoserv进程如果在一个Server端上运行,性能会严重下降。调度器支持对正在运行的进程全局限制,以避免整个系统停顿。

Autotest可以自动生成控制文件运行选定的测试,通过前端Web页面选择测试用例,指定内核安装和选择有效的分析工具,从而使Autotest轻松运行比较复杂的测试,而不需要投入很多精力编写控制文件。

3实验

3.1测试方法与背景

实验平台由1台服务器及20台常规计算机搭建而成。Serve端主机使用浪潮英信SA5212L型服务器,Client端使用浪潮VITE2230型计算机,详细配置如表1所示。

3.2测试结果

在不同规模的计算机集群上测试每个计算机内存读写速率,图3为通过Serve端启动20个Client同时进行内存读写时,每个计算机的平均内存读写速率,同时启动20个Client端执行完测试所需时间结果,如图4所示。显然,Autotest通过Serve端同时启动大型集群上的Client端进行测试和在单个计算机上测试所消耗的时间相近。而逐个执行相同数量计算机节点上的单机测试,时间消耗远高于使用Autotest框架进行测试。

4结语

Autotest强大、稳健,入门容易,便于理解和维护。Autotest适用于各种测试规模,分布式测试性能稳定可靠、效率高。同时,Autotest测试框架易于集成已有的测试工具和测试结果分析工具,方便测试使用和开发测试用例。开源的Autotest正吸引越来越多的人加入框架的开发与维护,使之成为更加完善和强大的自动化测试工具。

参考文献参考文献:

KAMALESH BIBULAL,BALBIR SINGH.Keeping the Linux kernel honest[J].In Linux Symposium,2008(1):1929.

MARTIN BLIGH,ANDY P WHITCROFT.Fully automated testing of the Linux kernel[J].In Linux Symposium,2006(1):113125.

Linux test project\[EB/OL\].http://ltp.sourceforge.net.

SUBRATA MODAK,BALBIR SINGH.Building a robust Linux kernel piggybacking the Linux test project[J].In Linux Symposium,2008(2):91100.

朱岩.应用Linux Test Project组件测试Linux内核应用研究[J].中国测试,2009,35(5):5558.

DAVID BERRERA,LI GE,STEPHANIE GLASS,et al.Testing the Xen hypervisor and Linux virtual machines[J].In Linux Symposium,2005(1):271288.

HIRO YOSHIOKA.Regression test framework and kernel execution coverage[J].In Linux Symposium,2007(2):285296.

张达运,汪汉新.基于Lua的Linux内核测试工具开发[J].计算机工程,2011,37(11):283284.

韩涛,高静.Linux下自动化测试执行管理工具的设计与实现[J].计算机系统应用,2010,19(4):112115.

Autotest\[EB/OL\].https://github.com/autotest

责任编辑(责任编辑:杜能钢)

猜你喜欢
自动化测试分布式
基于预处理MUSIC算法的分布式阵列DOA估计
Hadoop性能测试自动化研究
浅谈空调控制器自动化测试
基于多总线结构的电路板测试系统设计研究
航空航天与国防电子新形势下自动化测试系统的应用
西门子 分布式I/O Simatic ET 200AL
家庭分布式储能的发展前景