基于虚拟实验室的压力测试方法与服务平台

2014-01-31 12:10徐小春王礼生董超群
计算机工程与应用 2014年15期
关键词:测试环境测试人员服务平台

徐小春,王礼生,董超群

XU Xiaochun,WANG Lisheng,DONG Chaoqun

江南计算技术研究所软件测评中心,江苏无锡214083

Software Testing Center,Jiangnan Institute of Computing Technology,Wuxi,Jiangsu 214083,China

1 引言

不少信息系统存在的“用户数过多无法登录”、“系统忙无响应”、“越用越慢”等问题导致了糟糕的用户体验。因此在系统上线之前对其进行测试时,压力测试是一项必不可少的工作。大中型的信息系统在设计时,一般都会考虑支持的并发用户数、吞吐量、连接数、持续运行时间等压力测试相关的指标,如何有效验证各类指标的实现情况是测试人员必须解决的问题。

在传统的软件测试实验室内难以部署复杂的、异构和分布式的压力测试环境,要直接在空间有限的实验室内部署与真实环境完全一致的测试环境来开展测试的可能性小;对于那些需要模拟用户极度拥塞场景的软件测试,更难在实验室内开展。测试人员只能在非常有限的时间内使用待上线的生产环境开展工作,测试的充分性得不到保证。

当前云计算系统的高速建设给测试工作带来了新的启示。云计算能够按需提供计算、存储和网络等压力测试必须的资源,使用方便且成本比为一个测试项目单独构建复杂测试环境低,因此可探索使用云计算的基础设施实施压力测试的方法。本文阐述利用云计算的基础设施构建虚拟测试实验室实施压力测试的方法,将云计算技术引入到压力测试过程中,以解决传统的测试实验室构建压力测试环境困难的问题。

2 概念

2.1 Vlab

Vlab是一个宽泛的概念,有虚拟测试实验室、虚拟教学实验室、虚拟医疗实验室等。本文中的虚拟实验室是计算机领域的Vlab[1],它提供通用的桌面计算机、工作所需的网络、标准软件配置如操作系统、数据库和测试工具等,并且保证计算机系统安全。工作人员不接触实验室的实际物理设备,而是通过RDP、SSH或VNC客户端访问远程的桌面机或服务器的虚拟机(Virtual Machine,VM)。

利用云计算基础设施构建用于测试的Vlab,允许任何人在任何时刻按需访问与物理环境类似的虚拟环境,无需像使用物理机那样长时间地等待安装配置。Vlab集中管理高度虚拟化的基础设施,动态地部署测试资源,确保满足测试项目的需求[2]。从另外一个角度看,其管理的对象是测试云,按照服务等级协议选择测试参数、配置测试环境、跟踪测试进展并检查测试结果[3]。

Vlab使用云计算基础设施构建,虚拟计算机、网络和存储的功能表现与真实物理设备的表现相似,因此在实践中用得较多的是功能、安全性和兼容性等方面的测试。如何将Vlab应用于压力测试则是本文研究的重点。

2.2 压力测试特征、方法和工具

压力测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并以此来获得系统性能提供的最大服务级别的测试[4]。通俗地讲,压力测试是一定要在规定的负载下测试到系统发生故障为止。对当今的信息系统尤其是网络应用服务系统的压力测试一般需:

(1)测试最大的并发用户数、在线用户数或连接数等指标;

(2)测试能处理的最大数据量,如吞吐率、带宽或页面数等指标;

(3)测试事务处理能力相关的指标例如响应时间和每秒处理的事务数;

(4)测试在不同位置产生的负载对系统的影响;

(5)需进行持续一段规定的时间,而且连续不能中断的测试。

压力测试常常被归为性能测试的一种类型,一般与性能测试和调优工作结合在一起进行。测试通过与否需要依据系统需求作出相应的判断。

压力测试一般通过自动化的方法完成。首先完成压力测试脚本创建和调试,然后配置好压力测试的场景,提交压力测试平台执行。多数压力测试平台中,控制器、负载发生器和分析器承担着压力测试执行的主要工作。控制器将脚本传递给负载发生器,启动并监控多个负载发生器的执行;负载发生器是施加压力的重要工具,按照指定用户数执行脚本,发起对目标系统的压力测试;分析负载发生器执行的结果数据,产生测试报告。

压力测试的工具比较多,典型的工具有LoadRunner、RPT、SilkPerformer和Jmeter等[5],这些工具的共同特点是支持录制或者手工编写压力测试的脚本,支持测试场景的配置,并且能控制多机上的负载发生器模拟一定数量的虚拟用户(Virtual User,VU)生成高强度的压力,对目标系统进行充分的测试。

压力测试的这些特点要求压力测试要有足够的资源投入。传统的压力测试方法是通过在一定数量的物理机上部署负载发生器,生成VU,访问被测系统。这种方法的缺点是需要部署指定数量的计算机,工作量和成本较大,例如要测试支持10万并发用户的大型系统,若每台计算机支持创建250个VU,则需要配置400台计算机,在一般的实验室中难以实现。

基于云计算基础设施构建Vlab为解决上述问题提供了一个新的途径[6]。利用支持千台VM的测试云,在Vlab中以模板为基础创建一定数量负载发生器,并且指定其分布于不同地点的资源池,快速部署所需VM群,工作量和成本都有效降低,且能实现多地点的并发访问,与真实的使用环境相似,从而保证测试充分性。若能以标准的测试流程向用户提供服务,则能实现“测试即服务”的功能[7]。

3 压力测试服务

一般的压力测试过程(以下记作P1)较复杂,步骤比较多。在测试计划已经确定的情况下,需要选择合适的测试工具,(1)设计测试脚本;(2)向设备管理员申请测试资源,如计算机、网络和存储;(3)根据VU规模部署单机独立测试环境或多机联合测试环境,在其中安装指定的操作系统和测试工具;(4)测试控制器与负载发生器的连通性;(5)设定测试场景及参数;(6)执行测试;(7)执行完导出测试结果数据,向设备管理员归还测试资源;(8)分析测试结果。在这种模式下,测试人员必须参与所有的步骤。

在基于Vlab的环境下,压力测试过程可以设计得更加简单易用,在压力测试服务平台中以服务的形式向测试人员提供专业的压力测试服务,其测试过程将(以下记作P2)步骤简化为3步。如图1所示。

P2包括:(1)设计测试脚本;(2)向压力测试服务平台申请压力测试,申请时配置测试场景及参数,上传已设计好的测试脚本,压力测试服务平台在接受到申请后在Vlab中自动部署测试环境并开始测试执行;(3)分析测试结果。

P2的步骤(1)和步骤(3)与P1的步骤(1)和步骤(8)相同,而步骤(2)的测试执行由压力测试服务平台后台进行,无需测试人员参与。压力测试服务平台根据测试人员申请时所设定的参数计算所需的VM数,从Vlab的资源池中自动选择资源,基于预置的控制器模板和负载发生器模板分配计算机、网络和存储,创建控制器和负载发生器的VM,启动并执行测试,集中测试结果数据,将结果反馈给测试人员,最后自动释放所有的测试资源。

在压力测试服务平台的支持下,测试人员所关注的测试资源部署、测试工具安装、测试环境的配置等工作量较大的工作交由了系统自动完成,测试人员可以将更多精力投入在脚本、场景和结果分析等工作上。

本文提供了一个基于Vlab的压力测试服务平台的基础架构模型,供测试人员在设计压力测试平台时参考。

图1 压力测试过程

4 压力测试服务平台的架构及构建策略

4.1 架构

云计算基础设施服务能提供用于测试的VM组成测试环境,但是基于VM的软件测试环境往往只关注单个VM上的技术,缺乏对多VM组成的分布式测试环境的考虑,忽略了VM之间的内在联系[8]。此外,由于缺乏对虚拟测试环境的整体设计、管理、监控等功能的支持,传统的由VM建立的测试系统无法体现压力测试环境的特点。系统架构设计应根据压力测试的特点,考虑以下几方面的需求:

(1)压力测试服务的管理。服务管理包括服务的申请、处理和终止。测试人员能够通过浏览器申请测试服务,服务提交后Vlab后台处理该服务,测试执行完成后服务自动终止。测试人员能够监控后台处理过程中服务的状态。

(2)Vlab需支持按测试项目构建测试环境。分布式系统一般由客户端、应用服务器、数据服务器等不同用途的计算资源构成,在构建项目的压力测试环境时必须分别部署项目对应的资源。为一个被测软件系统测试而建立的所有测试资源纳入一个测试项目的统一管理。

(3)VM、网络和项目的模板化。将安装了不同操作系统、数据库或测试工具的VM模板化,将网络参数如IP地址模式、掩码、网关配置等模板化,新项目创建时选择所需的模板,部署完成后就不需要再安装相应的软件。将项目模板化,类似的项目实例化该模板,快速部署生成即配即用的环境,节省用于重复配置的时间。

(4)提供必要的管理功能。这些功能包括①与测试项目相关的用户、用户组和权限管理;②VM和网络模板管理;③活动日志、资源使用、已部署VM的监视;④资源池中主机、数据存储库和网络管理等。

能够满足以上需求的典型的压力测试服务平台架构如图2所示。

图2所示的压力测试服务平台由云计算基础设施、Vlab和压力测试服务组成。云计算基础设施为Vlab提供基本的计算、网络和存储服务;Vlab处理来自压力测试服务层的各类请求,调用云计算基础设施的服务接口,完成资源的分配和释放;压力测试服务层负责将压力测试过程封装成服务,提供面向测试人员的工作界面。

(1)压力测试服务:实现图1所述的基于Vlab的测试过程。测试人员在浏览器中完成服务的申请、测试参数和场景的配置、测试脚本的上传等工作,服务申请提交后由压力测试服务平台自动地分配所需的软硬件资源、执行测试脚本、反馈测试结果并释放资源,后台工作完成后,测试人员查看并分析测试结果。压力测试服务通过调用Vlab提供的SOAP/REST API对项目、VM和模板等进行管理和使用[9]。

(2)Vlab:是压力测试服务平台设计的关键,也是压力测试服务和云计算基础设施之间的“桥梁”,处理来自压力测试服务层的各类请求。Vlab提供管理员功能部件和测试员功能部件。管理员功能部件至少应包括VM模板管理、网络模板管理、用户/用户组管理、权限管理、存储库管理、资源池管理、测试工具和脚本管理功能,才能满足Vlab的配置管理需求;测试员功能部件一般包括测试项目创建、测试配置计划、VM部署、VM开关停与快照、网络管理、测试工具及脚本选择器、资源监控的功能,满足一个测试项目的使用需求[10]。Vlab通过调用云计算基础设施服务提供的SOAP/REST API对基础设施资源等进行管理和使用。

(3)云计算基础设施:一般由服务器集群、存储服务器和高速网络组成测试云。服务器一般配置高性能多核CPU、大内存、高速网卡,并且安装虚拟化软件和代理工具。虚拟化层之下的围栏驱动实现了对多VM的隔离,使得不同的测试模板可以重复生成和同时部署而不会在网络上引起IP地址和MAC地址的冲突。多台服务器同时工作,保持负载均衡,使用共享存储,形成服务器集群,以获得比较高的性能。存储服务器为测试工作提供存储VM文件、测试工具、测试用例库和系统软件镜像的服务[11]。测试云为上层的Vlab服务提供SOAP/REST API,包括VM管理、网络管理、存储管理等的应用编程接口,开发人员按照接口规范实现Vlab服务。

图2 压力测试服务平台的架构示意图

4.2 平台构建策略

压力测试服务平台的构建首先要确定测试云的获取方式。测试云可自行构建或者利用已有的商用计算云,例如基于云的CTaaS系统即利用Amazon EC2作为其基础设施[12]。自行构建测试云需要根据测试需求配置相应数量的高性能服务器、网络设备和存储设备,而且需要一套功能完善的基础设施管理软件;租用已有的商用计算云省去了建造和维护基础设施的过程,能够缩短工程周期,但是对需要与互联网物理隔离的企业不适用。测试云须为Vlab的设计提供一套功能全面的API,否则无法在Vlab中实现测试项目的VM管理、网络管理和存储管理等功能项。

其次需要决定是完全自主设计还是基于现有的COTS工具开发Vlab。完全自主设计按照需求设计系统的配置项,实现系统所有功能,需要一个较长的开发周期;基于现有的COTS工具提供的接口进行开发,不仅能节省时间,而且可以得到较好技术支持。现有虚拟实验室方面的COTS工具的基本功能完善,能与云计算基础设施服务集成,并且提供进一步开发的编程接口,扩展测试方面的应用。有代表性的工具是Vmware vCloud Director、SkytapCloud、SurgientVirtual Automation Platform和Microsoft Visual Studio Lab Management[13]。

最后是需要根据压力测试服务的具体需求确定所需实现的服务功能集。因目前还没有成熟的压力测试服务构建工具,需要自行设计。若要实现图2所述的所有功能,实现较高程度的自动化,则工作量较大。设计者可根据测试需求,进行适当剪裁。

5 实验与分析

5.1 实验环境

为验证第4章所述之架构实现的可行性,本文利用现有的COTS工具并结合自主开发构建了一个小规模的压力测试服务平台实验环境,如图3所示。

云计算基础设施由5台双CPU(每CPU四核,主频2.4 GHz)服务器、1台4 TB盘阵、1台交换机组成,安装Vmware的ESX Server操作系统。为了对ESX Server进行管理,配置了一台vCenter Server服务器。

Vlab使用单独的服务器,其中安装vCloud Director,将vCenter Server所管理的所有ESX Server均纳入到vCloud Director的资源池。在Vlab中创建预置了压力测试工具(本文以LoadRunner为例)的VM模板,包括控制器模板和负载发生器模板。Vlab根据模板部署负载发生器VM,之后在测试执行时产生所需数量的VU对被测系统施加压力。

压力测试服务亦使用单独的服务器,其中安装IIS服务,并部署自行设计的压力测试服务应用。该应用调用Vlab的REST API,提供服务申请、参数和场景配置、脚本上传、查看结果的用户界面,并能自动部署负载发生器、测试连通性、在控制器中启动测试,执行完后反馈测试结果,最后自动释放所自动部署的资源。

图3 压力测试服务平台实验环境

5.2 测试与分析

为了考察测试平台的有效性,本文在小规模的压力测试服务平台实验环境下与在一般压力测试平台下都进行了实验,并对实验结果进行了分析。

5.2.1 测试过程

本文选择某信息系统的网站作为测试对象,主要测试大量并发用户对该网站首页的访问时各项指标,包括响应时间、点击率、吞吐率等数据,目的是能力验证,验证其能否支持1 000个并发用户。

一般压力测试平台使用5台微机,主频3.2 GHz,内存1 GB,都安装LoadRunner,其中一个是控制器,其余4个作为负载发生器,基于硬件配置、操作系统连接数限制、网站首页复杂性和许可证等多因素的考虑,设置每个负载发生器产生的VU数为250。小规模的压力测试服务平台在后台部署该项目的测试资源时,亦创建配置相当的VM。两种方法构建的测试环境类似。

在一般压力测试平台下,按照P1实施测试,包括资源部署、连通性测试和导出数据等工作都需要人工完成,只有并发执行是由计算机自动完成。而在基于Vlab的压力测试服务平台下,按照P2实施测试,设计好脚本之后,测试人员申请压力测试服务,指定并发用户数量、场景调度策略[14]和位置等信息,上传测试脚本,提交压力测试服务平台测试。后台执行时,从模板自动部署(1 000/250)=4个负载发生器和1个控制器VM,其余4个作为负载发生器。负载发生器的部署位置根据申请服务时所配置的值部署。例如若位置值配置为1,则将4个负载发生器部署在一台服务器上;若位置值配置为4,即模拟在4个地点产生负载,则在4台服务器上各部署一个负载发生器。本次实验中,为了保持与一般压力测试平台的相似性,采用后一种配置。

5.2.2 开销分析

本次实验中,对于P1和P2,设计测试脚本和分析测试结果的工作内容相同,所需时间基本相当;对于P1,步骤(2)~(7)中除步骤(6)是自动执行可准确测量时间为147 s外,其余步骤均为人工完成,执行时间只能估计。按照压力测试经验估计,在熟练的情况下,步骤(2)约10 min,步骤(3)约4 h,步骤(4)约2 min,步骤(5)约5 min,步骤(7)约10 min,步骤(2)~(7)总时间约4 h 29 min。

在小规模的压力测试服务平台上执行时,对于P2,步骤②内所有活动包括部署软硬件资源、连通性测试、测试执行等是全自动执行,本次实验中步骤②执行的总时间为12 min 28 s。

由此可见,基于Vlab的压力测试服务平台能将测试资源部署自动化并与测试执行衔接,大幅度节省测试工作所需的时间。

5.2.3 有效性分析

本次实验中,为了分析在压力测试服务平台下测试的有效性,对在一般压力测试平台和基于Vlab的压力测试服务平台下的测试曲线进行了对比,包括运行VU数、响应时间、点击率和吞吐量的曲线。

一般压力测试平台下的测试曲线见图4。

基于Vlab的压力测试服务平台下的测试曲线见图5。

对图4和图5进行对比分析发现,两个平台下运行VU数、响应时间、点击率和吞吐量的测试曲线存在一些差别,但线型和趋势基本一致。例如运行VU数的曲线,两者都是在前30 s VU数按一定数量线性增加,之后80 s VU数处于1 000,最后40 s,大量的VU完成测试,VU数急速减少直至为0。

因此,使用基于Vlab的压力测试服务平台与使用一般的压力测试平台进行测试的结果基本相同,可以保证测试结果的有效性。

5.2.4 评价

本文对典型的场景包括用户登录、关键字检索、数据项查询、添加数据项等亦进行了测试,使用基于Vlab的压力测试服务平台能大幅降低测试开销,同时其测试曲线亦与一般压力测试平台一致。该平台作为一种采用了虚拟化技术的自动化测试服务平台,压力测试项目能够高效实施。在需测试的VU数量越多时,该服务平台越具有优势。该平台的缺点是仅适用于面向多用户的网络应用系统的压力测试,具有一定的局限性。

图4 一般压力测试平台下的测试曲线

图5 基于Vlab的压力测试服务平台下的测试曲线

6 结束语

在云计算背景下,相对于采用一般的压力测试方法实施压力测试,基于Vlab压力测试方法更易于使用,且效率更高。虽然构建一个基于Vlab的专业压力测试服务平台需要一定的投入,但是利用它可以将测试资源部署和测试执行有效对接,实现测试自动化,并且支持多项目大规模的压力测试。而在允许连接互联网的条件下,可利用不同位置的商用测试云,构建更大规模的压力测试服务平台,模拟真实的场景,对目标系统进行更充分的测试。

[1] Burd S D,Seazzu A F.Virtual computing laboratories:a case study with comparisons to physical computing laboratories[J].Journal of Information Technology Education,2009,8:55-78.

[2] Lanowitz T,Dronzek L.Virtual lab management[R].2010:1-26.

[3] Bai Xiaoying,Li Muyang,Huang Xiaofei,et al.Vee@Cloud:the virtual test lab on the cloud[C]//Proc of the 8th International Workshop on Automation of Software Test,2013:15-18.

[4] 吴为根.基于Web的压力测试[D].上海:复旦大学,2006:1-2.

[5] 段念.软件性能测试过程详解与案例剖析[M].北京:清华大学出版社,2012:60-75.

[6] Gao Jerry,Bai Xiaoying,Tsai Wei-Tek.Cloud testing-issues,challenges,needs and practice[J].Software Engineering,2011,1(1):9-23.

[7] Yu Lian,Tsai Wei-Tek,Chen Xiangji,et al.Testing as a service over cloud[C]//Proc of the 5th IEEE International Symposium on Service Oriented System Engineering,2010:181-188.

[8] 龚爱斐,张文静.基于虚拟化架构的软件开发与测试环境自动化[J].自动化与信息工程,2008,29(2):4-6.

[9] Candea G,Bucur S,Zamfir C.Automated software testing as a service[C]//Proc of the 1st ACM Symposium on Cloud Computing.New York:ACM Press,2010:155-160.

[10] Xie Weicheng,Yang Xia,Li Fugan.A virtual laboratory platform and simulation software based on Web[C]//Proc of the 10th International Conference on Control,Automation,Robotics and Vision,2008:1650-1654.

[11] Armbrust M,Fox A,Griffith R,et al.A view of cloud computing[J].Communications of the ACM,2010,53:50-58.

[12] Gao Jerry,Manjula K,Roopa P,et al.A cloud-based TaaS infrastructure with tools for SaaS validation,performance and scalability evaluation[C]//Proc of the 4th IEEE International Conference on Cloud Computing Technology and Science,2012:464-471.

[13] Kim W.Cloud computing adoption[J].International Journal of Web and Grid Services,2011,7:225-245.

[14] Mercury Interactive Ltd.Controller user guide[M].[S.l.]:HP Inc,2009:149-183.

猜你喜欢
测试环境测试人员服务平台
移动应用众包测试人员信誉度复合计算模型研究
打造一体化汽车服务平台
全数字仿真测试环境在航天软件测试中的应用研究
江苏省一体化在线交通运输政务服务平台构建
论基于云的电子政务服务平台构建
雷达航迹处理测试环境构建方法研究
网络设备自动化测试设计与实现
基于云计算的民航公共信息服务平台
高校分析测试中心测试队伍建设方案初探
浅析软件测试中的心理学应用