热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

性能测试(1):测试工具1

最近在准备公司内部的性能测试相关的培训,然后开始整理一些相关的材料。也乘着这个机会,把手头上的一些文字整理一下,也顺便把一些想写没有写的慢慢写了,人总是有惰性的,要借着某件事的驱使才会去完成一些事情,

最近在准备公司内部的性能测试相关的培训,然后开始整理一些相关的材料。也乘着这个机会,把手头上的一些文字整理一下,也顺便把一些想写没有写的慢慢写了,人总是有惰性的,要借着某件事的驱使才会去完成一些事情,或者是要有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来配置和运行测试。前面三个是NativeWindows应用程序,eTest Suite的控制台是基于Web的,Performance Tester是采用类似于EclipseJava UI。在运行测试的时候,这些工具会将他们所运行其上的PC机作为测试流量产生的硬件平台来向被测的系统发起测试。当然,有些产品也支持将压力产生的组件分布在不同的机器上,这个后面在相应的章节会专门提到。

上面提到的几种工具在其官方网站上大多都提供使用时间受限的试用版,有兴趣的读者可以去下载并安装来直观的感受一下。通常来说,有经验的测试人员借助其提供的文档应该可以很快的建立并运行最基本的性能测试。


1.2 硬件测试设备

除了上面提到的纯软件的测试工具,还有一类测试工具是以硬件设备的形式提供的,我们称之为硬件测试设备,也有将其称为测试仪器或者测试仪表的。顾名思义,这类工具在卖给用户的时候是以硬件的形式销售的。这个硬件可能是一台基于普通PC机改造的硬件,比如在一般PC机的基础上加入更多的网络接口和光口,预先装入专门的用于测试的操作系统及测试软件,然后定制外壳。也可能是一个专门设计的硬件平台,比如在主板上加入了FPGA,网络处理器等等,甚至还有些是自己设计的机框和板卡。不过无论哪一种方式,对用户来说这个硬件平台其实都是特有的,因为用户不可以自己去买台PC,然后把一个系统装上去就实现之前买的测试设备的功能,而必须从测试工具厂商那里去购买相应的设备。

考虑到大部分人之前接触更多的是纯软件的测试工具,所以这里我们会花更多一点的篇幅来介绍硬件测试设备。目前在国内的很多评测机构、软件开发商或者系统运营商的实验室里面,以上的一些测试设备都有一定的应用。

就目前商业性能测试工具的市场来看,硬件测试设备的种类也不少,下面列出了比较常见的几种:

Spirent(思博伦)Avalanche

IXIA 400T/1600T + CPM1000T8XM2

Agilent(安捷伦)Network Tester

BreakingPointBPS系列


相对而言,前面三家进入性能测试设备领域的时间比较长,其产品也广为人知。后面则是最近几年才开始创业或者涉足这个领域,不过都开始有代表性的产品。这几家的产品都是硬件形式提供的测试工具,但是细看下来,各家的方案还是有很大的不同。


首先从产品支持的网络协议的层次来看,各家有所不同,典型的做法有三种。

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测试端口,也可以选配光口。相比之前的25002700型号,新版把之前分别称为AvalancheReflector的两个独立的2U的设备集成到了一个3U的设备上。在25002700Avalanche只能用来模拟客户端,Reflector只能用来模拟服务器,而且受硬件设计的限制每次只能跑一个独立的测试,无法被多个不同的测试共享。在新的2900版本中,这个问题得到了比较好的解决。关于这一部分,后面会作更详细的讨论。


2-1   Avalanche 2900

注:以上图片来自Avalanche 2900 datasheet


2900是一个独立的3U的机器,其上运行的其实是一个Linux操作系统,也可以通过telnet连接上去,左边的两个网络接口是管理口,运行在PC上的控制软件通过这个接口来管理测试设备。右边的口是测试端口,图上显示的8个均为千兆的普通以太网接口,俗称的电口。


2.      PC + 定制的架构

BreakingPointBPS测试设备可以算是PC+定制的一个代表。以BPS-1000为例,它有41 G的电口和41G的光口,3FPGA16个处理器,外加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,它有81 G的测试端口,每一个端口都可以独立的被用于某个测试。



2-3   IXIA CPM1000T8 板卡

注:以上IXIA相关设备的图片均来自IXIA官方网站。


为了便于理解,下面给出了一个关于IXIA 400T + CPM 1000T8的示意图。分别装在测试PC400T机框上的IxOS可以看成是一个比较底层的平台,它运行在Windows上面,同时为上层的测试应用提供接口。IxLoad则是测试人员直接打交道的应用软件。


2-4   IXIA测试系统示意图

上面提到的1600T/400T以及CPM 1000T8都是IXIA稍早一些的型号,后续推出的有Optixia XM12XM2两种机框,分别可以支持12块和两块新型的卡。新卡的体积更大,端口密度也可以做得更高。


上面介绍了三种不同的硬件架构,接下来我们比较一下以上的三种架构。第一种和第二种的差别其实并不大,只是针对测试的范围加入了相应的硬件,和第三种相比差别就比较大了。相比而言,第三种的扩展性是最好的,以CPM 1000T8为例,每块卡就有8个独立的测试端口,一个400T的机框就可以支持4块这样的卡。所以对于大规模的测试,可能这种方式会更高效。但是如果一般不需要那么高的并发,也不需要很多不同测试项目并行的话,前面的也能满足要求。需要注意的一个问题是,如果实际测试中需要并行采集的数据很多,而且频率很高,那么背板的速度和带宽可能会成为瓶颈。因为在这种架构中,每张卡的每个端口运行的程序是在测试运行的时候,由机框上的程序装载到卡上的,然后机框采集每个端口的实时测试数据,传回给PC端的控制软件。对于这种架构,大家可以看出,核心的功能是在板卡上,所以通常板卡的价格要高于机框的价格。


to be continued...




推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 【MEGA DEAL】Ruby on Rails编码训练营(97%折扣)限时特惠!
    本文介绍了JCG Deals商店提供的Ruby on Rails编码训练营的超值优惠活动,现在只需29美元即可获得,原价为$1,296。Ruby on Rails是一种用于Web开发的编程语言,即使没有编程或网页设计经验,也能在几分钟内构建专业的网站。该训练营共有6门课程,包括使用Ruby on Rails进行BDD的课程,使用RSpec 3和Capybara等。限时特惠,机会难得,赶快行动吧! ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Mono为何能跨平台
    概念JIT编译(JITcompilation),运行时需要代码时,将Microsoft中间语言(MSIL)转换为机器码的编译。CLR(CommonLa ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
author-avatar
网络小爬虫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有