AI赋能功能测试:测试老王如何手忙脚乱到游刃有余 

0 阅读11分钟

imgs-1

一、手忙脚乱的交付前夜

周五晚上十点,互联无限科技公司的办公区只剩下一排排泛白的灯管。测试老王揉着酸胀的太阳穴,屏幕上密密麻麻的红色FAIL像嘲讽的眼睛。

“老王,支付模块需求有变更,增加了一个分期付的入口,明天封版前用例得补上。”产品经理小鱼的声音从企业微信里传来,还配了个“拜托”的表情。

老王灌了一口凉透的咖啡,点开用例管理平台:登录模块的用例刚写完不到一半,购物车的自动化回归脚本已经因为前端改版挂了一片,压测数据还得手工造百来条……他感觉太阳穴又跳了两下。按照现在的速度,今晚怕是又要和行军床相依为命了。

部门里只有三个测试,应对六个产品线的迭代,每个人都像被抽打的陀螺。老王有时候会想:功能测试干了快十年,怎么反而越过越狼狈?

二、偶然得到的AI锦囊

正当他对着需求文档发呆时,对面工位的自动化测试小陈探过头来:“王哥,你试试把这个需求丢给AI大模型啊,我们组现在用例都靠它出初稿,贼快。”

“就那个聊天机器人?能测出啥?”老王嘴上不屑,心里却有点松动。他见过开发用AI生成代码,但测试……靠谱吗?

小陈直接发来一个对话框链接:“你把需求描述清楚,然后告诉它‘请作为资深测试工程师,设计全面的功能测试用例,包含正向、异常、边界值、安全相关场景,用表格输出’。试试呗,又不花钱。”

老王半信半疑,复制了支付分期付的需求描述,稍作整理:

需求摘要:用户在收银台可选择“分期付”,支持3期、6期、12期,需具备白名单校验,仅白名单用户可见分期付入口。分期费率分别为2.5%、4.5%、8%,每期手续费计入手续费总额,首期还款金额=(本金+总手续费)/期数。用户有未结清逾期订单时不可使用。

他把这段文字粘贴进对话框,并按小陈教的话术补充了要求。

三、用例生成:从磨洋工到一键输出

不到三十秒,AI开始输出一个格式清晰的表格:

老王瞪大了眼睛。遗漏的“绕过前端直接调用接口传入异常分期数”这种测试点,平时他可能要抽半根烟才能想全,AI竟然顺手就列了出来。更妙的是,它还补充了一句:

建议增加并发测试:同一用户短时间内多次下单分期,校验是否会重复生成手续费。

老王心头一热。他立刻对照需求修改了几处术语,把用例复制进平台,整个过程也就十分钟——放往常,从梳理、设计到评审,至少两个小时起步。

他尝到了甜头。

四、日志分析:秒级定位“幽灵”缺陷

用AI输出用例的兴奋还没过,测试环境突然抽风。订单状态流转回调接口一直返回500,开发大刘扫了眼说“可能又是网络抖动,你重试一下”。

重试了三次,问题依旧。老王把Kibana里的错误栈和关键日志片段扔进AI对话框:

2026-05-08 22:34:12.457 ERROR OrderCallbackService - Order no: 20260508223412001, Exception: java.lang.NullPointerException at com.infinity.payment.service.InstallmentService.calc(InstallmentService.java:145)
...
trace_id: abcdef123456, user_id: 88293

他附上提问:“请作为测试专家,根据错误日志推测可能的根因,并提供复现思路和开发排查建议。”

AI思考几秒后回答:

根因推测:NullPointerException 发生在 InstallmentService.calc() 中,大概率是获取分期费率配置时返回了 null。可能原因:1)白名单配置表未包含该 user_id,但请求却进入了分期计算逻辑;2)灰度环境下费率配置遗漏;3)并发场景下配置缓存刷新延迟。
复现建议:用户88293可能不在白名单,却通过分享链接或缓存进入了分期入口,重新执行该用户完整登录到下单流程,强制刷新白名单缓存再试。
排查方向:检查白名单查询接口返回数据,检查 Apollo/Nacos 配置中心是否同步,增加 NPE 时的友好提示而不是直接500。

老王把这段分析截图发到大刘的钉钉上。十分钟后,大刘回复:“牛啊老哥,确实是这个用户的灰度白名单标签丢了,配置中心发布不全。你怎么看出来的?”

老王打了一个“AI侦探”的表情包,没说破。原本这种扯皮至少消耗他半小时,现在AI几十秒就锁定了病灶。他忽然觉得,屏幕背后的那个助手真有点像个资深测试架构师。

五、自动化脚本:告别维护恐惧症

时间指向十一点半,老王还得抢救那批倒下的UI自动化脚本。购物车页面重构后,原来的#buy-button变成了[data-testid="purchase-btn-v2"],十几个用例全军覆没。

以前他会打开浏览器的开发者工具,吭哧吭哧重新抓取,再逐个修改脚本,改完还得担心动态加载的等待时间不够。现在他把新页面的一个元素截图和描述发给AI:

“这是下单按钮,它是 Ant Design 的 Button 组件,文字为‘立即购买’。它在购物车浮层中,浮层为异步渲染。请生成 Playwright 的定位器与等待代码。”

AI返回的结果不仅给出了最佳定位表达式:

const buyBtn = page.locator('button:has-text("立即购买")');
await expect(buyBtn).toBeVisible({ timeout: 10000 });

还主动提醒:“如果同一页面有多个‘立即购买’,可结合浮层容器定位:page.locator('.cart-drawer button:has-text("立即购买")')。”

老王如获至宝,把这段代码复制替换后,点了一下运行——绿了。他顺势把整组手工用例的描述逐一发给AI,让它生成Playwright框架的测试脚本框架,自己只用了二十分钟修修补补,就跑通了全部回归用例。放在以前,这没个半天绝对下不来。

六、数据工厂:要多少造多少

回归跑完,压测数据还没着落。性能测试小龙在群里催:“王哥,我要100个白名单用户,每个用户有不同分期历史和订单状态,最好有逾期、已结清、未激活等各种情况,明天上午十点前。”

老王以前会自己写SQL拼随机数,或者从线上脱敏库慢慢筛选,往往半天就交代了。今晚,他直接把需求描述给AI:

“生成100条用户账号数据,JSON格式,包含字段:手机号、身份证号、姓名、白名单状态、逾期未结清订单数量、最近一笔分期期数。要求覆盖:白名单且无逾期70人,非白名单10人,白名单且有1笔逾期15人,白名单且逾期大于2笔5人。手机号需符合中国运营商规则,身份证需符合校验码逻辑。”

AI噼里啪啦输出JSON,老王用Python脚本验证了一下身份证号校验位,全部合法。他甚至让AI补了一句:“请再生成对应的分期订单还款计划数据,以CSV格式输出,供压测脚本导入。”

凌晨十二点,他把数据包发给小龙,附言:“24K纯造数据流水线,拿去用。”小龙发来一个大拇指。这是老王今天收到的第二个大拇指。

七、探索性测试的奇思妙想

主流程用例写完了,自动化也稳了,老王心里不那么慌了。但他知道,真正容易出事的往往是那些“谁会在结账时来回切换网络”的场景。

他打开AI对话框,问了一句:“我要对分期付功能做探索性测试,请以挑剔用户和恶意攻击者的角度,列举5个多数测试人员会忽略的测试点。”

AI回答:

  1. 网络切换情景:在分期付款确认页,从Wi-Fi切到4G再切回,观察订单状态是否重复创建。

  2. 高频点击:在“确认分期”按钮上快速连击,检查手续费是否被重复计算,接口是否幂等。

  3. 页面跳转中断:选择分期后点击浏览器返回,再重新进入,分期选项是否保持,订单金额是否被篡改。

  4. 时间穿越:修改手机系统时间到验证码有效期边界,或者分期还款日边界,验证逾期判断逻辑。

  5. XSS与金额篡改:通过浏览器控制台修改分期期数参数为3 or 1=1或修改手续费金额为负值,查看后端是否二次校验。

老王看了拍大腿。第4点“时间穿越”和第5点的负值金额篡改,他之前压根没想过。于是他立刻设计了几个手工chartter,在测试环境里一顿操作,果然发现后端对负值手续费的校验存在疏漏,提前拦下了一个P2漏洞。

他把心得记在自己的小本子上: “AI是探索的放大镜,但发现问题的眼睛仍然要属于自己。”

八、回归报告:让数据说话

凌晨一点,最后一轮回归完成。老王需要输出测试报告,但他已经不想再打开Excel画图了。

他把回归测试的简要数据喂给AI:“本次回归涉及功能点12个,执行用例208条,通过率97.6%,失败5条,其中3条为环境问题,2条为新增缺陷(已提交JIRA)。失败用例集中在分期付模块。请生成一份测试总结报告,面向项目经理,包含风险评价和建议,语言简洁。”

AI秒速输出:

版本质量评估报告
总体情况:用例通过率97.6%,高于质量门禁95%的标准。
风险重点:分期付模块存在2个新增缺陷(P2分期金额负值校验遗漏、P3逾期判断受本地时间影响),建议发版前修复P2缺陷,P3可带条件下版本解决。
建议:本次环境稳定性中等,有3例环境导致误报,需协调运维优化测试环境配置。整体质量可接受,建议领导审批发布。

老王把这段话直接粘进邮件,改了一下称呼,发送给了项目经理。关掉电脑时,他瞄了一眼手机,凌晨一点十二分。虽然依然不早,但心里没有了那种被掏空的疲惫感——今晚他更像是驾驭工具,而不是被工作拖拽着走。

九、尾声:老王的新境界

次周版本顺利上线,分期付功能只出现了一个小小的UI错位,并被监控快速修复。部门周会上,测试经理请老王分享“效率提升秘诀”。

老王挠了挠头,打开投影仪,屏幕上只有一行字:

“AI没有取代测试,它只是在帮我扫地、煮饭、洗衣服,让我可以专心当个侦探。”

他解释了如何用AI生成用例、分析日志、造数据、给探索灵感。同事问他:“你不怕AI替代我们吗?”

老王笑了笑:“以前我像在黑暗里捡豆子,现在AI把手电筒递给了我——但决定照哪里、怎么判断豆子能不能吃的,还是我自己。”

会后,他把自己的AI提示词库整理成一个文档,发到了部门群里,标题为:《一个功能测试老兵的AI工具箱》。文档末尾写着:

“送给像我一样,曾经在每个上线前夜手忙脚乱的人。我们不是在学会操作AI,而是在学会如何更体面地守护质量。”

老王锁上屏幕,窗外夕阳正好。今晚,他准备去接女儿放学——已经很久没有在天黑前走出这栋楼了。