本节摘要:性能优化是自动化工程的常青课题,本节把散落在前七章的提速手段收拢成一座四层金字塔——策略层、页面层、执行层、资源层,并给出"先度量、再动手"的优化纪律。作为全册收尾,本节还把贯穿始终的设计原则重新提炼一遍:它们不是零散技巧,而是一套用工程方法经营回归信任的完整方法论。
优化始于度量。给一条典型用例做耗时解剖,结论通常出乎意料:真正花在"验证业务"上的时间不足两成,其余全在开场(启动浏览器与驱动)、路途(页面导航与加载)、以及各种为了安全垫进去的等待。换句话说,绝大多数套件提速三倍不需要任何黑科技,只需要把时间解剖出来,对着大头逐项治理。
解剖的方法在第 2 章就有伏笔——驱动的详细日志带时间戳,把各阶段起止时间拉出来即可;工程化一点,在页面对象基类的动作入口埋耗时统计,按用例聚合上报。有了按用例、按动作的耗时分布,下面的金字塔才有落点。

策略层收益最大,而且不动一行测试代码。7.4 的三执行层让"全量"只在需要的时机跑;6.2 的按层并行让冒烟快跑全量稳跑;预算制让慢回归持续暴露。团队常犯的错是一上来钻进代码层抠毫秒,而策略层的账根本没算——一次"提交触发全量"改成"提交触发冒烟",节省的时间比一百处代码微优化都多。
页面层抓加载与等待。eager 加载策略让导航在 DOM 就绪即返回(2.1 埋的伏笔在此兑现);无头模式下阻断图片与字体加载是常见的进一步提速手段,前提是页面功能不依赖被阻断的资源——用小规模用例验证后再全量推开。等待的收紧遵循 3.3 的"最少必要条件":全局兜底调短、关键处定点设防,"等页面完全加载"这种保守写法是时间黑洞。
执行层抓动作路径。登录等前置流程改走接口构造会话(7.3 反模式名单的对应纠正),单条用例省下的开场时间以十秒计;减少不必要的导航——能在当前页面完成的操作不重新打开页面;用例间的状态准备尽量在接口层完成,浏览器只负责"验证用户看到什么"。这一层的优化同时改善稳定性,是少有的双收动作。
资源层抓环境开销。无头模式、合理的容器规格与槽位预算(6.3 的配置)、及时销毁会话防泄漏(2.2 的会话纪律)。这层单笔收益小,但零风险、一次性配置长期受益。
性能优化最容易翻车的方式是"听说有用就全上"。三条纪律保平安。先度量后动手:每项优化前后跑同一基准集,用数据说话——按用例耗时的对比表贴在改进记录里。一次一项:并行改动无法归因,反而会在出问题时让你不知道该回退哪个。守住稳定底线:任何提速手段不得牺牲断言的严格性与等待的充分性——把图片阻断推到功能依赖图片的页面上、把等待收紧到偶发失败,都是在用信任换速度,方向反了。
走完八章,把贯穿全书的设计原则重新收拢一次。认知层:Selenium 的价值在"真实浏览器里的用户旅程",定位的本质是为元素选一个抗改版的契约锚点(第 1、3 章)。结构层:测试代码也是工程——运行器托管、页面对象分层、数据配置外置,让变化只发生在一个地方(第 4 章)。规模层:零共享是并行的前提,容器一致是规模的地基,矩阵分层是成本的解法(第 5、6 章)。信任层:失败要定性、现场要取证、报告要能回答"能不能发"(第 7 章)。演进层:按旧账评估新特性,按金字塔持续优化(第 8 章)。
如果只带走一句话,请带走这句:自动化测试的终极产出不是脚本,是信任——而信任来自每一次红屏都可解释、每一次绿屏都有依据。 愿你的工单簿越来越薄,看板曲线越来越稳。
把优化纪律跑一遍的样子。某团队的回归基线:全量一百八十条,耗时七十六分钟。第一步,解剖耗时:按用例聚合的动作统计显示,三十一分钟花在"登录开场"(每条用例都从登录页点起)、十九分钟花在页面完整加载、十四分钟是全局保守等待的铺垫、十二分钟才是断言与验证本身。大头果然在验证之外。
第二步,按金字塔逐层动手,一次一项。策略层先行:全量拆出冒烟集挂提交触发,全量改日构建——用户感知的"回归变快"当周兑现。页面层:加载策略换 eager,配合无头模式阻断图片与字体,十九分钟压到六分钟;验证通过(图片相关的三条例外用例单独开启资源)。执行层:登录态改为接口构造会话,三十一分钟的开场压缩到四分钟;这一项同时消灭了登录页抖动对全量用例的传染,7.1 的重试率同步下降。资源层最后:全局兜底等待从八秒收紧到五秒、关键处定点补偿,十四分钟降到八分钟。
第三步,收口:基准集复跑对比,总耗时从七十六分钟到二十六分钟,通过率持平,断言集合零改动。整轮巡航耗时约两周,每一步有前后数据、每一步可单独回退——这份对照表后来成了向管理层汇报"自动化持续改进"的固定素材。优化巡航的正确心态是马拉松配速:不求一次榨干,只求每次巡航都有可度量的进账。
问:优化到什么程度算够了? 两条停止线:执行时长进入预算内且趋势平稳,说明策略层到位;继续优化单项收益低于维护成本,说明该停了。性能优化的边际收益递减很快,把精力还给用例质量与稳定性,通常是更划算的转移。
问:优化会不会与稳定性冲突? 方向上它们同源——慢的套件通常也脆(保守等待、冗余导航既是时间黑洞也是故障温床),所以多数优化同时降脆。真正冲突的只有激进压缩等待这一类动作,而 8.3 的纪律(先度量、一次一项、稳定底线)就是为这类动作准备的刹车。