如何编写一个好的性能测试?¶
验证您是否等待所有异步代码¶
如果您的测试涉及异步代码,鉴于 DevTools 代码库,这很可能是这种情况,请仔细检查您的测试脚本。您应该确保测试直接或间接运行的任何代码都已完成。您不仅应该等待与您尝试测量的非常精确的功能相关的函数。
这样做是为了防止在您的测试运行之后引入噪声。如果任何异步代码挂起,它很可能与下一个测试并行运行并增加其方差。测试中的噪声使得难以检测到小的回归。
您通常应该等待
所有 RDP 请求完成,
所有 DOM 事件触发,
Redux 动作被分派,
React 更新,
…
确保其结果在您想要监控的代码或功能出现回归/修复时发生变化。¶
如果您正在编写新的测试来覆盖最近的回归,并且您有修补程序来修复它,请将您的测试推送到 try,以及使用回归修复。查看 try 推送并确认您的修复实际上确实显著减少了性能测试的持续时间。如果您没有引入任何修补程序来提高性能的测试,请尝试使用伪慢速(例如异步代码的setTimeout
或同步代码的非常慢的for
循环)来降低您尝试覆盖的代码速度。这样做是为了确保您的测试能够捕获重大回归。
对于我们的点击性能测试,我们可以从 inspector 代码库中执行此操作
window.addEventListener("click", function () {
// This for loop will fake a hang and should slow down the duration of our test
for (let i = 0; i < 100000000; i++) {}
}, true); // pass `true` in order to execute before the test click listener
保持测试执行时间短。¶
运行性能测试成本很高。我们目前正在为每个合并到 Firefox 的 changeset 运行 25 次测试。目标是在 try 上以不到一秒的时间运行测试。