在软件上线前,性能测试是保证系统能够承受预期用户负载、避免崩溃的步骤。而选择一款合适的性能测试工具,往往能让测试工作事半功倍。目前市面上主流的性能测试工具中,LoadRunner、Apache JMeter 和 nGrinder 最具代表性。分别代表了商业和企业级、开源和生态化、以及平台化和协作化的不同方向。
从定位上看,这三款工具瞄准了截然不同的市场需求。LoadRunner 是典型的企业级商业性能测试工具,数十年来一直是大型组织进行任务系统压测的第一选择。Apache JMeter 则是开源世界中最流行的性能测试工具,因其轻量级、高灵活性和庞大的插件生态,已成为接口测试和性能测试领域的事实标准。而 nGrinder 作为后起之秀,定位为开源的企业级Web性能测试平台,它天生有的B/S架构和团队协作特性,很好地解决了传统工具在多人协同工作方面的痛点。
在使用方式和架构方面,三者存在根本性的差别。LoadRunner 采用传统的C/S架构,使用时需要在测试工程师的机器上安装复杂的客户端套件,包括用于录制脚本的Virtual User Generator(VuGen)、用于设计情形和施压的Controller以及用于分析的Analysis工具,整个环境搭建和配置过程较为繁琐,对测试人员的专业技能要求较高。JMeter 则相对轻便许多,原生提供图形用户界面(GUI),解压即可运行,操作直观,录制和调试脚本都比较方便,同时也支持命令行方式运行,便于集成到自动化创建流程中。而 nGrinder 的架构设计最为前卫,采用纯粹的B/S架构,只需在服务器上部署一次,整个测试团队就可以通过浏览器访问和使用,所有用户的脚本和测试历史都集中存储在平台上,真正实现了测试资源的共享和协作。
在脚本语言和协议支持方面,三款工具各有千秋。LoadRunner 凭借其商业软件的深厚积累,支持超过50种通信协议,包括SAP、Oracle Forms、Citrix、终端仿真器等复杂的传统企业级应用协议,这是另外两款开源工具难以比拟的。其VuGen组件支持使用C语言、Java、VB、.NET等多种语言编写脚本,能够应对各种复杂的业务情形。JMeter 作为Java编写的开源工具,对常见的协议如HTTP、HTTPS、FTP、JDBC(数据库)、SOAP、JMS等支持得非常成熟,虽然原生协议支持数量不及LoadRunner,但通过丰富的第三方插件可以扩展几乎所有需要的功能。脚本主要通过GUI配置生成,但也支持使用Groovy、Beanshell等语言进行增强和定制。nGrinder 则不同于HTTP协议测试,对Groovy和Python(Jython)脚本的编写能力要求较高,许多测试思路需要通过编码来实现,因此更适合有一定编程基础的测试开发人员。
在并发能力和资源效率上,不同工具的引擎设计决定了它们的施压上限。LoadRunner 的企业级引擎非常高效,能够用较少的硬件资源模拟出巨大的并发用户量,这使得它在大规模并发测试情形下依然能保持稳定的表现。JMeter 根据Java线程模型,单台施压机支持的并发用户数相对有限(一般在1000左右),随着并发数增加,自身的CPU和内存消耗会急剧上升,不过可以通过分布式方式(多台施压机同时运行)来扩展并发能力。nGrinder 的引擎根据The Grinder,采用进程和线程相结合的设计,单台Agent就能够支撑3000到6000的并发用户,超过JMeter的单节点能力,而且它天生支持分布式部署和集中管理,非常适合进行大规模压力测试。
在平台化能力和团队协作方面,nGrinder 展现出了独特的优势,内置了脚本仓库(根据SVN版本控制),所有团队成员编写的脚本都可以统一管理和追踪版本变更,支持多人同时在线开发和维护脚本,这对于规模化的测试团队来说作用巨大。同时还内置了测试历史记录和趋势分析功能,能够自动生成可供对比的性能报告。JMeter 本身是一个单机工具,缺乏原生的平台化支持,虽然可以借助Jenkins等不断集成工具以及BlazeMeter等云服务来实现部分平台化能力,但一般需要一定的二次开发投入。LoadRunner 同样缺乏原生的团队协作平台,企业级解决方案一般需要借助Micro Focus的ALM(应用生命周期管理)套件或其他第三方工具来实现。