是否可以使用rake在Rails中模拟页面请求?

时间:2012-07-08 05:55:51

标签: ruby-on-rails performance mongodb heroku redis

我一直在研究一个对我来说不寻常的rails项目,因为它不会使用MySQL数据库,而是使用mongoDB + Redis。

该应用程序非常简单 - 从mongoDB“启动”数据到Redis,之后rails将准备好接收来自用户的请求,这些请求主要包括从redis中提取数据,(我被告知它很漂亮)快速做到这一点)快速计算并将一些数据发送回用户。 这将每秒发生~1500-4500次,运气好的话。

在用户军队的威力下降到服务器之前,我想知道是否有办法在内部以某种方式“模拟”页面请求 - 比如运行rake任务以简单地每秒执行该页面N次或者某事那种?

如果没有,是否有办法测试该负载,然后对请求进行计时以大致了解大多数用户将要查看的延迟?

1 个答案:

答案 0 :(得分:5)

买者

性能测试是一个非常广泛的主题,正确的工具通常取决于您需要的结果的类型和质量。作为您必须处理的问题的一个示例,请考虑如果您为特定控制器操作编写基准规范会发生什么,并连续1000次调用该方法。这可能会很好地了解该控制器方法的性能,但它可能会使相同的redis或mongo查询进行1000次,数据库驱动程序可能会缓存该结果。这也忽略了您的Web服务器响应并提供作为请求一部分的静态资产的时间(这可能没问题,特别是如果您有其他测试)。

基本工具

  • ab或ApacheBench 是一个简单的命令行工具,可用于测试应用的吞吐量和速度。当我想在网络服务器上发送一千个请求,或者测试我的应用程序可以处理多少个同时请求时(例如,比较杂种,独角兽,瘦身和巨人)时,我通常会先找到这个。因为所有请求都来自同一台服务器,这对于少量请求是有好处的,但随着请求数量的增加,您将受到测试机器上的资源(网络堆栈,CPU和内存)的限制。
  • Benchmark is a standard ruby class,非常适合快速吐出一些分析信息。它也可以与Test::UnitRSpec一起使用。如果你想要一个rake任务来做一些快速基准测试,这可能就是开始的地方
  • mechanize - 我喜欢使用mechanize快速编写与网页的互动脚本。它处理cookie和表单,但默认情况下不会像图像一样抓取资产。如果您正在进行自己的测试,它可能是一个很好的工具,但不应该是第一个去的。
  • 还有一些工具可以模拟与网站交互的实际用户(他们会像浏览器那样下载资产,并且可以配置为模拟几个不同的用户)。最值得注意的是The GrinderTsung。虽然仍处于开发阶段,但我目前正在研究tsung-rails,以便更轻松地使用tsung自动执行rails负载测试,如果您选择朝这个方向前进,我会非常乐意:)

Rails分析链接