尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

自动化越流行,手工测试越值钱:探索性测试与工程实践指南

自动化越流行,手工测试越值钱:探索性测试与工程实践指南 我做了七八年测试最近一年听到最多的问题就是“现在到处都在搞自动化手工测试是不是要凉了”打开招聘软件十个岗位里七个要求会自动化技术社区里刷屏的是pytest、Appium、Playwright连不少刚入行的实习生都在焦虑要不要转岗。这种气氛确实容易让人心慌。但我要说的是自动化越流行手工测试反而越值钱——只是“手工测试”这四个字的含义已经变了它还叫手工测试但做的方法、评判的标准跟十年前完全是两码事。这篇文章就聊聊我对这件事的理解以及这两年我自己团队里实操下来的经验。1. 自动化热潮下手工测试的焦虑从何而来1.1 招聘市场的“自动化崇拜”与真实岗位需求先说说焦虑的源头。你去招聘网站搜测试岗位十有八九的JD里会写“熟悉自动化测试框架”、“掌握接口自动化”、“能独立搭建测试框架”这类要求。再翻翻技术群和论坛讨论的全是Pytest怎么设计固件Appium的定位策略Maestro的录制回放Playwright的自动等待。甚至连“GKD工作模式自动化设置”、“影刀自动化扩展程序下载”这种偏门的工具都被翻了出来给人一种感觉不会自动化不是合格测试。但实际上我做了这么多年团队管理和项目交付可以很负责任地讲一句真正到岗之后手工测试能力依然是绝大多数测试工程师的核心竞争力。自动化测试框架写得再漂亮也只是工具链的一部分。产品上线前的探索性测试、核心业务逻辑的逆向验证、线上问题的快速复现全部都是手工活。JD上写“必须会自动化”更多是招聘方用来过滤简历的粗暴手段而不是说这个岗位每天只需要写脚本。我见过太多简历上写着“精通自动化”实际面试时连一个完整的业务场景都梳理不清楚的候选人。也见过很多“不会写代码”的老测试靠业务敏感度和用例设计能力在团队里站稳脚跟。这里不是要给手工测试辩护而是想先把问题摆正自动化不能替代手工测试就像计算器不能替代心算能力。计算器让你按得更快但如果你不知道算式的方向对不对按得再快也没用。1.2 自动化不是万能的真实落地中的“高成本”与“低收益”同样需要正视的是自动化测试在真实项目里的落地效果远没有招聘文案里写得那么性感。自动化脚本的维护成本高得惊人。一个按钮文案从“立即购买”改成“马上抢购”前端自动化用例就要跟着改后端一个字段名的变更可能让十几个接口用例全部红掉。很多团队所谓的“自动化回归测试”端到端用例的通过率只有60%左右剩下的时间全在修脚本修完脚本再发现是环境问题最后结果还没手工过一遍快。我记得有一回带项目客户端要做一个大型重构UI结构基本全换。自动化框架里的定位器写满了旧控件ID改都来不及改。团队临时把所有人的自动化任务全停下来用两天时间把所有核心流程手工回归了一遍才保证版本能按期提测。如果当时死等自动化脚本改完产品铁定延期。当然我这里没有否定自动化的意思。自动化在稳定回归、性能测试、接口测试、持续集成这些场景里价值巨大。但它的定位是“效率工具”是帮助你把手从重复劳动中解放出来而不是替代你的脑子。既然自动化无法替代人的思考和判断那么手工测试的核心价值——探索性测试、用户视角体验、异常场景构造、业务闭环验证——就永远有生存空间。2. 探索性测试手工测试无法被替代的价值内核2.1 自动化测试的覆盖盲区不仅是“回归工具”要想知道手工测试该往哪里发力就得先看清自动化的盲区在哪里。自动化测试的本质是把已知场景固化成脚本然后反复执行。它擅长的是“已知的已知”——我已经知道这个功能要做什么我把它能跑通的路径写成用例每次发版跑一遍确保没有回归。但软件出问题最怕的是“未知的未知”即那些你以为不会坏、或者你压根没想到的地方坏了。举个例子。电商项目里自动化的接口用例会验证“创建订单-支付-回调”这条链路断言返回码和数据库状态。但手工测试会去考虑支付超时的时候前端页面卡在中间态用户这时候点了返回会产生什么脏数据支付过程中App切到后台再切回来支付状态没有轮询刷新怎么办后端已经扣款了但前端接口失败重试会不会二次扣款这些场景自动化脚本未必覆盖不了但覆盖成本极高而且每次业务规则微调脚本都要跟着改动。真正高效的测试人员是带着这些“坏点子”去手工执行的一边操作一边观察系统反应快速发现这些逻辑空洞。这才是探索性测试的核心价值。从心理学角度看人脑在探索性测试中有一种计算机不具备的能力——启发式联想。看到一个输入框人会自然联想到“如果SQL语句被直接贴进去呢”看到分页器会想“如果同时被两个用户点击呢”这些联想来自你对业务的理解、对真实用户行为的观察不可能靠预先写好的脚本穷举出来。2.2 探索性测试的正确打开方式先有模型再有操作不过我也要泼一盆冷水探索性测试不等于“随便点点”。很多人误以为手工测试就是想到哪点哪这是把自己往低价值区推。真正的探索式测试是有结构、有预谋的。我自己的习惯是拿到一个功能需求先不去打开App而是在白板上画业务流程图数据从哪里来经过哪些状态节点分支条件是什么异常分支在哪里各节点之间的数据约束是什么。先把这个逻辑模型搞清楚再开始动手操作。这个模型就是测试地图每一步点击都是有目标地验证某个假设。实际操作里也可以借助一些轻量技巧。比如用XMind把整个功能拆成节点每个节点下面写正常态、异常态、边界值、用户误操作、权限限制这几个维度每个维度再去补充测试数据。这套方法既可以一个人用也可以拿去做团队评审。我团队里的新人经过两周这种训练用例设计质量基本能超过那些凭感觉点了一年的人。再分享一个案例。有一次我们做一个新的会员积分体系自动化的核心用例都覆盖了“积分增加-兑换-过期清零”。但我手工测试时先造了一笔积分为10的数据去兑换了一个需要12积分的商品再检查兑换失败后积分是否有回滚。这个异常场景自动化和常规手工用例都没有覆盖果然在兑换失败后积分被扣掉却没有恢复一个真正的数据一致性Bug被挖了出来。这种事在自动化脚本横行的时代恰恰是手工测试的不可替代价值。3. 借助自动化工具反向武装手工测试3.1 数据准备用SQL和接口脚本代替手工点击说到手工测试如何“稳住自己”我的另一个建议是不要跟自动化对立而是把自动化工具变成自己的武器。手工测试不是只用手指点点点聪明的做法是哪里重复就用脚本解决哪里把精力留给真正需要思考的场景。最常见的一个痛点是测试数据准备。以前我要准备一套支付测试环境的数据需要在页面上注册、登录、绑卡、充值、下单光走完这些流程就得十分钟期间还有可能被验证码卡住。后来我学乖了直接在数据库中写SQL初始化数据或者调用已经有的事务型接口用Postman批量请求把测试数据一次准备好。五分钟的重复劳动直接压缩到三十秒。具体一点比如要测一个订单列表的搜索功能核心数据条件是订单状态、金额区间、下单时间。我可以直接在数据库里UPDATE几条订单记录的status字段把它们改成我需要覆盖的状态再INSERT几条金额不同的订单用来验证金额筛选逻辑。这种操作方式手工测试速度瞬间翻倍。如果你对SQL不熟也可以用Python写个小脚本调用项目已有的内部接口通过接口来造数据。很多系统后端都有测试数据构造接口只是大家没用起来。我在团队里专门维护了一套“测试数据工厂”有现成的Python脚本和SQL片段任何人要测哪个模块直接去脚本目录里挑不属于自己写的也不妨碍效率提升。3.2 抓包与故障注入用Charles/Fiddler补足异常场景另一个手工测试很容易忽略的工具是网络抓包工具比如Charles、Fiddler。它的价值不只是“看接口返回”而是能主动改造请求和响应帮你构造自动化脚本很难模拟的异常场景。比如你要测试App的弱网场景页面在弱网环境下会显示什么文案接口超时会自动重试吗用户在网络恢复后能不能继续操作如果靠手工操作你很难精准复现“3G网络30%丢包”的效果但用Charles的Throttle功能可以很方便地设置网速和延迟模拟出接近真实弱网的效果。再比如你想测试某个接口返回500或返回超时前端是否做了容错处理。正常测试环境下后端接口一般是好的你等不到它自己出错。有了抓包工具你可以在Charles里直接Breakpoint拦截请求把响应内容改成500、改成空值、改成字段缺失看前端会不会崩溃。这种场景自动化测试脚本通常不屑于覆盖手工测试却可以精准命中。我还习惯于在测试过程中把每次请求的响应时间记录下来看看哪些接口拖慢了整体体验。有一次我就靠Charles发现列表页每次都联调了十几个埋点统计接口数据量倒不大但网络链接建立的时间累积起来很可观最后推动研发做了接口合并页面加载速度提升了近一倍。这种“顺藤摸瓜”的排查思路只有手工测试在真实操作中才有机会发现。3.3 半自动化回归把重复劳动交给脚本把大脑留给思考刚刚提到影刀自动化、Windows自动化这些词其实在PC端自动化办公领域这些工具完全可以用来辅助手工测试。我团队有个同事接手一个老项目的冒烟测试每次要启动服务、导入配置、点击特定菜单、核对数据。他把这套动作用影刀录制了下来每天早上上班点击运行脚本自动完成环境准备和冒烟检查他只需要看最终报告。这本质上是一种“半自动化回归”。类似的事情还有很多比如用Python写个脚本批量修改配置文件、批量替换测试数据里的手机号、定时清理测试环境里的脏数据。这些工作都不是测试的核心但特别耗时而且容易因为人为疏漏出错。用RPA工具或脚本把这些烦琐操作“接管”之后手工测试人员才有时间去做探索性测试、做需求分析、做风险评估。很多人在“要不要学自动化”这件事上钻了牛角尖觉得要么就全自动要么就纯手工。其实最优解是“半自动化”——用工具解决机械劳动用大脑解决复杂判断。我甚至见过一个测试老哥用AutoIt写了个Windows窗口自动化脚本专门处理测试环境登录时弹出的各种安全认证弹窗省掉了全组人每天反复输入账号密码的重复劳动。这种人自动化并没有抢走他的饭碗反而让他的价值更高了。4. 从“执行者”到“设计者”手工测试人员的思维升级4.1 测试设计需求拆解与用例架构能力手工测试如果想稳住自己最核心的转变不是学几门脚本语言而是从“测试执行者”变成“测试设计者”。执行是被动的你只是在基于别人设计好的用例跑腿设计是主动的你告诉团队“这个需求应该怎么测才会有价值”。怎么提升设计能力我建议从需求文档拆解开始。拿到需求先不要着急写用例而是先把需求里的业务规则一条一条摘出来翻译成“系统应该怎么做”和“系统不应该怎么做”。每个业务规则对应一组正常用例和一组反向用例。然后把规则与规则之间的交互关系走一遍找出冲突点和依赖点。这一层思考做完你的用例已经从“功能点罗列”升级成了“业务逻辑覆盖”。再往上走可以学着画业务流程图和数据流图理解系统的状态流转。比如一个工单系统它的核心模型无非是“创建-处理-完成-关闭”这几个状态但状态之间有哪些合法流转、哪些非法流转、哪些需要在特定权限下才能流转这就是用例设计的深度。你把这张状态图吃透了设计的用例直接可以拿去指导开发写代码这种测试人员谁会说是“点点点”我面试测试的时候很喜欢问一个问题“如果让你测试一个搜索框你会怎么测”大多数候选人答输入关键词点搜索看结果。少数人会答要区分搜索的数据来源是MySQL还是Elasticsearch要测搜索结果排序与相关性要用不同的搜索语法要做错误处理。这种差异的本质就是执行者与设计者的差异。后者在任何时候都不会被工具替代。4.2 缺陷定位从报告问题到诊断根因手工测试提升价值的另一条路是学会缺陷定位。以前我们报Bug经典写法是“打开页面点按钮页面白屏浏览器版本Chrome 120”。研发看到这种Bug单还得自己花大量时间去排查是前端问题还是后端问题是环境问题还是代码问题。这是典型的被动式测试。主动式的测试是你在提交Bug单之前先自己做一些初步诊断。打开浏览器调试工具看看控制台有没有报错Network里对应接口是404还是500如果条件允许再查一下服务端日志看后端有没有打印异常堆栈。如果你能把这个诊断结论写进Bug单——“打开页面点按钮前端控制台报XXX错误Network中创建订单接口返回500服务端日志显示空指针异常”——开发拿到手几乎可以跳过前20分钟的排查直接定位到代码行效率飙升。这种能力壁垒很高吗并不高。会看浏览器F12、会看一份API文档、会翻一下日志文件只要有心两三个月就能练出来。但它带来的价值提升非常明显——你会从一个“信息搬运工”变成一个“问题分析师”。我见过不少测试同事就是因为Bug单写得又准又深被产品线和研发团队点名要人。强调一下定位能力的前提你仍然需要手工测试去触发问题、复现问题、验证修复。这就说明自动化越多越需要有人能在复杂的系统交互中快速定位问题而这个“快速”靠的是人的场景理解力和技术嗅觉不是脚本。4.3 沟通壁垒用开发听得懂的语言描述风险第三个容易被忽略的能力是沟通。手工测试人员是产品经理、研发、运维、运营这几个角色之间距离最近的位置。你说什么话用什么方式说出来直接影响整个团队对质量风险的认知。有经验的测试会分清楚“Bug”和“风险”的区别Bug是已经发生的错误风险是虽然没发生但随时可能爆发的问题。你在测试过程中发现某段逻辑很脆弱、某个接口缺少超时处理、某个页面在高数据量下可能卡顿这些都应该用“风险”的方式上报让研发提前重视而不是等线上爆了再说。和研发沟通时我也学会了一个原则先给结论再给路径。不要在群里甩一堆截图和日志然后说“这里有问题”而是直接说“创建订单接口在库存不足时返回了成功码但数据库没有扣减库存怀疑事务未回滚截图和日志如下”。这种沟通方式让研发觉得你是一个能帮他们省时间的搭档而不是一个只会找茬的监督员。手工测试的价值有一部分就藏在这种沟通的颗粒度里。自动化的测试报告是结构化的但人跟人之间的高效协作靠的还是经验和语言的转化能力。这也是当代手工测试“稳住自己”的重要支点之一。5. 未来已来手工测试人员如何抓住AI与智能测试的机会5.1 AI自动化办公与本地部署工具的新风口最近这一年“AI自动化办公”的热度可以说是一波接一波。本地部署AI视频生成、AI辅助自动化漏洞挖掘、AI自动化测试各种新名词层出不穷。很多测试小伙伴又开始慌AI都能生成测试用例了还要手工测试干嘛我的观察是AI确实改变了测试行业的作业方式但反而再一次印证了手工测试思考能力的重要性。AI可以帮你生成一堆测试数据、帮你写一个基础脚本、帮你整理一份报告但它不知道你的业务核心是什么不知道用户最看重哪个功能不知道哪些场景属于高风险场景。这些业务判断、优先级判断依然需要资深手工测试人员的经验输入。举个例子用AI辅助编写接口自动化测试用例它可以根据接口文档生成正常入参和边界值但业务里的“金额不能为负数”这种规则它未必能从接口文档里读出来需要测试人员把这条业务规则提炼出来喂给它。AI是一个强大的副驾驶但你得知道车要往哪里开。所以我对团队里建议很明确不要拒绝AI工具也不要盲目迷信AI工具。花点时间去试试那些AI辅助测试平台、AI生成脚本工具把它们当作扩大产出效率的杠杆但同时保持对产品业务本质的钻研那才是你的根。掌握AI就像掌握自动化测试框架一样是时代发给你的一件新装备但你的核心技术依然是“判断力”和“业务理解力”。我甚至见过有测试同事用本地部署的开源大模型搭了一个“测试场景生成助手”把业务规则输入进去辅助生成正则表达式和边界值列表效果相当不错。5.2 我的建议打好手工底子再谈技术栈进阶最后分享一下我个人对测试职业路径的看法。如果你现在还是一个测试新手我的建议是先别急着扎进自动化脚本的深水区先把手工测试的基本功打扎实。用三个月时间系统地学一学用例设计方法——等价类、边界值、因果图、场景法练一练探索性测试的思考路径学一学如何做需求拆解和风险评估。这些是软件测试的内功不管以后技术怎么演进内功不过关招式再花哨也白搭。有一定经验之后再根据自己的方向补充自动化工具链做业务测试的学Pytest和Appium用来写一些辅助测试的脚本做接口测试的学习Java或Python的接口自动化框架对PC工具流程有兴趣的玩玩影刀、Windows自动化这类RPA工具。到这一步你已经不是一个纯手工测试而是一个“拥有自动化效率的手工测试设计者”这种复合型角色在市场上相当稀缺。至于网上那些“自动化测试全替代手工测试”的论调个人判断是大概率不会出现。自动化会不断吞噬掉那些重复的、可编码的测试场景把手工测试推向更复杂、更需要判断力的领域。你面对的软件系统越来越智能化、交互形式越来越多样反而需要更多的人从真实用户视角去发现问题。这两年我带过的测试团队里最受欢迎的人不是某个自动化架构大牛而是那个能最快发现“支付失败后数据状态异常”的人能准确描述“这个功能在低端机上会不会卡顿风险”的人。他们用的依然是手工测试的看家本领——只是加持了数据准备脚本、抓包工具、AI辅助这些新时代的装备。我个人在实际操作中的体会是与其纠结自己是不是手工测试、要不要转自动化不如多花点时间把手头的业务理解透把每个异常场景的可能性都摸透。手工测试的“手”其实只是一个入口真正值钱的是背后那个不断思考、不断探索的脑子。只要这个能力还在就不会因为自动化横行而丢掉自己的位置。
返回列表