【问题标题】:Load / Performance tests (HTTP and Web)负载/性能测试(HTTP 和 Web)
【发布时间】:2011-10-03 13:36:52
【问题描述】:
我正在寻找一个负载测试工具,我需要的主要功能是:
- 分布(非常重要) - 我需要能够每秒运行 20,000 - 30,000 个请求(甚至更多),所以一台机器是不够的。它应该能够在 Amazon EC2 上进行通信(例如 jMeter,不能做到)
- 收集数据 - 是否可以生成图形或复杂数据并不重要,但我应该能够知道客户端和服务器的吞吐量是多少,发生了多少错误等。因为它会运行在多台计算机上,数据应该由工具本身收集(jMeter 再次这样做,但它有很多问题),我试图避免从不同的机器获取数据并“手动”合并它。
- 图表或更复杂的数据是不错的选择(例如:http://code.google.com/p/multi-mechanize/),但如果该工具不提供它,我应该能够从测试日志中获取这些数据。
我没有找到关于负载测试工具的好评(这就是我在这里问的原因),目前我要检查的主要工具是 Grinder,如果您使用过好的工具请分享:)
我使用过 jMeter,我决定寻找更好的工具。 jMeter 很旧,它适用于旧协议(所以我不能使用它分布在 EC2 上),它运行缓慢且难以使用,而且它的图表使其非常慢。
顺便说一句,它不一定是免费/开源的,如果它的成本高达数十或数百美元就可以了。
谢谢。
【问题讨论】:
标签:
load-testing
stress-testing
【解决方案1】:
Locust 是一个很棒的负载测试工具,它满足所有 OP 的要求。
就满足 OP 的要求而言,Locust 的一些功能:
- 可以在主/从模式下运行以生成分布式负载
- 让您以简单/可解析的方式访问原始和汇总的结果数据
格式
- 与石墨/grafana 完美集成以满足您的可视化需求
Locust 是开源的,用 Python 编写...虚拟用户也是用 Python 代码编写的。使用 Python 开发复杂工作负载的功能和易用性非常好(与 JMeter 笨拙的声明式 XML 样式相比)。
Locust 开发是 hosted on Github 并且有几个活跃的提交者。
在 Locust 网站上,标语是:
“使用 Python 代码定义用户行为,并使用
数百万同时用户。”
可选 Web UI 的屏幕截图:
注意:我使用过其他答案中推荐的所有其他工具,而 Locust 则要好得多
【解决方案2】:
Visual Studio 的 Web 性能测试和负载测试听起来很合适。如果您获得 Visual Studio Ultimate 的许可证,然后获得 Visual Studio 控制器/代理的许可证,则控制器和代理将处理负载分配。这一切都有很好的记录,而且很容易设置。它具有一些可能满足您需求的默认报告,但也能够导出到 Excel,您可以在其中使用数据透视表(或 PowerPivot 等外部工具)创建任何自定义报告或图表。
这里是快速参考指南:http://vsptqrg.codeplex.com/,更多信息可在网络上找到。
【解决方案3】:
问题表明无法在 Amazon ec2 上使用 JMeter [第 1 点]。这不是真的,它是可能的,但这很困难,因为 JMeter 使用 RMI 进行通信,您必须使用隧道和更改端口才能使其工作。
提到的另一个 JMeter 问题 [第 2 点] 是它在整理数据时存在“很多问题”。我怀疑这是指一个潜在的瓶颈,即来自多个客户端的所有数据都被写入一个位置。如果是这样,那么他的问题通常可以通过在属性中使用“批处理”或“统计”模式来解决,而且最新的 JMeter 版本 2.6 在这方面取得了进步。
但是,我写了a script,它解决了这两个问题,并使在 ec2 上运行 JMeter 变得相当容易。
【解决方案4】:
您可以使用WebLOAD。
我已内置支持在 EC2 上自动启动负载机器,收集所有数据并具有良好的报告功能。
【解决方案5】:
对于这些数量的请求,我会看一个 Tsung,尽管(类似于 Jmeter)这在负载规范方面是 XML 声明性的。如果您更喜欢编写 Web 驱动程序,那么 Grinder 值得一看(都是开源的)。
【解决方案6】:
实际上我们使用 Amazon EC2 来运行 cloud load test 和 JMeter。这并不像你想的那么难。 JMeter 比两个工具(Grinder、Tsung)的优势在于文档和社区。
jMeter 很旧,它适用于旧协议(所以我不能使用它
分布在 EC2 上)
JMeter 上一晚的构建是昨天,这意味着它并没有您想象的那么旧。您可以查看here。 EC2 使用 WSDL 进行 API 调用,不是新的通用协议,这里是EC2 API documentation。