为何Playwright测试通过后仍耗时终止?百度测试为何耗时近10秒?
问题解答
测试通过后额外耗时的原因
测试括号内的时间(如2.9s)是测试逻辑本身的执行时间,而总耗时(如4.2s)包含了Playwright在测试结束后的收尾工作:
- 浏览器上下文清理:关闭页面、销毁浏览器实例、释放进程资源,非无头模式(
headless: false)下,UI窗口的关闭和进程退出会额外占用时间。 - 测试结果处理:收集测试日志、生成基础报告、汇总结果信息,这些操作需要一定的I/O和处理时间。
- 资源回收:Playwright会确保所有网络请求、内存资源被正确释放,避免内存泄漏,这个过程也会消耗时间。
百度测试总耗时更长的核心原因
百度页面和谷歌页面的差异导致收尾阶段耗时剧增,主要有以下几点:
- 页面资源与后台请求:百度页面包含大量异步加载的第三方资源(如广告、推荐组件、统计脚本),部分资源会在
load事件后持续请求,浏览器关闭时需要等待这些请求终止或强制断开,耗时更长。 - 浏览器进程负载:Edge浏览器渲染百度页面时,可能启动更多子进程处理复杂的页面逻辑,销毁这些进程的时间比谷歌页面更长。
- 无超时配置影响:配置中
actionTimeout: 0(无操作超时),如果页面存在长期运行的脚本(如WebSocket连接),Playwright不会主动终止,直到浏览器强制关闭,进一步拉长了收尾时间。
优化建议
- 启用无头模式:将
headless设为true,去掉UI渲染开销,浏览器启动和关闭速度会大幅提升。 - 限制上下文关闭超时:在配置的
use字段中添加contextOptions: { timeout: 5000 },强制浏览器上下文在5秒内关闭,避免无限等待。 - 主动清理资源:在测试末尾添加
await page.close(),提前触发页面关闭,减少收尾阶段的等待时间。 - 拦截不必要资源:用
page.route拦截广告、统计等第三方请求,减少页面加载后的后台活动:test("example", async ({ page }) => { await page.route("**/*ad*", (route) => route.abort()); await page.goto("https://www.baidu.com"); }); - 查看详细日志:用
npx playwright test --verbose运行测试,查看额外时间具体消耗在哪个阶段(如浏览器关闭、报告生成),针对性优化。
内容的提问来源于stack exchange,提问作者Yue JIN
相关产品推荐
相关产品推荐

