【问题标题】:Can I reuse my integration test suite to profile a Rails app?我可以重复使用我的集成测试套件来分析 Rails 应用程序吗?
【发布时间】:2016-07-18 22:28:32
【问题描述】:

Most posts on Rails profiling 推荐Ruby-Prof。要使用Ruby-Prof,我需要为每个控制器操作编写至少一个新测试,然后手动比较结果以查看耗时最长的以及可能是优化的候选对象。

如果我已经确切地知道我正在关注什么请求,那就太好了。如果我首先尝试识别热点,这似乎不太好。鉴于我已经拥有一个庞大的集成测试套件,涵盖了我关心的所有应用程序功能,看来我真正想做的是:

  1. 运行整个测试套件并记录每个控制器操作所花费的时间。 (或模型方法,或我想要的任何粒度级别。)
  2. 打印两个列表,每个控制器操作中的最坏情况和平均情况时间。
  3. 对每个列表进行排序并开始调查运行时间最长的控制器操作,现在使用Ruby-prof 或其他分析工具深入调用堆栈。最坏情况下的时间将识别可能有问题的请求参数(即,在后端触发慢代码),而我在编写性能测试时无需考虑所有这些。

是否有某些原因人们不以这种方式使用集成测试套件,而不是使用第二个性能测试套件来复制它?我没有看到它建议。在我编写代码来做这样的事情之前(大概在ApplicationController 中有一个before_action,是否已经有一个工具可以做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 profiling ruby-prof


    【解决方案1】:

    我认为自动化测试不会告诉您任何有关性能的信息。你需要真实的数据。例如,您的测试可能不会使用索引,但如果您创建 10,000 条没有索引的记录,您可能会发现性能问题。

    我需要为每个控制器操作编写至少一个新测试

    为什么要对每个控制器操作进行性能测试?

    在我有限的经验中,性能测试是在部署应用程序并测试非常具体的事情后完成的。我测试了一段很慢的代码或我认为可能很慢的代码。

    此外,如果您使用在线性能工具,则无需更改代码。在线工具针对已部署的应用实例运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      相关资源
      最近更新 更多