AI生成测试用例的7个坑,第3个差点造成线上事故

举报
霍格沃兹测试开发学社 发表于 2026/09/22 20:59:45 2026/09/22
【摘要】 覆盖率92%,11个测试全过——然后线上崩了大家好,我是某互联网公司的测试架构师。上个月,团队里一个测试同事用AI生成了一个用户认证模块的测试套件。跑了一下——11个测试全部通过,覆盖率92%。他在群里发了个截图,配文:“AI真香。”两周后,线上出了一个Bug:用户用特殊字符组成的密码可以绕过验证。回看测试代码,11个测试里没有一个测试过特殊字符输入。所有测试都在测“正常情况”和“AI能想到...

覆盖率92%,11个测试全过——然后线上崩了

大家好,我是某互联网公司的测试架构师。

上个月,团队里一个测试同事用AI生成了一个用户认证模块的测试套件。跑了一下——11个测试全部通过,覆盖率92%。他在群里发了个截图,配文:“AI真香。”

两周后,线上出了一个Bug:用户用特殊字符组成的密码可以绕过验证。

回看测试代码,11个测试里没有一个测试过特殊字符输入。所有测试都在测“正常情况”和“AI能想到的异常”。真正的Bug藏在AI没想到的边界里。

这不是个例。今天我把过去一年踩过的坑全倒出来,第三个差点造成线上事故

坑一:AI只测“它能想到的”

AI生成的测试有一种魔力:跑起来全绿,覆盖率报表漂亮,但线上该崩还是崩。

为什么?因为AI的测试覆盖了“它被训练见过的异常模式” 。训练数据里的代码示例,很少包含“密码前后有空格”“密码里有Unicode字符”“超长邮箱地址”这种真实世界的脏数据。

真实案例: AI给用户认证模块生成了11个测试,覆盖了正常注册、空邮箱、空密码。但没覆盖密码太短、密码太长、XSS注入、前后空格、Unicode字符、超长邮箱。上线后特殊字符绕过验证,直接出事故。

避坑方法: 每次AI写完测试后,手动补充一个“脏数据集”——空字符串、仅空格、超长字符串、SQL注入、XSS、Unicode特殊字符、零宽字符、前后空格、换行符注入。用@pytest.mark.parametrize跑一遍。

坑二:断言写得太“弱”,测了等于没测

AI生成的断言往往只校验返回值格式,不校验业务正确性。支付折扣、金额取整、幂等逻辑,AI容易写出“看起来能跑,但无法真实校验业务缺陷”的弱断言。

真实案例: 一个电商项目的UI自动化脚本,AI生成了3000行代码,覆盖了正向下单、支付、退款流程。但脚本只实现了点击操作,没有断言支付成功后订单状态变为待发货,也没有处理支付超时的异常场景。测试时没发现问题,上线后直接引发生产故障。

避坑方法: 审核AI生成的断言时,问自己一个问题:“这个断言如果被删掉,测试还能发现什么Bug?”如果答案是“什么都发现不了”,这个断言就是弱的。

坑三:高覆盖率幻觉——差点造成线上事故的那个坑

这是我最想讲的一个坑,也是差点让我们团队出事故的那个。

AI生成的单元测试,覆盖率可以做到95%以上,看起来“测得很全”。但覆盖率不等于缺陷检出率

真实案例: 一个金融科技团队全面推行AI生成测试用例,半年后发现——在AI生成用例覆盖率达到95%后,线上缺陷的漏报率居然比纯手工测试时期还要高

问题出在审核环节。测试工程师陈阳因为相信AI生成的“100%路径覆盖、0错误”报告,忽略了“输入字段为空+并发写入”这种AI逻辑无法覆盖的“荒谬组合”。最终导致生产环境崩溃。

还有一个案例更典型:三起生产事故均发生在CI/CD流水线通过“100%行覆盖+95%分支覆盖”门禁之后,但实际存在关键路径未被触发。AI生成的测试仅模拟HTTP 200响应,遗漏了超时熔断分支;生产中因网络抖动触发panic,导致订单重复提交。库存扣减的测试使用固定初始值stock=100,未覆盖stock=0边界场景,也未校验数据库事务回滚后的真实状态。

为什么覆盖率会骗人? 因为AI会大量生成无意义、无校验的空用例、重复分支用例,单纯拉高行覆盖率数字,但无实际缺陷检测能力,造成覆盖率指标失真。

避坑方法: 用AST插桩强制执行所有if/else分支的panic路径,用运行时捕获状态变更序列对比测试前后的对象图差异。行覆盖率是参考,分支覆盖率和状态覆盖率才是真相。

坑四:边界条件“系统性缺失”

AI生成的用例高度集中在“黄金路径”——用户登录成功、订单创建成功、支付回调成功。但边界条件和异常路径严重缺失。

真实案例: 一个项目让AI生成了120条测试用例、3000行UI自动化脚本。上线后一小时,大量用户无法完成订单支付。排查发现:AI生成的用例漏了订单金额为0.01元的边界值支付时网络中断重试这两个关键场景。

另一个典型:一个支付功能的需求文档15页,AI生成了300条用例。Review时发现——80%是“正常流程”的重复变体(“用户A支付成功”“用户B支付成功”),边界条件严重缺失(并发支付、网络中断、金额精度),还有大量用例依赖不存在的测试数据(“使用已过期的优惠券”,但系统根本没有优惠券功能)。

避坑方法: 不要让AI“批量生成”,让它“精准补全”。先用工具分析现有用例库,找出真正的覆盖盲区,再让AI针对盲区生成用例。

坑五:幻觉——AI“编”出根本不存在的接口和数据

AI在没有明确约束时,会生成“看起来合理”的内容,而非“实际有用”的用例。它会凭空编造接口假设错误的数据结构引用不存在的业务规则

真实案例: 用AI生成50条测试用例,其中有8条需要修正。三种典型问题:AI“编”了一个不存在的接口(/api/v1/inventory/adjust);隐性业务规则它不知道(“VIP用户不受库存上限限制”只存在于产品经理的脑子里);返回结构假设错了(预期用error字段,实际返回的是message字段)。

避坑方法: 把隐性规则写进文档。哪怕只是一句“VIP用户不受库存上限限制”,写进去,AI就能覆盖到。AI的用例设计能力很强,但它强在“翻译”,不强在“补充”。

坑六:生成和质检混在一起,AI既当运动员又当裁判

这是最容易被忽略但影响最大的坑。

同一个AI模型,既生成代码,又生成测试。 模型基于对需求的某种理解生成代码,然后基于同样的理解生成测试。如果最初的假设是错的,代码和测试会共享同一个盲区

真实案例: 一个函数错误地给每个求和结果加了1,但AI生成的测试套件却验证了这个错误行为——因为测试和代码来自同一个“大脑”,它只会验证自己认为对的东西。

避坑方法: 让不同的AI生成代码和测试,或者用独立的测试框架来评估AI生成的测试。AI不能给自己批改作业。

坑七:把“生成”当成“质检”,验证成本一分没降

这是所有坑的“根因”。

AI把“生成”的成本打到了接近零,但“验证”的成本,一分钱没降。以前一个开发一天写500行代码,他自己至少读过每一行。现在AI一天给他5000行,他还是一个人,还是那双眼睛。

真实数据: 拿一套电商项目的需求文档让AI批量生成用例,几分钟出了两三百条,格式工整、字段齐全。然后逐条质量评审——**261条用例里,能直接用的只有26.4%**,一半以上要人工改,还有两成干脆是错的。预期结果写着“页面展示正确”,提示信息是一对空引号,标题说测A功能、步骤里跑的却是B。

避坑方法: 产出进流程前,必须过一道质检。质检本身也要标准化——用维度、用指标、用checklist,别靠手感review。

最后

AI的错误和人的错误不是一个物种。 人会犯懒,会漏写边界,这些毛病测试摸得很熟。AI的错误是幻觉,是自信满满地编一个不存在的接口字段,是用一本正经的语气写错业务逻辑。人的错误会心虚,AI的错误永远理直气壮

这七个坑,踩过三个以上的团队不在少数。但坑不可怕,可怕的是不知道自己在坑里。

AI把“生成”的成本打到了接近零,但“验证”的成本,一分钱没降。

你的不可替代性,不在你会用多少个AI工具,而在你能看出AI生成的东西哪里不对

下次你用AI生成测试用例的时候,别只看覆盖率。问自己一句:

“这11个测试全过了,但线上会崩在哪里?”

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。