☰
自动化越流行,手工测试越值钱:探索性测试与工程实践指南
2026/10/6 4:36:52 网站建设 项目流程

我做了七八年测试,最近一年听到最多的问题就是:“现在到处都在搞自动化,手工测试是不是要凉了?”打开招聘软件,十个岗位里七个要求会自动化,技术社区里刷屏的是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辅助这些新时代的装备。

我个人在实际操作中的体会是,与其纠结自己是不是手工测试、要不要转自动化,不如多花点时间把手头的业务理解透,把每个异常场景的可能性都摸透。手工测试的“手”,其实只是一个入口,真正值钱的是背后那个不断思考、不断探索的脑子。只要这个能力还在,就不会因为自动化横行而丢掉自己的位置。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询