1. 前言:关注维护,不是生成
自动化脚本写出来并不算难,真正麻烦的是后续维护。
项目里很多自动化失败,并不是真正的功能缺陷,而是一些高频、低难、重复性的维护问题。比如按钮文案变了、placeholder 调整了、断言文本不一致了。这些问题单个看都不复杂,但一多起来,就会不断消耗测试时间,也会制造大量"假失败",最后让团队慢慢失去对自动化结果的信任。
2. 为什么要用 AI:切高频维护问题
现在对 AI 在自动化测试里的定位,不是"让它把所有事情都做掉",而是让它先介入那批最适合自动化处理的问题。
什么问题最适合先切?
就是那批高频、低难、机械性重复的问题。
比如 locator 变化、placeholder 变化、断言文本不一致。这类问题并不复杂,但在真实项目里出现频率很高,而且很耗人。很多时候功能没坏,脚本先挂了,测试人员还得花时间去看日志、找原因、改脚本、再回归一遍。
3. 验证目标:让 AI 参与最小维护闭环
这次验证的重点,不是 AI 会不会写测试脚本,而是它能不能参与一条最小维护闭环:
读取失败日志 → 判断失败类型 → 生成最小修复策略 → 修改测试代码 → 回归验证
这次关注的不是"脚本生成",而是"脚本维护"。
4. 整体流程:输入 / 判断 / 执行 / 输出
把整个流程拆成了四层。
输入层
拿到失败日志、失败用例名和当前测试文件内容。
判断层
先归因,判断失败属于哪一类问题。
执行层
在受控边界内做最小修复,并重新执行测试。
输出层
输出失败摘要、分类结果、修复策略、修改 diff 和回归结果。
这样拆的目的,判断层很重要,如果不先归因,AI 很容易乱改代码,甚至为了让脚本通过,直接 skip、删断言、放宽定位,这样虽然"绿了",但测试价值就没了。
5. 先收敛 4 类可修复问题
这次没有一开始就追求复杂页面、批量修复或者 CI 集成,而是先把范围收敛到 4 类高频问题:
-
Assertion Mismatch
-
Locator Changed
-
Placeholder Changed
-
Text Changed
这是 UI 自动化维护里最常见、最消耗时间的一批问题。
它们也有一个共同点:
都属于文本型、高频、容易归因、适合先做最小修复的场景。
6. 三个实际案例:按钮 / placeholder / 断言
为了验证这条链路,做了以下案例:
案例一:按钮 locator 错误
在测试脚本里故意制造按钮定位错误,把原本的"提交"改成了"提交123"。
执行 Playwright 后,报错信息很直接:找不到对应按钮。
这种场景下,页面主流程本身没有问题,问题明显出在 locator。AI 读取失败日志后,能够判断这是按钮文本定位错误,并把代码修回合理值。修复后重新执行,测试恢复通过。
案例二:placeholder 错误
第二个场景是输入框 placeholder。
把脚本里的 placeholder 改成一个页面上并不存在的值。执行后,Playwright 报输入框定位失败。
这个问题和按钮 locator 很像,本质上也是定位信息和页面真实值不一致。AI 读取日志后,能够识别 placeholder 变化,并修复对应定位。修完后重新执行,测试通过。
案例三:断言文本错误
第三个场景是断言。
把断言文本写错,让页面实际展示的是正确内容,但断言期望值不一致。执行后,Playwright 失败。
这个时候问题就不在页面行为,而在断言本身。AI 读取失败日志后,能够判断流程正常、断言错误,再把断言修回真实值。修复后重新执行,测试恢复通过。
7. 受控修复:怎么防止 AI 乱改
它有没有在受控边界内修。
因为自动化维护最怕的,不是修不了,而是乱修。
如果不给约束,AI 很容易为了通过而通过,比如:
-
直接 skip 测试
-
删除断言
-
放宽定位条件
-
甚至去改业务代码
这样表面上测试通过了,但测试本身已经失去意义。
所以给修复行为加了几个明确约束:
-
只修改测试代码
-
只改 1 处
-
不允许 skip
-
不允许删除断言
-
不允许放宽定位或断言
-
保持最小必要修复
这些约束的意义在于:
不是让 AI 随便修,而是让它在一个可解释、可复核、可回归的边界里修。
8. 怎么证明这不是一次偶然成功
做了两步增强验证。
第一步:做统一 workflow,不预设失败类型
不提前告诉系统这是 locator 问题、placeholder 问题还是断言问题,而是只给失败日志,让它自己去判断、修复和回归。
第二步:连续执行两轮
每一轮都要求它独立完成:故障注入、执行测试、读取日志、自主分类、最小修复和回归验证。
这两步的意义不在于把场景做得多复杂,而在于验证这条链路不是一次性碰巧成功,而是已经具备一定重复性。
9. 这次实践的价值和边界
在当前范围内,它已经可以完成:
-
自动执行 Playwright
-
自动读取失败日志
-
自动判断失败类型
-
自动生成最小修复策略
-
自动修改测试代码
-
自动重新执行并完成回归验证
这说明 AI 已经可以从"给建议"进一步走向"参与维护动作"。
目前这套流程还只是单文件、单用例、单点故障,覆盖的也是文本型高频维护问题。
还没有继续扩展到:
-
多文件批量修复
-
多用例统一回归
-
trace / screenshot 辅助分析
-
复杂页面结构漂移
-
Jenkins / CI 接入
-
非文本类失败,比如环境、权限、时序问题
-
修复成功率、误修率的系统化统计
10. 总结:AI 先接维护,不替代判断
自动化真正难的,很多时候不是写出来,而是活下去。
以前聊自动化,大家容易把注意力放在"脚本写了多少""覆盖了多少"。但真实项目里,如果维护成本太高,自动化很快就会从资产变成负担。
所以:
它最适合先接住那批高频、低难、重复性的维护问题。
但它并不替代测试人员的判断。真正重要的仍然是:
边界由人定义,结果由人复核。