云环境下性能测试研究与应用
2015-04-29周有志杜明
周有志 杜明
摘 要:性能测试是一种昂贵且耗时的测试活动,是评估系统性能至关重要的手段。在传统测试环境下进行性能测试存在冗余测试次数增多、性能瓶颈定位困难等问题,人们开始思考和研究如何利用当前流行的云计算技术来提高性能测试的效率。在本文中,我们研究了云环境下性能测试技术的最新研究成果,设计并实现了基于CloudStack云平台的自动化性能测试原型系统。实验结果表明,在云环境下的性能测试,能显著简化用户的测试工作,并具有与传统测试环境下相一致的性能测试结果。
关键词:云计算;云测试;性能测试;TaaS;CloudStack
中图分类号:TP311 文献标识码:A 文章编号:2095-2163(2015)02-
Performance Testing Research and Application on Cloud Environment
ZHOU Youzhi,DU Ming
(School of Computer Science and Technology, Donghua University, Shanghai 201620, China)
Abstract: Performance testing is an expensive and time-consuming testing activities and is a vital tool to assess the system performance. In the traditional test environment to test the presence of increased redundancy performance test times, difficult to locate performance bottlenecks and other issues, people began to think and study how to use the current popular cloud computing technologies to improve the efficiency of performance testing. In this paper, the latest research of performance testing technology in cloud environment is presented and a prototype system of automated performance testing based on CloudStack cloud platform is designed and implemented. Experimental results show that, in a cloud environment performance tests, the proposed method can significantly simplify the user testing, and having consistent with conventional test environment performance test results.
Keywords: Cloud Computing; Cloud Testing; Performance Testing; TaaS; CloudStack
0 引 言
隨着计算机和网络相关技术的飞速发展,使得当今软件系统的规模越来越大,复杂度越来越高。软件测试是保证软件质量的有效技术策略,而性能测试则是软件测试的一个重要组成部分。性能测试是指,通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试; 是验证系统的性能是否满足用户的功能需求,是否达到设计目的,是否可交付的主要手段。一般来说,软件系统性能的好坏,决定着企业对外向用户提供服务的质量优劣,关系着一个企业经营的存亡成败。
性能测试是一种资源密集型测试活动。对于软件系统的性能测试,在传统测试环境下,每次都需要花费巨资去搭建和拆除测试环境,如:自动化测试工具安装与配置,负载机配置,服务器安装与配置等。此外,软件系统在使用过程中,其现实的运行环境发生有一定变化,而测试人员每次手动配置的测试环境却是一成不变的,所以传统模式下的性能测试实际上很难得到被测系统在不同配置和网络变化环境下的性能表现。
当今,计算机软件在社会各行业中已经发挥了关键性的支配作用,用户对于安全、可靠、方便的应用软件的需求也呈现上升趋势。中小型企业由于资源有限,并不具有进一步测试、分析、调优系统的能力,这就使得其在市场竞争中必将处于不利地位。相反,有些大型企业内部却存在着大量的服务器资源只为一些软件系统的特定场景提供服务的具体事实,这就使得彼此间闲置的系统资源并不能跨越融合,进而导致资源的严重浪费。
云计算是一种能够通过网络以便利快捷、按需付费的方式获取计算资源,并提高其可用性的模式,这些资源来自一个共享的、可配置的资源池,并可以高效、自动的方式进行获取和释放[1]。云计算的按需服务、泛化接入、资源池化、弹性服务、可计费服务等特点,使得用户可以在云环境下构建智能升级的性能测试平台,并通过网络为所需用户提供在线的性能测试服务,从而简化性能测试过程,提高性能测试的效率。
本文基于开源的云计算平台CloudStack,设计并实现了针对B/S架构应用软件进行性能测试的原型系统,证明了对部署在云环境中的软件进行性能测试的可行性,重点对比分析在相同配置条件下传统测试环境和云测试环境性能测试结果的异同。
1 相关工作
当前,学术界的研究方向主要集中在基于云计算技术对软件的功能测试,很少有学者关注云环境下的性能测试技术研究。
文献[2]从被测软件的特征和所执行的测试类型这两个方面综述了何时适合将软件测试迁移到云环境下进行,其中在测试类型中提出,将云计算技术与性能测试工具相结合构建云测试系统能更好地按需模拟用户负载对被测程序进行性能测试,但却并未展开具体工作。文献[3]通过对从事不同软件领域的测试服务提供商和使用者进行调研,而全面论述了对软件测试是否迁移到云环境中关键的影响因素。同时,文献[4]又提出了Cloud9模型,一个测试即服务平台原型系统,使用并行符号执行引擎技术,利用商业化云平台(Amazon EC2)中的海量资源解决了以往符号测试中CPU和内存资源不足,以及无法应用于大型软件系统测试的缺陷,由此而提高了符号测试的能力,并可为用户提供方便、快捷、成本低廉的测试服务。文献[5-6]则提出了D-Cloud模型,在云环境下,以改进的、带有错误或异常植入功能的虚拟机实例模拟真实的物理节点,再由云平台Eucalyptus管理、分配和执行测试任务,即为大型并行分布式软件系统一旦部署就难以测试的问题提供了新的解决思路。还有,文献[7]提出了一个测试框架HadoopUnit,这是对原有JUnit测试框架的扩展,而且将云计算技术与Hadoop技术相结合,使得传统的单元测试过程可以在分布式的云环境下并行运行,提高了单元测试效率。此外,另有文献[8]通过利用云计算提供的超大规模测试资源为网络管理系统构建测试环境,有效地解决了传统测试环境下对大规模软件进行性能测试所存在的测试资源不足和测试环境搭建困难的问题,并且进一步通过测试实验证明了这种方法的可行性。
以上研究文献,通过将云计算技术与传统的软件测试方法相结合,对原有的测试问题和测试方法作了相关的拓展和应用,其共同特点是利用云计算技术解决了被测软件在原有测试环境下测试资源不足的问题。但是,却均未考虑和研究如何对部署在云测试环境中的软件进行性能测试。基于此,本文即开展了改进式的综合研究,实现过程如下。
2 云环境下性能测试
2.1 测试环境部署
大体上,按照性能测试的目标,将性能测试可以划分为负载测试、压力测试、并行测试、可靠性测试、容量测试等。在传统测试环境下,利用自动化的测试工具录制用户行为,生成、并编辑形成测试脚本,再分配到测试代理机上运行,以此来模拟真实用户的行为。随着被测系统规模和复查度的扩大,传统的性能测试面临着如下问题:(1)测试难度增加;(2)冗余测试次数增多;(3)很难定位性能瓶颈。为此,若将对软件的性能测试过程迁移到云环境中来,则是云计算技术在软件测试领域的一种新的应用。
如图1所示,用户对软件系统的性能测试活动存在3种部署情况。在图1(a)中,是传统测试环境下的性能测试部署拓扑图,被测软件和测试代理机全都部署在同一个局域网内。图1(b)和图1(c)是基于云计算性能测试的两种部署拓扑图。在云环境下,云计算作为一种可以快速获取海量测试资源的有效方式,已经参与到性能测试活动的各阶段中。
如图1(b)所示,测试代理机部署在云环境中,而将被测软件部署在局域网环境中,有效利用云计算提供的资源对云环境以外的其他软件进行性能测试,为其搭建廉价、快捷、高效的测试环境。在图1(c)中,被测软件部署在云环境中,这是针对部署在云环境中的软件进行性能测试。此種部署模式,支持面向需求的软件测试服务市场,云计算服务提供商可以通过网络为具有测试服务需要的个人或企业提供在线的软件测试服务(TaaS)。
在本文中,研究的是基于图1(c)中性能测试环境的部署模式,也就是针对部署在云环境中的软件进行性能测试相关技术的研究。
(a)局域网-局域网
(a)LAN-LAN
(b)局域网-云环境
(b)LAN- Cloud Environment
(c)局域网-云环境(被测软件在云环境中)
(c) LAN- Cloud Environment(The software under test?in a cloud environment)
图1测试环境部署模式
Fig.1 Test environment deployment mode
2.2两种模式对比
从图1中,根据在传统测试环境下和云环境下测试环境部署模式的不同,可以从如下七个方面分析这两种测试环境部署之间的差异性,具体如表1所示。
表1差异性分析
Tab.1 Difference analysis
角度
传统性能测试
云环境下性能测试
基础设施
企业自行购买各种测试基础设施
由云测试服务提供商提供测试基础设施服务
价格模型
一次性付费,在项目初期投入较大
按需付费,可以按照被测项目规模、被测目标、被测时间等付费
测试人员要求
企业需要投入较多资源对测试人员进行专业技能培训
由云测试服务提供商配置专业的测试人员,无需用户考虑
测试过程管理
分散管理模式,参差不齐的软件质量保证
集中管理模式,统一的软件质量保证
安全模型
企业内部管理,安全系数高,安全机制简单
共享公共云测试平台,需要测试服务需求方、云测试服务提供商等多方参与,安全机制复杂
测试环境部署
手工配置和分配测试资源
云计算平台动态分配测试资源,自动化配置测试环境
商业扩展
增加软硬件资源,易产生资源闲置,可扩展性差
有效利用云计算平台资源池化,可扩展性强
3云环境下性能测试平台
3.1 云测试平台架构
云环境下性能测试系统基于B/S架构,主要由三层构成,分别为:用户接口层、任务管理层和云资源服务层,其总体架构如图2所示。
图2云测试平台架构
Fig.2 Cloud testing platform architecture
由图2可知,云测试平台架构中各层级的功能实现可描述如下:
(1)用户接口层:是用户通过浏览器访问云测试平台的入口,该层主要用于与用户交互,其功能将表述为:① 提交性能测试脚本;② 提交性能测试环境的资源需求描述文件;③ 跟踪性能测试的执行过程;④ 可视化展示测试结果,下载测试报告。
(2)任务管理层:该层主要包括四大模块,分别是测试环境自动化配置模块,测试任务调度模块,测试任务监控模块和云计算服务管理模块。在性能测试任务执行前,该层首先需要根据测用户提交的测试环境资源描述文件,通过与云资源服务层交互,自动化配置性能测试环境,并为测试任务提供不同并行粒度的调度服务。在测试任务执行时,负责监控测试任务的状态,还可实时反馈给用户。而在测试任务执行完毕之后,对测试结果进行分析统计,同时则为用户生成性能测试报告,供用户下载和查看。
(3)云资源服务层:本文基于开源的云计算平台CloudStack,对各种物理硬件资源集中管理,通过虚拟化技术(KVM)为测试用户提供计算、存储、网络以及其他资源,利于用户能够部署操作系统、被测软件和其他软件。该层根据任务管理层的指令,选择合适的镜像文件,创建虚拟机实例,并把测试任务脚本分发到各虚拟机实例上,再将虚拟机充当负载机,执行测试脚本,对被测软件进行性能测试。而在测试任务结束后,销毁虚拟机实例,释放其所占用的资源。
3.2 云环境下性能测试执行流程
在该云测试平台下,性能测试执行流程如图3所示。为了减少自动化配置测试环境所需要的时间,云测试平台将会维护一份常用的测试资源模板库,具体表现形式为虚拟机实例对应的各种镜像文件。多数情况下,每个镜像都有一个资源描述文件,其中包含有安装时常用的操作系统和应用软件。
图3性能测试执行流程
Fig.3 Performance testing execution process
3.3 技术方案
本文基于B/S架构,搭建云环境下的性能测试平台。其综合设计方案具体如下:
(1)用户接口层:采用JSP、AJAX等技术开发,主要负责与云测试平台用户交互。
(2)任务管理层:主要使用Java、MySQL和SSH框架等技术实施研发,并负责测试环境自动配置、测试任务调度、测试执行过程监控、测试结果回收和生成测试报告等功能实现。
(3)云资源服务层:主要包括云管理服务器和云节点服务器。基于开源的云计算平台CloudStack对各种物理的软硬件资源进行管控,利用KVM虚拟化技术在云节点服务器上按照镜像模板生成各种虚拟机,并在云虚拟机上使用商用的自动化性能测试工具(LoadRunner)执行用户提交的测试脚本。
3.4 服务流程
该云測试平台以用户需求为核心,从测试用户的角度出发,使用性能测试服务的流程则如图4所示。具体来说,就是用户通过自动化性能测试工具(LoadRunner)录制或编程语言(C、Java)编写形成测试脚本,并由云测试平台门户网站上传测试脚本和测试环境资源描述文件,再经过云测试平台对上传文件进行分析,由此即为用户相应性能测试环境的配置和搭建,同时则将测试脚本分发到各虚拟机实例上运作且执行,等测试任务执行结束,将返回性能测试结果,用户就可以在门户网站个人中心处查看或者下载对应的测试报告。
图4服务流程
Fig.4 Service process
4 实验
4.1 实验配置与步骤
基于上图1(a)和1(c)中性能测试环境的两种部署模式,研究采用JPetStore作为被测系统,分别对其在两个测试平台下的性能测试结果进行观察和分析。其中,JpetStore运行在Tomcat 7.0中,使用MySQL 5.5.27作为JpetStore的数据库服务器。
在传统性能测试环境下,本文采用两台物理机作为负载机,一台物理机作为控制机和部署机。云环境下,在CloudStack计算节点服务器上,创建3个虚拟机实例,其中两个虚拟机作为负载机,另一个作为部署机。物理机的配置为:CPU,双核2G;内存,2G;操作系统,Ubuntu 12.04。
通过对JPetStore架构和用户使用行为分析,为了更好地模拟真实用户的行为习惯,研究中定义用户的行为如图5所示。在性能测试用例的设计中,每个虚拟用户都需经历3个动作,其中第二动作会以不同的概率发生。
图5测试用例设计
Fig.5 Test case design
4.2 实验结果与分析
实验一:在虚拟机实例和物理机配置相同的情况下,研究测试了16组JPetStore在不同负载条件下的性能指标,取平均后结果值如表2所示,单位为毫秒(ms)。
表2虚拟机与物理机配置相同
Tab.2 Virtual machines and physical machines configured with the same
虚拟用户数
平台
响应时间
请求成功率
50
LAN
1668
100%
CLOUD
1876
100%
150
LAN
2048
100%
CLOUD
2628
99.6%
300
LAN
3665
97.8%
CLOUD
4746
94.2%
500
LAN
6067
87.4%
CLOUD
7852
80.8%
实验二:云测试平台下,不同配置的虚拟机实例,在相同的测试脚本下,其性能指标随负载变化的情况如表3所示,单位为毫秒(ms)。Small虚拟机实例的配置为:CPU,单核1G;内存,1G;操作系统,Ubuntu 12.04。Medium虚拟机实例的配置为:CPU,单核2G;内存,1G;操作系统,Ubuntu 12.04。Large虚拟机实例的配置为:CPU,双核2G,内存2G;操作系统,Ubuntu 12.04。
表3虚拟机配置不同
Tab.3 Different virtual machines configuration
虚拟用户数
虚拟机实例
响应时间
请求成功率
50
Small
2 236
100%
Medium
2 012
100%
Large
1 862
100%
150
Small
3 762
95.8%
Medium
2 976
97%
Large
2 578
99.7%
300
Small
6 292
52%
Medium
5 372
84%
Large
4 823
96.9%
500
Small
18 876
32%
Medium
11 778
54%
Large
7 836
87.2%
實验一结果表明,在测试环境配置和负载数量都相同的情况下,传统测试环境和云测试平台具有相一致的性能测试结果,这间接验证了将软件的性能测试活动迁移到云计算环境下的可行性。实验二结果表明,在云测试环境下,随着虚拟机实例的配置越高,其生成负载的质量越好,而对应的性能测试结果就越可靠。
5 结束语
本文结合云计算和自动化性能测试技术,解决了在传统测试环境下,性能测试环境构建困难、测试资源不足等难题,设计并实现了云环境下性能测试平台的原型系统。通过该云测试平台,测试用户只需要通过提交测试环境资源描述文件和测试脚本,云平台即可进行测试资源的动态分配,测试环境的自动配置,并把测试任务分配到各虚拟机实例上执行,最后将测试结果集中展现给用户。实验结果表明,云环境下的性能测试,有助于用户节省巨大的测试成本,且能明显优化用户的测试工作,并可获得与传统测试环境下的性能测试相一致的测试结果。
在实验过程中,却仍存在测试虚拟机运行效率不高,虚拟机调度算法适应性不强等问题。若能研发更好的调度算法,则将在更大程度上展现云环境下性能测试的优势。
参考文献:
[1] NIST, NIST. The NIST definition of Cloud Computing[J]. COMMUNICATIONS OF THE ACM, 2010, 53(6):50-50.
[2] PARVEEN T, TILLEY S. When to migrate software testing to the Cloud?[J]. Software Testing, Verification, and Validation Workshops, Third International Conference on, 2010:424 - 427.
[3] RIUNGU L M, TAIPALE O, SMOLANDER K. Software testing as an online service: Observations from practice[C]//Software Testing, Verification, and Validation Workshops (ICSTW), 2010 Third International Conference on. [s.l.]:IEEE, 2010:418 - 423.
[4] CIORTEAL, ZAMFCC, BUCURS, et al. Cloud9: a software testing service[J]. IEEE Trans on Operating Systems Review, 2009, 43(4) :5-10.
[5] TAKAYUKI B, HITOSHI K, RYOK, et al. D-cloud: design of a software testing environment for reliable distributed systems using cloud computing technology [C] //Proc of the10thInternational Conference on Cluster, Cloud and Grid Computing. Washington DC: IEEE Computer Society, 2010:631-636.
[6] HANAWAT, BANZAIT, KOIZUMIH, et al.Large-scale software testing environment using cloud computing technology for dependable parallel and distributed systems[C]//Proc of the 3rd International Conference on Software Testing, Verification,and Validation. Washington DC: IEEE Computer Society, 2010:428-433.
[7] PARVEEN T, TILLEY S, DALEY N, et al. Towards a distributed execution framework for JUnit test cases[C]//Software Maintenance, Icsm, IEEE International Conference on. [s.l.]:IEEE, 2009:425-428.
[8] GANON Z, ZILBERSHTEIN I E. Cloud-based performance testing of Network Management Systems[C]//Computer Aided Modeling and Design of Communication Links and Networks, 2009. CAMAD '09. IEEE 14th International Workshop on. [s.l.]:IEEE, 2009:1-6.
1基金项目:上海市教育委员会科研创新项目(12ZZ060),上海市科委启明星项目(12QB1402300)。
作者简介:周有志(1989-),男,湖南衡阳人,硕士研究生,主要研究方向: 云计算、软件测试;
杜 明(1975-),男,黑龙江虎林人,博士,副教授,主要研究方向: 闪存数据库。