标题 | 基于OpenStack的云测试平台及其性能分析研究 |
范文 | 丁小盼 周浩 贺珊 陈朱管 郭东辉 摘要:云测试是基于云计算的软件测试新模式。在传统的软件测试中,当测试任务高并发、原有的硬件资源无法满足测试时间要求时,需要更换硬件资源、重新配置测试环境。使用云测试可以实现按需分配硬件资源、无需重新配置测试环境,因而比传统软件测试更能节省测试成本。介绍了如何在OpenStack云平台上配置和运行软件代码覆盖率测试工具SAT。实验表明,当测试任务高并发时,所搭建的云测试平台可以在不用重新配置环境的情况下满足用户对测试时间的要求,降低了用户测试成本。 关键词:云计算;OpenStack;软件测试;云测试平台;SAT 中图分类号:TP393 文献标识码:A 0 引言 云测试是基于云计算的软件测试新模式。软件测试工具SAT是一款常见的针对C语言的代码覆盖率测试工具。采用云计算平台来运行SAT工具不仅可以提高软件的测试效率,而且可以降低软件开发的测试成本。 目前主流的云测试平台中,Soasta主要用于测试Web应用和网站的性能;Sauce Labs提供基于Selenium的测试服务,可跨多浏览器测试Web应用;BlazeMeter主要用于负载与性能测试,能够创建负载测试脚本。这些平台能够实现的主要功能是性能测试、负载测试和Web应用测试服务,并没有涉及到软件代码覆盖率测试服务。常用的C代码覆盖率测试工具主要有ATAC、GCOV和SAT,其中ATAC和GCOV都是通过对代码的每个基本块进行插装来获取代码覆盖信息,而SAT是基于超级块支配图插装的软件测试工具。它在不丢失代码覆盖信息的情况下能对插装探针个数进行有效优化,减少代码插装对被测程序性能的影响。但在SAT的常用运作模式中,SAT测试环境都是搭建在一台计算资源已经固定的单机环境上,而在系统使用高峰期,出现测试任务高并发的情况下,由于计算资源的限制,会导致任务测试时间明显增加,无法满足用户对测试时间的要求。 传统的软件代码覆盖率测试在搭建好测试环境后,当业务变更或业务量增加时,由于原有硬件资源的限制,会导致用户的测试时间增加。为了降低用户的测试时间,需要更换硬件配置,重新配置测试环境(如系统重装,软件的安装、配置文件的修改等),而这些工作无疑会加大测试成本的投入。使用云计算平台则可以有效地解决这个问题。云计算平台具有“按需服务”的特点,用户可以按需部署测试资源,不需要重新配置测试环境,因而测试成本可以明显降低。 除了Soasta、Sauce Labs和BlazeMeter等商业性的云测试软件之外,目前也有一些成熟的、开源的云测试软件可以利用,包括业内熟知的Hadoop、Eucalyptus、Openstack、CloudStack和OpenNebula。其中,OpenStack虽然出现较晚,但是因为官方文档相对完备,安装配置非常容易,且兼容亚马逊公共云平台,因此很快获得广泛推广。OpenStack已被成功地应用于数据仓库系统、混合存储系统、Web应用测试等领域,但在软件代码覆盖率测试方面还没有相关应用。 本文的第二部分将介绍SAT的基本原理和SAT在OpenStack云平台上运行的工作机制;第三部分阐述如何在OpenStack上配置SAT,以形成一个完整的云测试平台;第四部分对这一平台的性能进行分析评估;最后,在第五部分给出本文结论。 1 相关原理 软件测试的一般流程为首先根据程序的内部结构设计测试用例集,然后将测试用例作为输入,对被测程序的运行结果进行分析。而在度量测试的完整程度,判断测试用例是否足够、测试何时可以结束时,就需要用到代码覆盖率测试。代码覆盖率测试工具SAT工作流程如图1所示。 由图1可知,对任意一个待测程序,SAT完成一个完整的测试流程都需要三个步骤:编译系统satCC将待测程序编译成可执行文件;输入测试用例,运行编译后的程序;覆盖率分析器sat根据前两个步骤产生的静态文件和动态跟踪文件,获得测试报告。在步骤一中,预处理器sat cpp先将待测程序Test.c的源码展开,得到预处理后的源码Test.i;接着代码插装器sat i对Test.i进行分析,得到记录程序行列信息的静态文件Test.sat,同时对Test.i进行插装,获得插装探针函数后的源码Test sat.i;最后编译器sat cc对Test sat.i进行编译,并链接相应库函数,生成可执行文件Test。在步骤二中,将测试用例作为输入,运行程序Test,生成记录程序运行情况的动态追踪文件Test.trace。在步骤三中,覆盖率分析器通过对Test.sat和Test.trace文件进行分析,生成测试报告,获得Test程序代码的覆盖率情况。 从上述SAT的工作流程可知,每一个待测程序都需要经过插装编译、程序运行、覆盖率分析这三个步骤。每个步骤所执行的程序分别为satCC、Test、sat。这三个程序会产生对应的进程,假设为P1、P2和P3,它们按顺序依次耗费CPU时间来执行。在SAT的常用运作模式中,假设测试环境有N个CPU内核,有M个待测程序。当M=1时,P1、P2、P3都只有1个,它们将按顺序执行;当出现测试任务高并发的情况,即M大于N时,P1、P2、P3进程都对应有M个。我们以M个P1进程的执行情况为例,P2、P3进程的执行情况类似。多任务操作系统中,在某一个时间点,一个CPU只能执行一个进程,所有正在运行的进程会交替占用CPU,N个CPU也只能并行执行N个P1进程,剩下的P1进程会存放在队列中,等待其它进程的CPU时间片用完,才会去执行。因此,在CPU内核数固定的情况下,测试任务并发请求数越大,用户需要的测试时间就越长。 为了降低用户的测试时间,需要增加用户所使用的测试资源。传统增加测试资源的方法是通过购买配置更高的硬件,但更换硬件后需要重新配置测试环境,这又会引入新的测试成本。本文通过在OpenStack云平台上运行SAT工具来改进传统方法存在的缺陷。在OpenStack云平台上运行SAT,就是通过Web或远程工具连接云平台提供的客户机(VM),在客户机上配置和运行SAT。OpenStack云平台具有按需提供计算服务的特点:当测试任务的并发请求量较大时,云平台可以根据用户需求来增加计算资源供SAT使用。这一功能是通过将客户机在两个物理节点之间进行迁移实现的。客户机在迁移过程中会重启,但软件配置不会发生改变,因而无需用户重新配置测试环境,云平台就可满足用户对测试时间的要求。OpenStack云平台的原理如图2所示,它通过高速互联网络将大量分布式的计算、存储节点互连,组成大型虚拟资源池,并由控制节点进行管理和配置。终端用户可以通过互联网访问平台提供的虚拟资源。 OpenStack主要采用KVM(kernel-based virtual machine)虚拟化技术将处理器、内存、IO设备等硬件设施虚拟化。KVM包括内核空间的kvm模块以及用户空间的qemu-kvm程序。kvm模块负责实现处理器和内存的虚拟化,剩下的大部分IO设备的虚拟化(比如网卡、显卡、存储控制器和硬盘等)则由qemu-kvm负责。OpenStack将底层硬件设施虚拟化,组成虚拟资源池后,用户相当于在使用裸机和磁盘,可以按需使用这些虚拟资源创建客户机。 在云平台中创建客户机后,由于业务的变更或业务量的增加,需要对客户机进行扩展。目前,OpenStack中提供Resize功能实现客户机扩展。Resize是OpenStack提供的API,它通过将客户机在计算节点间迁移,来实现客户机硬盘、内存和CPU大小的调整。因此,当测试用户需要增加或减少硬件资源时,只需向平台管理员进行申请,管理员利用Resize功能就可以按需分配该测试用户所使用客户机的资源。 2 云测试平台的实现 有两种方案可以部署OpenStack云平台:一是参考OpenStack官方文档,依次手动安装Nova(计算服务)、Swift(存储服务)、Neutron(网络服务)、Glance(镜像服务)、Keystone(认证服务)以及Horizon(UI服务)组件;二是采用自动化部署工具完成上述组件的安装。由于手动搭建OpenStack需要安装的软件和修改的配置文件太多,容易出错,因此我们采用自动化部署工具来进行安装。 首先将CentOS 6.4作为平台的基础操作系统。CentOS以最小化方式安装好后,采用Packstack作为自动化部署工具。Packstack由Puppet语言编写,支持单节点all in one和多节点两种方式部署OpenStack。本文采用Packstack的双节点Gre方式来部署OpenStack的“Havana”版本,平台使用的主要开源软件见表1。另外,使用Packstack部署OpenStack要求硬件最少有2G RAM、CPU支持硬件虚拟化扩展以及至少一张网卡。 本文使用2台服务器来搭建OpenStack云平台,处理器都采用Intel Xeon E5530,分别为节点node40和node48。它们通过交换机连接,处于同一个局域网内,如图2所示。其中,node40充当了控制节点、网络节点、存储节点和计算节点的角色。其eth0绑定IP为192.168.0.40/32,连接公网;eth1的IP为10.1.1.40/32,连接内网。node48是计算节点,只提供计算服务,其eth0对应IP为192.168.0.48/32,连接公网;eth1的IP为10.1.1.48/32,连接内网。在运行Packstack时,最重要的配置文件是Packstack-answers.txt,它记录了OpenStack需要安装的组件、主机的IP地址、数据库的账户和密码,以及用户访问Dashboard的账户密码等等。本文所使用的关键配置如下。 其中,配置1-5表示将存储、网络、镜像、认证及UI服务安装到node40;配置6-7表示node40充当控制和计算节点,node48充当计算节点;配置8表示通过同步时间服务器0.uk.pool.ntp.org的时间来确保计算节点和控制节点的时间同步;配置9-11表示控制节点与公网的接口为eth0,控制、计算节点与内网的接口都为eth1;配置12-13表示客户机之间采用Gre隧道协议进行通讯,且允许同时存在1000个Gre隧道数量;配置14表示设置管理员账号登录Dashboard控制面板的密码。 OpenStack云平台搭建完成后,还需在云平台中创建客户机。在客户机上安装配置SAT,并配置客户机的网络和防火墙规则,这样才能使测试用户使用云平台提供的软件测试服务。首先,我们使用neutron相关命令为用户创建虚拟网络,使用户的客户机能够正常连接互联网,关键代码如下: neutron net-create net1 neutron subnet-create netlip-name subnet1 neutron net-create net2-provider:network-type local 其中net1是连接互联网的外网网络,ip是外网网络的网段,net2是客户机所处的内网网络,两者之间通过虚拟网关相连。为了保护客户机的安全,还需要设置客户机的防火墙规则,允许指定端口能被访问,关键代码如下: nova seegroup-add-rule security_group tcp 22 22 0.0.0.0/0 nova secgroup-add-rule security_groupicmp-1-1 0.0.0.0/0 表示该客户机开放了22端口和允许icmp协议的包进入,即允许ping。最后,使用nova相关命令创建客户机,关键代码如下: nova boot-flavor flavor_id-image image-id-security-groups sec_group instance_name 其中flavor_id,image_id,instance_name分别对应客户机所使用的云主机类型,镜像文件以及客户机名称。上述步骤完成后,用户通过Web浏览器访问http://192.168.0.40,就能连接新创建的客户机。 3 性能分析 为了评估SAT在OpenStack云平台的工作性能,本文设计了对比试验,即比较SAT在工作站和OpenStack云平台上完成相同数量测试任务所需的时间。 具体设计如下。首先在工作站1、工作站2和OpenStack云平台的客户机上都最小化安装64位的Ubuntul2.04,接着采用源码安装的方式将软件测试工具SAT部署到工作站和客户机上。为了防止其他服务对测试的影响,除了开启必要的如sshd、network等服务外,其他服务都不开启。工作站和OpenStack云平台客户机的基本初始配置对比如表2。其中,客户机和工作站的内存、硬盘大小都保持一致;客户机初始CPU内核数也和工作站1的一致。 本文选择Bubble作为待测程序,它利用冒泡排序算法对一个文件中的数字进行排序,是一个简单但有代表性的样例。Bubble中的排序算法主要消耗的是CPU资源,可以方便我们观察实验现象。我们用SAT对Bubble进行覆盖率测试。首先,SAT利用satCC去插装并编译Bubble源码;接着把需要排序的数据文件作为测试用例,运行Bubble;最后用sat去分析Bubble的静态文件和动态追踪文件,获得测试报告。SAT对Bubble的测试时间主要由satCC、Bubble和sat这三个程序运行所耗费的时间组成。为了准确测量每个程序的运行时间,我们采用Linux系统提供的time命令。该命令利用计时器来记录进程占用CPU的累计时间,可以准确统计出一个程序从开始运行到结束所耗费的时间。 当有多个程序需要并发测试时,假设需要测试的程序都为Bubble,且个数为Num,随着Num的增加,即测试任务并发请求数增加,SAT在工作站和云测试平台中分别完成Num个Bubble测试的时间如表3所示。其中,N1表示工作站CPU内核数,N2表示云平台客户机CPU内核数。 从表3可以看出,当云测试平台和工作站有相同内核数的情况下(N1=N2=2或者N1=N2=8),在处理不同规模的测试任务时,两者所用的时间相差不多。这说明,云测试平台可以实现和配置相同的物理机相似的性能。当测试任务规模很小,比如Num小于5时,传统的方法中,使用工作站1就可以满足用户对测试时间的要求;这时在云测试平台中,相应地,只需要调用两个CPU内核(N2=2)的资源。当测试任务高并发时(Num由1增加到30),为了保证测试时间要求,传统的解决方式是需要启用规模更大的工作站,即要将任务从工作站1过渡到工作站2,这意味着要更换硬件资源,配置新的测试环境(如系统重装,软件的安装、配置文件的修改等),而这些工作势必会花费一定的时间和人力物力;而使用云测试平台,利用OpenStack的Resize功能可将调用的CPU内核数直接调节为8,重启客户机后新的测试环境就能投入使用,省去了重新配置测试环境的步骤。从表中可以看出,根据测试任务规模,云测试可以按需分配,任意调用CPU内核资源(N2=2,4,6…直到所有的CPU被调用),以满足不同的任务需要,因而同传统的解决方式相比,具有明显优势,能够降低测试成本。 4 结论 本文设计了一个基于OpenStack的云测试平台。通过将软件测试工具SAT部署在OpenStack上,用户可以通过Web获得平台提供的软件代码覆盖率测试服务。所搭建的云测试平台,因为可以实现对硬件资源的按需分配,无须重新配置测试环境,因而同传统增加硬件资源的方式相比,在测试环境的部署上提高了效率,节省了测试成本。通过对比SAT在工作站和OpenStack云平台上完成相同数量测试任务所需的时间,证明云平台可以实现和配置相同的物理机类似的性能,能满足用户对测试时间的要求。 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。