华山论剑,Web性能测试工具谁与争锋最后尽是杨过—JMeter赢了...
Posted 程序员小濠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华山论剑,Web性能测试工具谁与争锋最后尽是杨过—JMeter赢了...相关的知识,希望对你有一定的参考价值。
摘要:互联网访问存在黄金3秒原则(3秒网页没打开57%的网友就会走),所以性能决定了网站的生死。如何进行Web性能测试,客观的评价网站的性能,并进行有效的优化具有决定性的意义。在众多Web性能测试工具中,LoadRunner和JMeter是众人皆知的优良框架。事实上,还有很多优秀的工具在各个角度进行着Web性能测试的支持。这些软件或开源免费,扩展性强;或商业全面,提供强大的生态圈。有的用户界面功能强大,美观大方;有的短小精悍,上手迅速。
本文主要介绍12款Web性能测试的软件,最后也给出更多的,在有限篇幅无法覆盖的工具列表,为大家进行Web性能测试的学习、研究和项目实战提供参考。
1、前言
本文以金庸武侠小说的重大事件“华山论剑”,作为性能测试工具的出场介绍,对主要介绍的工具都赋予了一个小说中的人物或设定。排序并不是以武功高低进行,对工具的人物或设定对应,主要是某一方面的特征进行,也许并不完全准确。
实际上性能测试的工具非常多,单纯的Web性能测试工具也不胜枚举。本文限定在Web性能测试领域,重点介绍了12个工具,最后列出了目前作者能够看到的所有Web性能测试工具。
2、王重阳—LoadRunner
在Web性能测试领域,LoadRunner永远是开山鼻祖式的存在。其他的性能测试工具、框架或多或少都与LoadRunner有相似之处。究竟是谁抄袭谁,没有必要深究,但从知名度、市场占有量来说,LoadRunner都是Number One。是性能测试领域的王重阳,毕竟是第一次华山论剑的冠军。
LoadRunner最初是Mercury公司的产品,后被HP收购。完整的解决方案,易用的IDE,丰富的报告。脚本编写提供多种捕捉模式, 支持高级的文本浏览和低级的HTTP浏览,并且支持图形化的树形结构和脚本浏览方式。支持HTTP、RTSP、SIP、Socket、JAVA自定义、媒体质量分析等。
使用基本上采取录制、修改(Virtual User Generator)、场景设计(Controller)、运行(Load Generator)、分析(Analysis),这样的流程。
LoadRunner的劣势主要是商业收费软件,而且非常昂贵(社区版提供的并发量有限)。并且由于是传统的桌面软件,安装部署非常麻烦,安装包大概有3-4G,网友反馈都有安装失败的情况。LoadRunner是传统的一箩筐式软件,软件将能想到的都包括,没想到的我们想扩展也比较难。脚本语言是C语言,提供了丰富的库函数使用。
LoadRunner还有问题就是持续集成比较麻烦,需要付出非常大的努力。
性能测试中非常关心并发的性能,LoadRunner资源的限制主要是线程数量及内存大小。在Windows上每个虚拟用户会占到1 Mb内存。所以可以根据机器配置计算出单个测试机的并发上限。当然,LoadRunner支持分布式加压。
总体来说,LoadRunner是Web性能测试的开山鼻祖,其性能测试的协议模拟理念,脚本编写、场景设计、运行和分析的整体流程,也成为业界性能测试的标杆。建议花时间进行研究。
LoadRunner目前最新版本是12.60,可以下载试用版进行学习:https://www.microfocus.com/en-us/products/loadrunner-load-testing/download。
3、杨过—JMeter
说JMeter是性能测试界的杨过,并不是说杨过武功最好,而是他的主角光环。正如JMeter目前在Web性能测试领域的受人瞩目一样。
JMeter基本属于目前Web性能测试领域的事实标准,普及范围非常广。可以说,进行Web性能测试的,没有不知道JMeter的,而且由于其开源免费,扩展性好,用的也非常多。作者所在的项目就是试用过LoadRunner和JMeter之后,选择了JMeter。即便是没有使用JMeter的公司,也都经历过JMeter和其他框架比较的过程。
JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。JMeter支持的协议非常多,Web - HTTP, HTTPS ,SOAP / REST,FTP,Database via JDBC,LDAP,Message-oriented middleware (MOM) via JMS,Mail - SMTP(S), POP3(S) and IMAP(S),Native commands or shell scripts,TCP等等。并且不支持的协议也可以通过开源插件扩展,甚至可以自己编写插件(JMeter提供了开发框架,只要实现特定接口即可)。
JMeter的最大优势是开源免费,扩展能力强,安装简便,基本上是解压即可使用。JMeter的扩展能力包括可以修改源码(使用很少),使用已有的开源插件(用的最多,而且能满足90%的需求),还可以自己在JMeter框架下自行开发插件(某些特殊需求会用到),还有就是支持BeanShell、JSR223脚本。丰富的IDE功能,基本需求可以界面点击、填写就可以完成脚本编写。
简单的安装、丰富的功能、强大的扩展能力,让每一个接触过JMeter的使用者无法拒绝。
JMeter自身的性能是硬伤,基于JVM的Threads,采用了一个用户使用一个线程的方式,并发线程越多,越占用内存和CPU。一旦并发线程过多,性能就急剧下降(可以通过分布式解决)。同时,JMeter的脚本使用XML,即使是BeanShell等脚本语言,也是嵌在XML文件里面的,不易维护和管理,协同工作有障碍。
总体来说,JMeter是目前Web性能测试的事实标准,JMter群众基础广泛,开源的生命力强大,持续集成容易。是值得一试的性能测试软件,强烈推荐。
JMeter目前最新版本是Apache JMeter 5.1.1,下载地址:http://jmeter.apache.org。
4、段智兴—RPT
南帝段智兴,出家后法号一灯法师,是老段家有名的段誉的爷爷。RPT正如段皇爷一样,是名门出品。RPT的全称是IBM Rational Performance Tester,是IBM基于Eclipse平台及开源的测试及监控框架Hyades,开发出来的性能测试解决方案。RPT 是一个为测试 Web 应用程序设计的软件,它的功能是在部署之前捕获并更正性能问题。
RPT通过模拟并发用户的数量,产生一系列报告,这些报告被清晰的标志出来显示 Web 页面的性能、URL 和事务等信息,来帮助您在部署之前查明系统的瓶颈。高级的特性包括在每一个用户组的行为和使用方式层面的详细测试调度安排。RPT 同时还提供了一种自动化的"数据池"特性,它可以改变每一个模拟用户使用的测试数据设置。使用一个集成了测试编辑器的浏览器窗口,您可以回顾在测试记录期间访问过的 Web 页面。除此之外,高级测试人员可以选择将自定义的 Java 代码插入到性能测试中,用来执行类似于高级数据分析和请求解析的操作。
熟悉自动化测试的人员应该听过另一款IBM出品的软件RFT,是IBM对功能自动化测试提供的解决方案。事实上,IBM对此给出非常丰富的软件套件,包括质量管理系统RQM。这些软件的优势在于出于名门。IBM出品,品质有保证。事实也是如此,RPT支持HTTP ,HTTPs, Citrix SAP SDK等多种协议,支持脚本录制,IDE界面完善、美观功能强大,同时类Eclipse的界面,让Java程序员有强烈的归属感。脚本语言使用Java编写,有非常大的发挥空间。支持分布式加压,先天支持与IBM其他系统集成的能力。
RPT由于是传统的桌面软件,并且保罗万象,安装部署较为繁琐,同时并发性能较LoadRunner并无明显优势,并且持续集成需要付出很大的努力。商业软件,价格不菲。
总体来说,RPT是名门IBM出品,质量、稳定性都有所保证。然而除非被绑架在其他IBM系统中,用的人还是少了些。没有JMeter的免费优势,又有LoadRunner的强烈挤占,是比较尴尬的存在。建议了解一下即可。
RPT目前最新版本是8.1,可以在官网上下载试用版:https://www.ibm.com/developerworks/cn/downloads/r/rpt/。
5、黄药师—Locust
将Locust比作黄药师,主要是因为二者都是剑走偏锋的形象。黄药师,也称黄老邪,武功高强,但性格怪异。Locust也是一样的,Locust的原意是蝗虫,原作者之所以选择这个名字,估计也是听过这么一句俗语,“蝗虫过境,寸草不生”。光看这个名字,就明白Locust的初衷是多么的邪性。
Locust工具生成的并发请求就跟一大群蝗虫一般,对我们的被测系统发起攻击,以此检测系统在高并发压力下是否能正常运转。在Locust测试框架中,测试场景是采用纯Python脚本进行描述的。对于最常见的HTTP(S)协议的系统,Locust采用Python的requests库作为客户端,使得脚本编写大大简化,富有表现力的同时且极具美感。而对于其它协议类型的系统,Locust也提供了接口,只要我们能采用Python编写对应的请求客户端,就能方便地采用Locust实现压力测试。从这个角度来说,Locust可以用于压测任意类型的系统。
在模拟有效并发方面,Locust的优势在于其摒弃了进程和线程,完全基于事件驱动,使用gevent提供的非阻塞IO和coroutine来实现网络层的并发请求,因此即使是单台压力机也能产生数千并发请求数;再加上对分布式运行的支持,理论上来说,Locust能在使用较少压力机的前提下支持极高并发数的测试。
Locust的最大优势也在于并发量。通过协程并发,编写简单易读的代码完成测试脚本,基于事件,同样配置下,单台负载机可模拟的负载数远超JMeter和LoadRunner。开源免费软件,基于Python扩展,扩展能力强。默认只支持HTTP和HTTPS,其他协议预留了接口,需要自己实现。Locust 的使用很简单也很方便,它提供了一个 Python LIB、一个命令行工具和一个 Web UI,用户通过自己写 code 来定义测试用例,通过运行 Locust CLI 来执行测试,通过 Web 界面查看测试结果。对于程序员(特别是 Python 程序员)来讲,Locust另外一个优势就是,你不用去学不同工具为了定义测试用例而设计的不同的 DSL,直接写 code,通俗易懂。同时基于PIP安装,非常方便。
Locust的缺点是默认的报告比较简单,只提供实时测试数据,错误统计,QPS、评价响应时间等几个简单实用的图表。不过在扩展性面前,这些都不是问题。
总体来说,Locust是剑走偏锋的典范,是Python程序员的福音。支持并发加压,支持持续集成。建议进行性能测试时可以作为备选方案,特别是对并发性能有要求的,强烈推荐。
Locust目前最新版本是0.11.0(从版本号也可以看出其未来非常可期),可以在官网上下载使用(直接PIP):https://www.locust.io/。
6、周伯通—Gatling
周伯通也称老顽童,认为世间最重要的事情就是玩,就像小孩子一样。正如Gatling一样,非常好玩。玩Gatling的最大感觉就是简单,非常容易就可以安装和使用,让人一下就喜欢上这个简单的框架,正如喜欢老顽童的人非常多一样。
Gatling是一款基于Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。目前仅支持HTTP协议(其他需要自己扩展),可以用来测试Web应用程序和RESTful服务。优良的性能,DSL模式的脚本,轻量友好的报表系统,伴随大数据崛起的Scala(Scala支持JVM和Net),活跃的社区支持,开源化,这些都让前景充满希望。
Gatling的并发性能非常可观,使用了Akka Actors和Async IO,并发性更强。基于JVM的Actors模型,用更少的内存和CPU。开源免费的特性也让Gatling拥有大批拥趸。Gatling扩展能力强,基于一套开源的Gatling DSL API,所以它的功能很容易扩展。同时脚本语言Scala也是基于Java,可以任意调用Java的API。70M的大小,方便下载,容易安装,绝对的轻量化。持续集成非常容易,Jenkins自带Gatling,直接查看测试结果。
Gatling的缺点是熟悉Scala的人相对较少。没有什么IDE,脚本中的逻辑控制、参数化、检查点等都依赖于编程。脚本编写就是Scala编程,使用文本编辑器进行。报告也是提供一套轻量并且十分友好的html报表系统,但种类不够丰富。还有一个致命伤就是不支持分布式。这点看来,Gatling是在桃花岛监禁之前的周伯通,还没有练成双手互搏。
总体来说,Gatling崇尚的就是简单,什么IDE,什么多协议,只要能扩展都不是事,关键是让你的测试快速运转起来。事实上,这是一个大的趋势,不会编程的用不好JMeter,会编程的更喜欢编写单纯的代码,而所谓的界面生成代码,往往是程序员嗤之以鼻的对象。建议作为了解的软件范围,等分布式完善了再进行深入研究,一般推荐。
走在最后
平时我们侃侃而谈的性能优化点往往也是我们最容易忽略的点.性能优化也绝非一蹴而就,需要我们在日常开发中不断去发现和优化.路漫漫其修远兮...
想进阶学习的朋友的可以加群:175317069 群里有免费的公开课,主要内容是讲解自动化测试、功能测试还有不定期发放的软件测试资
以上是关于华山论剑,Web性能测试工具谁与争锋最后尽是杨过—JMeter赢了...的主要内容,如果未能解决你的问题,请参考以下文章