ARTICLE · 1233084
AI 能提高测试效率,但谁来判断“测得对”?
当用例、脚本和报告都能快速生成,测试的关键问题反而更清楚了:我们究竟在验证什么,又凭什么相信结果?
一笔原价 100 元的订单,优惠后实付 80 元。顾客退掉其中原价 60 元的商品,系统退了 60 元,接口返回成功,自动化测试也全部通过。
看起来很顺利。但如果业务约定“优惠按商品原价比例分摊,退款不重新计算满减”,这件商品实际应该退 48 元。系统多退了 12 元,测试却没有报警。
问题未必出在代码有没有写断言,而在于:断言检查的是“请求成功”,还是“业务结果正确”?
AI 可以更快地产出测试材料。测试工程师要把材料变成可信的质量证据。
说明:下文三个场景均为教学示例,不是真实事故或实测数据;金额、时限和处理规则都是明确假设,不能直接套用到其他系统。
01 / 优惠退款:先定义“正确”,再生成用例
把刚才的订单拆开看,规则就不再抽象。
已确认的示例规则
商品 A:60 元;商品 B:40 元。使用店铺优惠券减 20 元,整单实付 80 元。
不涉及运费、积分或其他优惠;优惠按商品原价比例分摊;退货不重算满减门槛,也不返券。
按这套规则,A 分摊的优惠为 20 × 60 ÷ 100=12 元,所以退 A 应退 60-12=48 元;B 分摊 8 元优惠,可退 32 元。全部退完,退款合计为 80 元,而不是 100 元。
这一步叫建立测试判定依据(test oracle):用什么规则、计算或可信结果,判断系统做得对不对。这里的依据是已经确认的优惠分摊规则,而不是 AI 猜出的退款政策,也不是把系统自己的计算再调用一遍。
如果把这个任务交给 AI,它能做什么?
在规则明确后,AI 可以扩展“先退 A、先退 B、分次退款、重复申请”等用例,起草接口请求和断言,也能帮忙检查计算过程。它同样可以提出需求疑点,并不只会生成基础场景。
测试工程师必须确认什么?
“退款后是否重新判断满减门槛”“优惠券是否退回”“分摊出现分币尾差时如何处理”,都需要与产品、业务和财务确认。规则不同,正确金额就可能不同;没有确认的预期,不能因为 AI 写得很完整,就直接拿来验收。
验证时,也不能只断言 HTTP 状态码。对于“退款已完成”,还要核对退款单、支付渠道结果和账务记录中的金额是否都为 48 元,并在约定的业务时限内一致。对于“退款已受理”,则应按异步契约继续观察终态,不能提前当成完成。
这个案例的分水岭:不是谁能多写几十条用例,而是谁先把“应该退多少、依据是什么、到哪里取证”讲清楚。
02 / 超时重试:请求失败,不等于业务没发生
再看一笔独立的、实付 100 元的订单。顾客申请退款 30 元,退款业务标识为 R001。页面转了一会儿,提示“请求超时”。顾客担心没有提交成功,于是又点了一次。
这时,问题不再是“退款接口能不能返回成功”,而是下面这段时序:
第一步:支付渠道已经受理 R001,但响应在返回途中丢失。
第二步:客户端按约定,用同一业务标识 R001 重试。
第三步:支付渠道发来成功通知,稍后又重复通知一次。
应有的业务结果:R001 最终只产生一次 30 元的成功退款和对应账务效果,而不是退两次。
这里要验证的是幂等性:同一业务操作被重复提交或处理时,不产生重复的业务效果。这不等于网络请求只允许出现一次,也不等于整个链路天然实现“只执行一次”。
专业的测试设计,需要主动构造“渠道已受理、本地却超时”的故障点,再模拟重试、重复通知和乱序通知;随后检查退款流水、状态流转与账务记录。只测一次顺畅的退款流程,看不到这类风险。
AI 可以起草故障注入脚本、构造重复事件,也可以按业务标识整理日志。但工程师需要确认:业务标识的作用域是什么,重试是否复用它,重复事件怎样判定,哪些状态允许转移。日志里出现两次“成功”可能只是重复投递;是否重复退款,要用支付和账务证据判断。
如果测试时间只剩半天,相比颜色、文案等低影响变更,资金重复流出通常更值得优先验证。这个取舍属于风险导向测试:综合失效可能性、业务影响和变更暴露面分配精力,而不是让每个功能平均分到相同数量的用例。
再追问一步:在一笔全新、尚未退款的 100 元订单上,两个不同退款业务单同时申请 60 元和 50 元,累计成功退款不能超过 100 元。至于冲突如何返回、在途退款是否占用额度,必须按确认后的契约设计断言,不能由 AI 自行补成规则。
这个案例的分水岭:不是看见一条错误日志就宣布找到根因,而是能否构造关键时序、识别资金约束,并证明没有重复业务效果。
03 / 批量导入:接口成功,用户就成功了吗?
运营人员上传 2,000 条客户资料。接口返回 202,页面显示“提交成功”。如果脚本只检查返回码,这条自动化用例已经通过。
但 202 通常只表示请求被接受处理,并不证明数据已经导入完成。对这名运营人员而言,真正的任务是:知道哪些数据导入了、哪些失败了,并能修正后继续完成工作。
本案例约定
允许部分成功;任务应在 2 分钟内给出终态;失败行需提供可定位的原因,并允许修正后单独重试。这个时限只是示例验收标准,不是所有导入系统的通用要求。
在干净的测试环境中,构造 2,000 条互不重复的合成记录,其中 1,970 条有效、30 条仅缺少必填字段,再检查三件事:
结果对不对:终态应为部分成功,成功 1,970 条、失败 30 条,合计 2,000 条;实际入库结果与任务统计一致。按约定时限观察终态,而不是固定等几秒就赌它完成了。
用户能不能恢复:失败明细要对应到正确的原始行,并说明缺失字段;修正后的 30 条可以重试,不能让已经成功的 1,970 条被再次导入。
风险有没有被如实说明:如果本轮没有验证“关闭页面后继续查询任务”,报告就应写“未执行”,不能因为上传接口通过,就写成“批量导入功能验证完成”。
AI 可以生成这组测试数据,按任务标识聚合日志,并整理“记录校验失败”和“任务执行异常”两类线索。工程师仍要核对失败原因、数据落地结果与用户恢复路径,避免把“任务已结束”误报成“全部导入成功”。
这个案例的分水岭:不是接口有没有响应,而是用户的业务任务能否完成;完成不了时,能否看懂问题、恢复操作且不损坏已有数据。
04 / 让 AI 进入测试流程,而不是跳过判断
三个案例背后,是同一条工作链:理解需求 → 分析风险 → 设计方案 → 获取证据 → 沟通剩余风险。AI 可以参与每一环,但每一环都需要明确的验收标准和责任人。
先给规则,不只给一句需求。把已确认规则、接口契约、历史缺陷与待确认问题分开输入。对优惠分摊、退款状态和导入时限等关键规则,要求 AI 标注来源;缺信息就列疑问,不要猜预期。
先审方案,再批量写脚本。金额分摊适合在单元或组件层覆盖边界;超时与重试需要集成层验证依赖交互;用户导入和恢复路径再用少量端到端用例验证。不要把所有组合都堆进 UI 自动化。
不仅让脚本跑绿,也证明它能报错。在隔离的测试环境中,用可控桩或已知缺陷返回错误退款金额、重复事件或错误导入统计,确认关键断言确实会失败。测试代码和业务实现若照抄同一错误假设,完全可能“一起算错、一起通过”。
让报告绑定证据,不绑定语气。AI 可以汇总执行记录,但必须区分通过、失败、阻塞和未执行,说明环境、版本、数据、证据与未覆盖风险。“未发现问题”不等于“没有问题”,更不等于可以替负责人批准上线。
一段更有用的协作指令
“请依据下方已确认规则,生成退款测试设计。每个场景写清:风险、规则来源、前置数据、步骤、可验证断言和取证位置。将推断与事实分开;缺少规则时列为待确认问题,不自行补齐。先按资金损失和状态一致性风险排序,再建议适合的测试层级。”
这类指令不能保证 AI 一定正确,却能让输出更容易审查。人工审查也不应被神化为绝对可靠:关键规则要交叉确认,断言要有独立依据,高风险结果要有可追溯证据。
数据边界同样重要:只使用组织批准的 AI 工具和数据处理方式;客户资料、生产日志、代码与凭据须遵守最小必要、脱敏、访问和留存要求。可复用的示例,应优先采用合成数据。
05 / 提效要算总账,价值要看风险
“几秒生成 100 条用例”只说明产出速度,不说明用例有效,更不能直接推出质量提高。
评估 AI 是否真正提效,需要把上下文准备、生成、审查、修正、执行和维护一起计入。在任务规模与风险相近的前提下,看总耗时是否下降,同时观察关键风险的验证证据、误报和维护成本,以及遗漏缺陷的严重程度与发现阶段。
生成测试用例、编写部分自动化、分析日志、整理报告,都是 AI 可以辅助的具体任务。理解业务需求、识别业务风险、设计验证方案、核实复杂逻辑,以及判断用户任务是否真正完成,仍需要测试工程师与业务、产品和研发共同完成。
这并不否认 AI 在复杂分析中的辅助能力,也不是承诺某个岗位永远不变。而是说:一个看似可信的生成结果,不能替代经过确认的规则、真实的执行证据和明确的责任。质量由团队共同建设,发布由授权负责人结合风险作出决策。















































































