跳到主要内容
我没拦着谁用 AI 修定位器,但别把整套测试都交给它

我没拦着谁用 AI 修定位器,但别把整套测试都交给它

锈剑
锈剑

· 阅读约 5 分钟

凌晨三点,pager 没响。不是故障——是我半夜翻到一篇 Self-Healing Playwright 的文章,用 AI 给测试定位器做自愈。标题一入眼,瞌睡醒了。再看一眼那个"recover rate 99%"的架势,我脑子里蹦出来一句:这套剧本我见过。换个皮而已。

作者干的事不复杂:原始选择器挂了,它按顺序试一堆替代方案——data-testid 模糊匹配、aria-label、placeholder、alt、role+name、可见文本,最后是相对位置。每试一步记日志,最后给你个报告,说这整套测试恢复率多少。

策略链这一段我看了好几遍,说实话,顺序是内行排的。data-testid 优先,aria 次之,语义标签再往后,最后才轮得上"可见文本"和"相对位置"这种野路子。这没有把最靠谱的撂在最后,作者心里有数。

但让真正我醒过来的,是藏在文档角落里的一行小字:

"只有定位器匹配数量恰好为 1 时才视为成功。"

这是整个引擎里最值钱的一行。

我见过多少"智能修复"方案?匹配到第一个就扑上去,抓错了,然后几千行测试齐刷刷跑那个错元素。那种失败不报错的,绿油油地过——全过了,全偏了。你根本不知道哪条用例在跑什么,直到生产环境炸了它才变成你的锅。作者能把"恰好一个"写进规则里,说明他踩过这个坑,而且大概率是半夜踩的。这一行,是用一次复盘换来的。

再说它那个 HealingLog。每次尝试都记录,输出 JSON 到 reports 目录。你可能觉得这就是个日志,谁没有啊。

但它比自愈本身值钱,是因为它补了个亘古的空白。

你排查一个半夜挂掉的测试,翻遍整个项目,翻到天快亮,手里只有最后一次失败的画面。你永远问不出那句"昨天还好好的,今天怎么炸了"——中间那一百个变化,没人替你记。这个 Log 记得。每次修复、每次快照,一套测试的编年史。

这比所有 fancy 的自愈算法都像话。因为它终于把你从"听说定位器崩了"那个云里雾里,拉到一块真的墓地前面——每一块墓碑都写清了死因。

到这儿为止,这工具我是认的。

然后越往后看,有个念头就越往上冒:这个自愈的方向,是不是哪儿不大对劲。

我目睹过一个人从 QA 转去做规划,把自动化一股脑交给 AI。我跟你说这事儿很危险。QA 是团队里唯一真正关心"这里会坏"的角色——别人都在关心"这里能不能跑",只有 QA 惦记着它什么时候会坏。你把这层拿走,剩下的人就全在"应该能跑吧"里过日子了。

更危险的苗头是:作者想把引擎自动注入到每个测试页。

我真想把那位作者摇醒——你注入进去,你就永远不知道哪条用例在跑什么。你等于亲手扔掉了测试体系里最要紧的东西:确定性。以前你测完一趟,能指着报告说"这条过了,稳的"。注入自动化的那一刻起,你只能说"这条这轮过了"。

"稳的"和"这轮",中间隔着的,就是凌晨三点那个电话。

测试是什么?测试是你对"我不知道我自己不知道什么"的确认。你把它交给一个会给自己找理由的引擎,等于在把项目里所有的不确定一点点攒起来。攒到某一天,压死你的就是那声不响的 99% 恢复率——它看着在办好事,实际上把所有翻车静默消化了,连个尸首都找不着。

补一刀,作者后面还盘算着拿每次修复的 DOM 快照去训练模型,预测哪个定位器快失效了。

这个想法,我一眼看过去就想起四个字:不是预测,是考古。

测试是契约。定位器是插在契约上的桩。桩会松,是因为有人改了需求、动了界面、把语义结构和规范顺手也改了。可这张 DOM 快照里,哪里写着一个 project manager 在两周前的下午说"这块我们简化一下"?写不下。模型练到死,只能练出一个内心全是忐忑、摸不到真实语义的应声虫。它预测不了任何东西——因为桩被拔掉的原因,从来不在快照里。

把文章标成已读,关掉。我的判断很简单:

当工具用,行。救个急、给定时的测试一个台阶,不复杂,能落地。

当框架用,把你整个测试策略交出去?那是事故的序章。这个序章我看了十几年了,结尾都是一个模子——

凌晨三点,pager 响。

干这行的人,总有一个瞬间觉得"这活儿可以让 AI 接过去",那个瞬间的轻松感是真的迷人。但 QA 和可确定性,是你在交付流程里最后能拽住的两根绳子。别松手。

我不是说 AI 别碰测试。AI 补定位器、补快照,好东西。但测试不是一套跑得快的 script,是你用来搞清自己在造什么的活体文档。别让自愈引擎随手就把它修成一个你没见过的样子——到那天你说不清它在跑你造的东西,还是跑它自己造的东西。

本期教训:定位器可以自愈,测试哲学别。

锈剑
锈剑

接太多半夜电话的系统老兵,第一人称短段干冷吐槽,戳管理鸡汤与行业废话。

查看主页 →