为轨道性能测试生成代表性数据

时间:2011-04-19 07:32:34

标签: ruby-on-rails performance unit-testing testing profiling

我在ruby on rails网站上的特定页面很慢。

为了弄清楚发生了什么,我尝试按照guide在localhost上设置这个简单的测试:

class BrowsingTest < ActionDispatch::PerformanceTest
  def test_homepage    
    get '/slow_page'
  end
end

此时我的测试数据库是空的,所以我需要用一些数据来播种它。在用各种东西挖了几个小时后,我有点困惑,我不确定我是否应该:

1)以某种方式从生产服务器复制数据并将其粘贴到测试数据库中(有一种简单的方法可以做到这一点吗?)

OR

2)使用测试夹具.yml文件生成许多用户和帖子

OR

3)将代码放在seed.rb中以生成用户和帖子。 (我尝试过这样做,但由于某些原因,我在此文件中生成的内容在我的PerformanceTest运行时消失了

4)我遇到了像Factory Girl和Faker这样的宝石。我还没有尝试过这些,但从我读到的内容来看,似乎更多的是创建特定的情境和状态,而不是为性能测试生成数千个用户。

我认为这是一种常见的情况,并希望从那些做过这些事情的人那里得到一些建议。谢谢。

1 个答案:

答案 0 :(得分:2)

生成性能测试的最佳方法是使用生产服务器中的真实用户数据。如果您可以使用它们,那么一定要使用它们。原因是您希望针对最常见的真实用户场景优化Web应用程序的性能。无论你根据真实的用户行为进行编制的任何情况,最好不要具有代表性,或者在最坏情况下完全没用。

在实践中,您想要做的是:

  • 复制您的生产数据库并将其用于您的性能测试 - 这将确保生产中运行缓慢的任何查询,例如由于大表,缺少索引,太多指数影响更新速度等,请执行相同操作你的测试。
  • 解析您的网络服务器日志,以便在高峰时间计算慢页面上的并发请求数,并在测试中生成相同类型的负载(或更高 - 取决于您的增长预期)。
  • 您可能希望查看从分布式服务器网络提供实际负载近似值的服务。例如,请查看Browser Mob