Rails评测中的大多数帖子都推荐Ruby-Prof。要使用Ruby-Prof
,我需要为每个控制器操作编写至少一个新的测试,然后手动比较结果,看看什么耗时最长,可能是优化的候选者。
如果我已经确切地知道我关注的是什么请求,这很好。如果我一开始就试图识别热点,这似乎不太好。考虑到我已经有了一个庞大的集成测试套件,涵盖了我关心的应用程序的所有功能,我真正想做的似乎是:
- 运行整个测试套件,并获取每个控制器操作所花费的时间。(或者模型方法,或者我想要的任何粒度级别。)
- 打印两个列表,列出每个控制器动作的最坏情况和平均情况时间
- 对每个列表进行排序,并开始调查运行时间最长的控制器操作,现在使用
Ruby-prof
或其他分析工具深入调用堆栈。在最坏的情况下,将识别可能有问题的请求参数(即,在后端触发慢速代码),而我在编写性能测试时不必考虑所有这些参数
人们不以这种方式使用集成测试套件,而不是基本上用第二个性能测试套件来复制它,这有什么原因吗?我没有看到它的建议。在我写代码做这样的事情之前(可能是ApplicationController
中有before_action
,是否已经有了这样的工具?
我认为自动化测试不会告诉你任何关于性能的信息。你需要真实的数据。例如,您的测试可能不使用索引,但如果您创建了10000条没有索引的记录,您可能会发现性能问题。
我需要为每个控制器动作写至少一个新的测试
为什么要对每个控制器动作进行性能测试?
根据我有限的经验,性能测试是在部署应用程序后进行的,并测试了非常具体的东西。我测试了一大块慢代码或我认为可能慢的代码。
此外,如果您使用在线性能工具,则无需更改代码。在线工具针对已部署的应用程序实例运行。