是否有可能使用Rake在Rails中模拟页面请求?

是否有可能使用Rake在Rails中模拟页面请求?

问题描述:

我一直在研究一个对我来说很不寻常的rails项目,因为它不会使用MySQL数据库,而是使用mongoDB + Redis进行滚动。是否有可能使用Rake在Rails中模拟页面请求?

该应用程序非常简单 - 从mongoDB启动数据到Redis,之后点轨将准备好接受来自用户的请求,其中主要包括从redis提取数据(我被告知它会是这很快就会发生)快速计算并将一些数据发回给用户。 这会发生〜每秒1500-4500次,有幸运。

在用户部队在服务器端发生故障之前,我想知道是否有办法在内部以某种方式“模拟”页面请求 - 比如运行一次rake任务,以便每秒只执行该页面N次或这种东西?

如果不是,有没有办法测试负载,然后计算请求以获得大多数用户将要查看的延迟的大致概念?

买者

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

基本工具

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

Rails的剖析链接去会喜欢一些帮助

+0

意想不到的回答,谢谢。为了澄清一点 - 将不会有静态资源或甚至是html页面返回。有问题的* one *页面会收到一个小JSON,(在kb下)从redis(2-5kb tops)中获取一个散列,然后发回另一个约3kb大小的JSON。所以我不认为缓存将是一个问题。基于此,从你列出的那些方法推荐我尝试? – 2012-07-08 06:59:22

+0

我建议使用基准控制器方法本身,然后使用ab验证结果。如果出现差异,请调查原因。顺便说一句,如果性能是一个问题,并且你不需要完整的导轨和机架堆栈,那么我强烈建议检查一下goliath。 – 2012-07-08 07:47:34

+0

谢谢。从阅读关于heroku如何处理扩展的一些内容看来,现在我需要有两个应用程序 - 一个是Rails应用程序,用于处理少数用户以及像goliath这样的非常快速提供api功能的应用程序。有没有办法在heroku上同时安装rails和goliath?我想这不太可能 – 2012-07-08 17:55:33