为 Rails 性能测试生成代表性数据
Posted
技术标签:
【中文标题】为 Rails 性能测试生成代表性数据【英文标题】:Generating representative data for rails performance tests 【发布时间】:2011-04-19 07:32:33 【问题描述】:我的 ruby on rails 网站的特定页面速度很慢。
为了弄清楚发生了什么,我尝试按照guide 在本地主机上设置这个简单的测试:
class BrowsingTest < ActionDispatch::PerformanceTest
def test_homepage
get '/slow_page'
end
end
此时我的测试数据库是空的,所以我需要为其添加一些数据。在挖掘了几个小时的各种东西之后,我有点困惑,我不确定我是否应该:
1) 以某种方式从生产服务器复制数据并将其粘贴到测试数据库中(有没有简单的方法可以做到这一点?)
或
2) 使用测试夹具 .yml 文件生成许多用户和帖子
或
3) 将代码放入seed.rb 以生成用户和帖子。 (我试过这样做,但由于某种原因,我在这个文件中生成的东西在我的 PerformanceTest 运行时消失了
4) 我遇到了一些像 Factory Girl 和 Faker 这样的宝石。我还没有尝试过这些,但从我阅读的内容来看,它似乎更多地用于创建特定的情况和状态,而不是为性能测试生成数千个用户。
我认为这将是一种常见的情况,并且很想从那些做过这件事的人那里得到一些建议。谢谢。
【问题讨论】:
【参考方案1】:生成性能测试的最佳方法是使用生产服务器中的真实用户数据。如果您可以使用这些,那么一定要使用它们。原因是您希望针对最常见的真实用户场景优化您的 web 应用程序的性能。无论您炮制出何种不基于真实用户行为的场景,充其量都将缺乏代表性,或者在最坏的情况下完全无用。
在实践中,你想做的是:
复制您的生产数据库并将其用于性能测试 - 这将确保任何查询在生产中运行缓慢,例如由于大表、缺少索引、影响更新速度的索引过多等,在你的测试。 解析您的网络服务器日志以计算出在高峰时间在您的慢速页面上的并发请求数,并在您的测试中生成相同类型的负载(或更高 - 取决于您的增长预期)。 您可能希望查看从分布式服务器网络提供真实负载近似值的服务。比如看看Browser Mob【讨论】:
为了复制生产数据库进行测试,人们只使用mysqldump吗?以上是关于为 Rails 性能测试生成代表性数据的主要内容,如果未能解决你的问题,请参考以下文章