您的应用程序,服务器是否提供了适当的需求速度?你怎么知道?您百分之百地确定您的最新功能未触发性能下降或内存泄漏吗?请通过服务器压力测试来定期检查应用程序的性能。
但是你应该使用哪种工具呢?在这篇博文中,我们将盘点用于负载和性能测试的几个开源工具。
虽然市面上有很多的服务器压力测试工具,但这些工具并不一定适合我们的需要。有些仅限于HTTP协议,有些好多年没有更新,有些则不够灵活,无法提供参数化,关联,断言和分布式测试功能。
为了方便使用,我将把这一点简化为5个开源的服务器压力测试工具,我们将在本文中对其进行审查,我们将介绍每个工具的主要功能,显示简单的负载测试场景,并显示示例报告。
测试场景和基础设施
为了进行比较,我们将使用来自20个具有100,000次迭代的线程的简单HTTP GET请求,每个工具都会尽快发送请求。
服务器端(被测试的应用程序):
CPU:4x Xeon L5520 @ 2.27 GHz
内存:8GB
操作系统:Microsoft Windows Server 2008 R2 x64
应用程序服务器:IIS 7.5.7600.16385
客户端(负载生成器):
CPU:4x Xeon L5520 @ 2.27 GHz
内存:4GB
操作系统:64位Ubuntu Server 12.04
加载测试工具:
The Grinder 3.11
Gatling 2.3.0
Tsung 1.7.0
JMeter 3.3
Locust 0.8
1.The Grinder
Grinder是一个基于Java的免费负载测试框架,可在BSD风格的开源许可下使用。它由Paco Gomez开发,由Philip Aston维护。多年来,社区还贡献了许多改进,修复和翻译。Grinder包括:
Grinder控制台:此GUI应用程序控制各种Grinder代理并实时监控结果,控制台可用作编辑或开发测试套件的基本交互式开发环境(IDE)。
Grinder代理:每个都是无头负载生成器,可以有多个工人来创建负载
Grinder的主要特点:
TCP代理将网络活动记录到Grinder测试脚本中。
随着代理程序实例数量的增加而扩展的分布式测试。
Python或Closure的强大功能,与任何Java API相结合,用于创建或修改测试脚本。
灵活的参数化,包括动态创建测试数据以及使用外部数据源(如文件和数据库)的能力。
后处理和断言,可完全访问测试结果以进行关联和内容验证。
支持多种协议。
开源服务器压力测试工具有哪些?小编来告诉你
2.Gatling
Gatling是一个免费的开源性能测试工具,主要由Stephane Landelle开发和维护。Gatling有一个基本的GUI,仅限于测试记录器。但是,可以使用易于读/写的特定于域的语言(DSL)开发测试。
Gatling的主要特点:
HTTP记录器。
用于测试开发的富有表现力的自解释DSL。
基于斯卡拉。
使用异步非阻塞方法生成更高负载。
完全支持HTTP(S)协议,也可用于JDBC和JMS负载测试。
用于数据驱动测试的多个输入源。
强大而灵活的验证和断言系统。
全面的信息负载报告。
开源服务器压力测试工具有哪些?小编来告诉你
3.TSUNG
Tsung(以前称为IDX-Tsunami)是本次评测中唯一一款非基于Java的开源性能测试工具。Tsung依赖于Erlang,所以你需要安装它,Tsung于2001年由Nicolas Niclausse发起,他最初实现了分布式负载 – Jabber(XMPP)的测试解决方案。几个月后,增加了对更多协议的支持,并且在2003年,Tsung能够执行HTTP协议负载测试。今天,它是一个功能齐全的性能测试解决方案,支持现代协议,如websockets,身份验证系统和数据库。
Tsung的主要特点:
固有的分布式设计。
基于多线程的底层Erlang架构模拟了中端开发人员计算机上的数千个虚拟用户
支持多种协议。
支持HTTP和Postgres的测试记录器。
可以通过多种协议收集负载生成器和被测应用程序的操作系统的度量标准。
动态场景和混合行为,灵活的负载方案允许您在单个测试中定义和组合任意数量的负载模式。
后处理和相关。
用于数据驱动测试的外部数据源。
嵌入式易读的负载报告,可在加载期间收集和显示。
Tsung没有为测试开发或执行提供GUI,所以你必须使用shell脚本。
开源服务器压力测试工具有哪些?小编来告诉你
4.JMETER
Apache JMeter?是本次评测中唯一的桌面应用程序,它具有用户友好的GUI,使测试开发和调试更加容易。可供下载的最早版本的JMeter日期为2001年3月9日。从那时起,JMeter已被广泛采用,现在是Silk Performer和LoadRunner等专有解决方案的流行开源替代品。
JMeter具有模块化结构,其中核心通过插件扩展,这意味着所有实现的协议和功能都是由Apache Software Foundation或在线贡献者开发的插件。
JMeter的主要特点:
跨平台,JMeter可以在任何带有Java的操作系统上运行。
可扩展性,当您需要比单个机器可以创建的更高的负载时,JMeter可以以分布式模式执行,这意味着一个主JMeter机器控制多个远程主机。
多协议支持。以下协议都支持开箱即用:HTTP,SMTP,POP3,LDAP,JDBC,FTP,JMS,SOAP,TCP。
采样器周围的前处理器和后处理器的多种实现,这提供了高级设置,拆卸参数化和相关功能。
各种断言来定义标准。
多个内置和外部侦听器,可视化和分析性能测试结果。
与主要构建和持续集成系统集成,使JMeter性能测试成为整个软件开发生命周期的一部分。
开源服务器压力测试工具有哪些?小编来告诉你
5.Locust?
基于Python的开源框架,它使用纯Python语言编写性能脚本。该框架的主要独特之处在于它是由开发人员开发的,Locust的目标是Web应用程序和基于Web的服务,但是,如果您熟悉Python脚本,则可以测试几乎任何您想要的内容。
除此之外,值得一提的是,Locust有一种完全不同的模拟用户的方式,完全基于事件方法和gevent协程作为此过程的支柱,此过程甚至可以在普通笔记本电脑上模拟成千上万的用户,甚至可以执行具有许多步骤的非常复杂的场景。
Locust?主要特点:
跨平台,因为Python可以在任何操作系统上运行。
由于基于事件的实现,在常规机器上具有高可扩展性。
权限断言能力,仅受您自己的Python知识的限制。
很好的基于Web的负载监控。
基于代码的脚本实现,可以方便地与版本控制一起使用。
可伸缩性,因为您可以运行与许多代理一起分发的Locust。
能够使用纯Python代码实现自定义采样器来测试几乎所有内容。
特点比较表
每个测试工具提供的主要功能的对比表
|