我一直在研究一个对我来说不寻常的rails项目,因为它不会使用MySQL数据库,而是使用mongoDB + Redis。
该应用程序非常简单 - 从mongoDB“启动”数据到Redis,之后rails将准备好接收来自用户的请求,这些请求主要包括从redis中提取数据,(我被告知它很漂亮)快速做到这一点)快速计算并将一些数据发送回用户。 这将每秒发生~1500-4500次,运气好的话。
在用户军队的威力下降到服务器之前,我想知道是否有办法在内部以某种方式“模拟”页面请求 - 比如运行rake任务以简单地每秒执行该页面N次或者某事那种?
如果没有,是否有办法测试该负载,然后对请求进行计时以大致了解大多数用户将要查看的延迟?
答案 0 :(得分:5)
性能测试是一个非常广泛的主题,正确的工具通常取决于您需要的结果的类型和质量。作为您必须处理的问题的一个示例,请考虑如果您为特定控制器操作编写基准规范会发生什么,并连续1000次调用该方法。这可能会很好地了解该控制器方法的性能,但它可能会使相同的redis或mongo查询进行1000次,数据库驱动程序可能会缓存该结果。这也忽略了您的Web服务器响应并提供作为请求一部分的静态资产的时间(这可能没问题,特别是如果您有其他测试)。
ab
或ApacheBench 是一个简单的命令行工具,可用于测试应用的吞吐量和速度。当我想在网络服务器上发送一千个请求,或者测试我的应用程序可以处理多少个同时请求时(例如,比较杂种,独角兽,瘦身和巨人)时,我通常会先找到这个。因为所有请求都来自同一台服务器,这对于少量请求是有好处的,但随着请求数量的增加,您将受到测试机器上的资源(网络堆栈,CPU和内存)的限制。 mechanize
- 我喜欢使用mechanize快速编写与网页的互动脚本。它处理cookie和表单,但默认情况下不会像图像一样抓取资产。如果您正在进行自己的测试,它可能是一个很好的工具,但不应该是第一个去的。