最近在准备公司内部的性能测试相关的培训,然后开始整理一些相关的材料。也乘着这个机会,把手头上的一些文字整理一下,也顺便把一些想写没有写的慢慢写了,人总是有惰性的,要借着某件事的驱使才会去完成一些事情,
最近在准备公司内部的性能测试相关的培训,然后开始整理一些相关的材料。也乘着这个机会,把手头上的一些文字整理一下,也顺便把一些想写没有写的慢慢写了,人总是有惰性的,要借着某件事的驱使才会去完成一些事情,或者是要有schedule的压力,否则会一拖再拖。做重要但不紧急的事情说起来容易,但是事情一多了之后就很难。
性能测试一直是自己喜欢的一件工作,一来是因为它牵涉的东西很多,总是可以学到很多东西。而来我想还有些深层次的原因,我喜欢速度很快,或者很犀利的东西,比如F1。估计没有机会能开上,但是我还是有机会把自行车骑到了时速50km。这不是疯狂,我也不是疯狂的人,但是就是那种对这种彪悍的东西的向往,这种向往让对技术的研究充满乐趣。遇到一个新的好的工具就很激动,上次研究JMeter 2.4的时候一个人在office折腾到10点多,看到并发上了4000之后很激动,感觉就像骑在我的Trek上飞驰。
我其实是一个讨厌做重复工作的人,非常的厌倦,所以总是愿意尝试新的东西,但是做性能测试好几年了,还是觉得很有趣,可能是要学的东西太多了,新的东西太多了。也确实如此,每次做的时候或者和别人讨论,总能发现新的东西,自己不知道的东西。
PS: 刚发现图片不能打开了,因为图片放在gdocs上面,大概被reset了,哎,无语,真想一脚踢到该死的墙上,我们是生活在怎样的地方啊。还没想到很好的办法,csdn居然也不能上传图片了,有时间自己弄个站点吧。
------------------------------ 废话和正文的分界线 ----------------------------------------
在了解了性能测试的基本方法后,落实到实践的时候我们需要依靠相应的测试工具。简单的掌握工具的基本使用并不困难,但是这还不够,只有对测试工具,特别是后面隐含的测试技术和方法有更深入的了解后,我们才能让测试工具更好的服务于我们的性能测试。下面我们将介绍一些业界比较常用的测试工具以及背后的测试技术,限于篇幅,我们不可能介绍很多的工具,但是很多测试工具的基本组成都是类似的,有了这些基础之后是很容易触类旁通的。
性能测试工具的分类
如果你在网上搜索性能测试工具的话,你会发现有非常多的选择,各种不同的来源,针对不同的应用。性能测试工具非常的庞杂,也有很多的分类方法,例如根据使用的范围。这里为了便于分析特点,我们通过来源,大致将它们分为三类,商业工具,开源或者免费的工具,以及内部开发的工具。
接下来我们分别介绍这三类工具,对于前两类我们会拿出一些比较知名的工具来介绍和分析,对于内部开发的工具我们会探讨一下自己开发工具中要注意的一些问题。
1 商业测试工具
商业测试工具是指那些以测试工具的名义作为商品来销售的软件或者硬件设备,当然,这里我们只讨论性能测试的工具,针对应用程序的性能测试,而不是交换机路由器等网络设备的性能测试。在性能测试领域,有很多历史比较悠久的商业测试工具。其中的一个原因是性能测试一直为人们所重视,所以很多企业或者单位愿意花钱去购买这样的测试工具,尽管通常这样的测试工具都价格不菲。如果从载体来分的话,又可以把这些商业的测试工具分为两类,一类是纯软件的测试工具,另一位是硬件测试设备。这两类测试工具除了载体不同之外,功能或者特点都有很大的区别,所以在下面首先会分开来讨论各自的代表产品,以及一些特点,稍后会对两种类型的工具做对比来分析。
1.1 纯软件测试工具
纯软件的测试工具是性能测试工具比较常见的一个方式。比较知名或者常见的是下面几种:
Mercury LoadRunner, 已被惠普(HP)收购。
Segue SilkPerformer, 已被Borland收购。
Compuware QALoad
Empirix eTest Suite, 产品线被Oracle收购。
Rational Performance Tester,已被IBM收购。
上面这些产品都是以软件包的形式发布,就像我们一般使用的Windows下面的应用程序,用户将其安装在操作系统上,目前主要支持的是Windows操作系统,也有些支持把产生压力的组件跑在Linux上面,比如LoadRunner。在使用的时候,用户通过产品提供的UI来配置和运行测试。前面三个是Native的Windows应用程序,eTest Suite的控制台是基于Web的,Performance Tester是采用类似于Eclipse的Java UI。在运行测试的时候,这些工具会将他们所运行其上的PC机作为测试流量产生的硬件平台来向被测的系统发起测试。当然,有些产品也支持将压力产生的组件分布在不同的机器上,这个后面在相应的章节会专门提到。
上面提到的几种工具在其官方网站上大多都提供使用时间受限的试用版,有兴趣的读者可以去下载并安装来直观的感受一下。通常来说,有经验的测试人员借助其提供的文档应该可以很快的建立并运行最基本的性能测试。
1.2 硬件测试设备
除了上面提到的纯软件的测试工具,还有一类测试工具是以硬件设备的形式提供的,我们称之为硬件测试设备,也有将其称为测试仪器或者测试仪表的。顾名思义,这类工具在卖给用户的时候是以硬件的形式销售的。这个硬件可能是一台基于普通PC机改造的硬件,比如在一般PC机的基础上加入更多的网络接口和光口,预先装入专门的用于测试的操作系统及测试软件,然后定制外壳。也可能是一个专门设计的硬件平台,比如在主板上加入了FPGA,网络处理器等等,甚至还有些是自己设计的机框和板卡。不过无论哪一种方式,对用户来说这个硬件平台其实都是特有的,因为用户不可以自己去买台PC,然后把一个系统装上去就实现之前买的测试设备的功能,而必须从测试工具厂商那里去购买相应的设备。
考虑到大部分人之前接触更多的是纯软件的测试工具,所以这里我们会花更多一点的篇幅来介绍硬件测试设备。目前在国内的很多评测机构、软件开发商或者系统运营商的实验室里面,以上的一些测试设备都有一定的应用。
就目前商业性能测试工具的市场来看,硬件测试设备的种类也不少,下面列出了比较常见的几种:
Spirent(思博伦)Avalanche
IXIA 400T/1600T + CPM1000T8,XM2等
Agilent(安捷伦)Network Tester
BreakingPoint的BPS系列
相对而言,前面三家进入性能测试设备领域的时间比较长,其产品也广为人知。后面则是最近几年才开始创业或者涉足这个领域,不过都开始有代表性的产品。这几家的产品都是硬件形式提供的测试工具,但是细看下来,各家的方案还是有很大的不同。
首先从产品支持的网络协议的层次来看,各家有所不同,典型的做法有三种。
1. Avalanche只支持从TCP往上的4-7层的测试。就是说你可以拿它来测试一个web或者邮件服务器的性能,但是不适合单纯的来测试交换机或者路由器这种2-3层的网络设备。对于2-3层的测试,Spirent通过它的另一个著名产品SmartBits来提供,在通信设备制造商中应用比较广泛。
2. BreakingPoint的测试设备在一个设备中支持2-7的协议,就是说在使用的时候,用户可以选择将比较底层的和应用层的流量混合在一起来做。
3. IXIA的做法和上面都不太一样,因为它的硬件架构不同。它采取的是机框加板卡的方式,不同的板卡配合相应的应用程序来完成不同类型的测试。比如有的板卡主要用来做2-3层的测试,有的专门用来做内容相关的应用层的测试。针对硬件架构的差异,后面还会有详细的分析。
很难讲哪家的做法是最好,因为这个要结合测试的需求。比如对用户来说,如果只有应用层测试的需求,那么2-3层的测试功能可能就意义不大。但是如果在有些需要将不同层次的流量混合在一起的场合,可能会有不同的选择。
关于对测试协议的支持这一块,现在在测试领域还有一个比较热门的概念是“Triple play”,直译过来就是“三重播放”,“三重业务”,就是说在同一个IP网络上提供语音、视频和数据业务。那么对于测试而言,要求工具能模拟出三种不同的流量。关于这种测试类型,在选择和评估测试工具的时候要仔细的考虑,请读者查阅相关的资料,限于篇幅我们在这里不做深入的探讨。
硬件架构
既然是硬件测试工具,那么我们接下来就来分析一下他们的硬件架构的特点。
1. 类似PC的架构
Avalanche的硬件比较接近普通的PC,目前最新的型号是2900,见下图,它采用了两颗Intel的四核处理器和16GB的内存,支持8个独立的Gbps测试端口,也可以选配光口。相比之前的2500和2700型号,新版把之前分别称为Avalanche和Reflector的两个独立的2U的设备集成到了一个3U的设备上。在2500和2700中Avalanche只能用来模拟客户端,Reflector只能用来模拟服务器,而且受硬件设计的限制每次只能跑一个独立的测试,无法被多个不同的测试共享。在新的2900版本中,这个问题得到了比较好的解决。关于这一部分,后面会作更详细的讨论。
图2-1 Avalanche 2900
注:以上图片来自Avalanche 2900 datasheet
2900是一个独立的3U的机器,其上运行的其实是一个Linux操作系统,也可以通过telnet连接上去,左边的两个网络接口是管理口,运行在PC上的控制软件通过这个接口来管理测试设备。右边的口是测试端口,图上显示的8个均为千兆的普通以太网接口,俗称的电口。
2. PC + 定制的架构
BreakingPoint的BPS测试设备可以算是PC+定制的一个代表。以BPS-1000为例,它有4个1 G的电口和4个1G的光口,3个FPGA,16个处理器,外加4个定制的安全模块。其中三个FPGA用来实现高性能的不基于状态的L2-3层流,16个可编程网络处理器(NP)实现基于状态的L4-7层业务流,PowerPC处理器用来实现恶意攻击流。
3. 机框 + 板卡的架构
IXIA的硬件实现方式和上面的两家都不一样。它采用的是机框加板卡的方式。测试仪器用来测2-3层的设备还是4-7的设备是由所插入的卡来决定的。机框为运行其上的板卡提供一个基本的环境,包括电力的供应,一些控制功能。这种方式有点类似于工业控制和通信设备中使用的单板机。
为了便于说明和理解,下面给出IXIA 400T的图片。
图2-2 IXIA 400T机框
还有一个机框的型号为1600T,体积要大很多,可以同时支持16块板卡。
上图中的IXIA 400T(不包括其中已插入的4块板卡)是一个能支持4块板卡的机框。机框本身带有一个PC机,和我们使用的普通PC一样,装的是Windows系统,用户可以远程连接上去。在实际使用过程中,用户可以根据需要选配相应的板卡,机框可以看做是一个通用的平台。比如如果想测试4-7层的应用,我们可以选择一块型号为CPM 1000T8(可能还会有其它的型号,这里以这个为例)的板卡,插入到400T中,然后这就成为了一个应用性能测试的硬件平台,配合IXIA的性能测试的配置和管理软件IxLoad就可以开始性能测试了。下图所示的就是IXIA CPM1000T8,它有8个1 G的测试端口,每一个端口都可以独立的被用于某个测试。
图2-3 IXIA CPM1000T8 板卡
注:以上IXIA相关设备的图片均来自IXIA官方网站。
为了便于理解,下面给出了一个关于IXIA 400T + CPM 1000T8的示意图。分别装在测试PC和400T机框上的IxOS可以看成是一个比较底层的平台,它运行在Windows上面,同时为上层的测试应用提供接口。IxLoad则是测试人员直接打交道的应用软件。
图2-4 IXIA测试系统示意图
上面提到的1600T/400T以及CPM 1000T8都是IXIA稍早一些的型号,后续推出的有Optixia XM12和XM2两种机框,分别可以支持12块和两块新型的卡。新卡的体积更大,端口密度也可以做得更高。
上面介绍了三种不同的硬件架构,接下来我们比较一下以上的三种架构。第一种和第二种的差别其实并不大,只是针对测试的范围加入了相应的硬件,和第三种相比差别就比较大了。相比而言,第三种的扩展性是最好的,以CPM 1000T8为例,每块卡就有8个独立的测试端口,一个400T的机框就可以支持4块这样的卡。所以对于大规模的测试,可能这种方式会更高效。但是如果一般不需要那么高的并发,也不需要很多不同测试项目并行的话,前面的也能满足要求。需要注意的一个问题是,如果实际测试中需要并行采集的数据很多,而且频率很高,那么背板的速度和带宽可能会成为瓶颈。因为在这种架构中,每张卡的每个端口运行的程序是在测试运行的时候,由机框上的程序装载到卡上的,然后机框采集每个端口的实时测试数据,传回给PC端的控制软件。对于这种架构,大家可以看出,核心的功能是在板卡上,所以通常板卡的价格要高于机框的价格。
to be continued...