尧图精选

测试基础思维:从用例设计到测试金字塔的实战指南

🕒 发布时间:2026/9/9 15:24:47 📁 来源:尧图网络
做了这么多年测试我一直觉得最被低估的其实不是各种自动化框架和压测工具而是那些最基础的测试思维。标题里写的是测试基础但我想聊的并不是课本目录里那种测试的定义和分类而是真正让一个人从会点鼠标走向会做测试的那些底层认知。这篇文章适合刚入行的测试新人也适合写了几年用例但总觉得自己在走流程的同学我会把测试到底在测什么、用例该怎么设计、流程上哪些环节最容易翻车、以及一些常规文档里不会写的心得全部摊开讲清楚。1. 测试到底在测什么先把找bug这件事想透很多人对测试的第一反应是找bug这话没错但如果你的测试思维停留在找到bug就完成任务那你大概率会陷入一种状态——每天点点点报几个bug然后陷入无尽的回归。我见过不少刚入行的测试同学工作一两年后开始迷茫觉得自己做的都是重复劳动。这个问题的根源往往就是没有把测试的目标想透。1.1 测试的本质是收集信息而不是证明没问题我特别喜欢一个说法测试工程师真正的工作是用尽可能低的信息成本去获取关于产品质量的高置信度判断。你以为测试是在证明软件没问题其实不是。测试是在不断提出如果这里出了问题会怎样的假设然后通过执行去验证或者推翻它。每一个测试用例本质上都是一次信息采集动作。想明白这一点很多事情就会发生变化。比如当开发跟你说这个改动就加了一个字段不会有影响你不会因为这句话就放松警惕因为你知道这条信息不可靠你需要自己设计用例去验证。再比如当你发现一个输入框最多能输入100个字符这个需求时你会本能地想到那101个字符会怎样因为这就是在采集边界信息。1.2 质量不是测出来的但测试能暴露质量风险质量是设计出来的不是测出来的这句话在测试圈已经快被说烂了。但在实际工作中我发现很多人只是把这句话当成一句口号并没有真正理解它对测试工作的指导意义。如果质量是设计出来的那测试的作用是什么测试的作用是在设计和实现之间建立一道反馈环。你的用例跑出来的每一个失败结果都是在告诉团队这个设计在实现层面存在偏差。所以测试人员不要觉得自己处在价值链的末端恰恰相反你是离真实运行状态最近的那个人。我在团队里经常跟我的人说当你拿到一个需求的时候不要急着去写用例先问自己三个问题——这个功能到底是给谁用的它在什么场景下会被触发如果它挂掉了影响面有多大这三个问题想清楚你写出来的用例质量会直接上升一个档次。因为这背后的逻辑就是测试的有效性取决于你对业务和用户的理解深度而不是你写了多少条用例。2. 测试金字塔和分层策略别再一股脑全做手工回归很多测试新手对自动化测试有一种执念觉得用了自动化就高级了手工测试就是低端活。这个认知真的很误事。实际上一个健康的测试体系从来不是靠某一种测试方式撑起来的而是靠合理的分层配置。2.1 金字塔模型到底在说什么测试金字塔是Mike Cohn提出的经典模型从上到下大致是UI测试、接口/服务测试、单元测试。金字塔强调的是越底层测试的执行成本越低反馈速度越快稳定性越高越顶层虽然越接近真实用户行为但执行成本高、运行慢、维护脆弱。我在实际项目中见过最典型的反例是团队把所有关键流程都做成了UI自动化回归结果每次跑全量用例要四五个小时而且稍微有个弹窗变化就挂一片。这种倒金字塔结构维护成本直接把团队拖垮。正确的做法应该是核心逻辑尽量下沉到单元层和接口层去验证UI层只覆盖最关键的端到端用户旅程。层级执行速度维护成本定位UI层测试慢高验证关键用户主流程接口层测试快中覆盖业务逻辑和异常场景单元层测试最快较低覆盖函数/模块级逻辑2.2 手工测试和自动化从来不是替代关系在测试基础这个主题里我特别想纠正一个观念自动化不是为了取代手工而是为了把手从重复劳动中解放出来让你有精力去做那些机器做不了的事情比如探索性测试、用户体验判断、复杂业务场景的推演。我的建议是凡是执行路径明确、预期结果可穷举、回归频率高的用例优先考虑自动化凡是需要人的主观判断、依赖视觉/听觉/交互体验、场景非常规的测试保留手工执行。这两者之间不是一个选一个的问题而是怎么搭配的问题。3. 测试用例设计从凭感觉点到有套路地测用例设计是整个测试基础里含金量最高的部分。很多新手拿到一个功能第一反应是开启用户模式像平时用App那样从头到尾点一遍觉得能用就行。这种测法不能说完全无效但覆盖度完全看运气。真正专业的做法是有一套方法论在背后支撑。3.1 等价类划分和边界值分析最基础也最实用等价类划分的思路是把输入域划分成若干个类别每个类别里取一个有代表性的值去测试即可。因为同一个类别里的数据程序的处理路径大概率是一样的没必要一个个全测。比如一个输入框要求年龄为1到150的整数那你可以划分出有效等价类1到150之间的整数和若干无效等价类小于1、大于150、非数字、负数等再从每个等价类里挑一个代表值。边界值分析则是等价类划分的黄金搭档。大量实践经验表明bug最容易出现在边界附近。比如1到150这个范围0、1、2、149、150、151这六个边界相关的值往往能测出最多问题。为什么因为开发写判断逻辑时最容易犯的错误就是大于等于还是大于搞混、少写一个等号之类的。我有一个习惯写用例的时候专门在用例标题里标注边界值或者等价类-有效/无效这样的标签。这样做的好处是当用例执行失败时你可以立刻定位到这个用例是在验证什么类型的逻辑问题而不是在茫茫用例里猜测设计意图。3.2 场景法和错误推测把用例写出故事感除了按照输入域来设计用例还有一种非常贴近实际使用的方式叫场景法。场景法是从用户的操作路径出发把关键业务场景串起来测。比如一个电商下单流程会包括用户浏览商品→加入购物车→结算→支付→查看订单这样一条完整链路。场景法设计的用例最大的价值在于它验证的不只是某个功能点而是多个模块之间的协作是否正确。错误推测法则更依赖经验。老测试和新测试在这一点上差距特别明显。老测试拿到一个需求会本能地想到这个文件上传功能如果我传一个0字节的文件会怎样如果文件名是中文呢如果网络中断呢这些如果都来自过去踩过的坑。对这个方法我唯一的建议就是多记录、多复盘把自己在项目里遇到过的典型bug整理成一份checklist下次测相似功能时直接对照。3.3 优先级设计用例也要分三六九等很多测试新人容易犯一个毛病把所有用例都当成一样的优先级执行的时候舍不得跳过任何一条结果就是时间永远不够。真正合理的做法是把用例按P0、P1、P2分级P0核心主流程一旦出问题功能基本不可用阻塞发布P1重要功能出了问题影响体验但不至于完全不可用P2边缘场景、体验优化类问题当时间紧张需要砍测试范围时砍的一定是先砍P2再砍P1P0绝对不能动。这个优先级设计不是写在文档里好看的而是要在每次排期冲突的时候真正起作用。4. 从需求评审到上线验收一条完整的测试链路测试基础里最容易被人忽略的其实是测试流程。很多新人以为测试就是拿到一个版本然后开始测但真正影响测试质量的往往是在动手执行之前的那些环节。4.1 需求评审不是去旁听的是去找茬的测试人员参加需求评审最重要的事情是试图理解需求并寻找需求中不明确、不合理、自相矛盾的地方。开发在评审时关注的是怎么实现产品关注的是业务逻辑是否走通而测试应该关注什么样的结果算对。当需求里出现等情况大致尽快这种模糊词或者连边界条件都没定义清楚的时候就是测试该发挥价值的地方。我在评审中最常问的问题是如果用户在步骤A和步骤B之间退出了下次进来应该是什么状态这个问题看起来简单但往往能引出产品经理自己都没想清楚的逻辑漏洞。这类漏洞如果等到提测之后才暴露返工成本会高很多。4.2 测试计划、用例评审和准入准出条件测试计划不只是写一份文档交差它是在回答几个核心问题要测哪些内容、不测哪些内容、用什么方式测、需要多少资源、什么时候完成、风险在哪里。其中准入准出条件是我觉得最重要但最容易被形式化的部分。准入条件指的是什么样的版本才能进入测试最基本的要求是主流程可跑通、冒烟测试通过、开发自测完成。如果没有准入机制测试人员很容易陷入天天在测一个根本没法看的半成品的泥潭。准出条件则是定义什么样的状态可以放行上线通常是P0全部通过、P1通过率达到XX%、遗留问题有明确评估结论。4.3 回归测试的节奏感回归测试是测试流程里最容易被低估的一环。很多人觉得回归就是再跑一遍以前的用例但项目一多、版本迭代一快全量回归根本跑不过来。这里就需要一个策略判断哪些用例是每次都要跑的核心主流程哪些用例是这次改动可能影响的模块需要重点回归的哪些用例可以放到之后的版本再验证。我通常会维护一份核心回归用例集这个用例集会随着项目演进不断调整。每次发版前先跑这份核心集再根据本次改动波及范围补一份增量回归清单。这样既控制了时间成本又基本保证不会有漏网之鱼。5. 那些没人告诉你的事测试人员最容易踩的坑这部分我想聊一些不在教科书里、但在实际工作中几乎每个人都会遇到的坑。这些坑我自己也都踩过写出来希望能帮大家少走点弯路。5.1 环境差异的坑明明我本地没问题的幽灵bug这是测试界最经典的事件之一开发在本地测试通过代码一到测试环境就挂或者测试环境复现不了一到生产环境就出问题。出现这类问题的根源往往是环境的配置差异比如数据库版本不一致、中间件参数不同、依赖包版本漂移、环境变量缺失。应对这类问题的策略首先是把环境对齐这件事规范化。测试环境必须跟生产环境保持尽可能一致的配置基线做不到也要把差异列出来逐项评估风险。其次是当出现本地无法复现的bug时不要轻易放弃尽量尝试拿生产/预发的数据进行复现或者让开发在对应环境打日志。5.2 测试数据管理一测就脏一脏就乱测试数据混乱是我在团队里见到的最普遍的问题。一个账号被反复用了很多次数据状态已经不可控导致用例执行结果不稳定昨天能跑过今天却挂了而且怎么排查都找不到代码层面的问题。好的做法是建立测试数据准备的规范和工具。比如每次测试前用一条SQL或者API把环境重置到已知状态或者准备一套数据工厂按需生成指定状态的测试数据。千万不要省这个时间你有多少时间花在跟脏数据纠缠上就有多少时间可以从效率里补回来。5.3 只测开心路径你测的是理想用户走的是现实我在评审新人用例时最常看到的场景就是一个登录功能用例写的是输入正确的用户名和密码登录成功然后完了。我每次都会追问密码错了呢用户名不存在呢账号被锁定了呢网络超时呢连续点击登录按钮呢cookie失效呢用户永远不会按照产品经理设想的完美路径去操作。真正暴露严重问题的往往都是异常路径。所以写用例时建议遵循一个原则每条主流程用例至少配两条异常分支用例。这个习惯养成了你的用例覆盖度会明显和其他人拉开差距。5.4 探索性测试的价值别让脚本框死你的手测试执行到后期用例已经跑完好几轮了bug也修得差不多了这时候很多人就松懈了。但我反而是最建议在此时做一轮探索性测试的。因为你已经对系统足够熟悉又不必拘泥于用例步骤可以更自由地去尝试那些看起来不太对劲的操作。探索性测试不是瞎点它是带着假设去验证比如这个页面我快速切换Tab会不会状态错乱我断网再恢复会是什么状态我中途杀掉App再重启呢。这些操作很少会出现在常规用例里但往往能发现那些真实用户才会遇到的严重问题。6. 给新手的一点点个人建议测试的进阶不是工具是思维最后这部分我想聊一些更软的东西。测试这个岗位入门门槛看起来不高但想做好、做深其实非常考验人的综合能力。我一直觉得测试工程师的进阶路径不是从手工到自动化到性能测试这样的工具链升级而是思维方式的不断升级。6.1 保持挑刺的职业敏感做测试久了我发现一个很有意思的现象很多优秀的测试工程师在生活中也特别擅长发现bug。比如点外卖的时候会发现App里某个按钮的位置不合理刷短视频的时候会注意到某个功能在不同手机上显示不一致。这不是职业病而是你已经在用一种测试思维去看世界了。这种敏感度恰恰是做好测试最宝贵的特质。6.2 学会跟开发和产品对齐语言测试工程师在团队里常常扮演夹心饼干的角色前面是产品后面是开发。很多冲突的根源其实是沟通语言不一致。开发说这个bug不是bug是需求如此产品说这个需求当时不是这样定的然后测试夹在中间不知所措。我的经验是遇到这种分歧不要急着争论先回到需求文档和原始证据上。把操作步骤、预期结果、实际结果、关联需求文档全部整理清楚再去找相关方对齐。事实摆在那里讨论才能有焦点。另外bug描述一定要清晰可复现写得乱七八糟的bug单不仅浪费开发时间也会消耗别人对你的信任。6.3 测试基础不是终点是每一次决策的地基写到这里其实我想说的核心就一句话测试基础里的那些东西——需求理解、用例设计、流程规范、风险意识——不是考试要背的知识点而是你每次做测试决策时都需要依赖的地基。比如你写自动化脚本时判断哪些用例值得自动化底层逻辑是测试分层和成本意识你评估一个版本能不能上线时底层逻辑是优先级和风险控制你面对一个改了一行代码的改动时下意识想到去测相关联的模块底层逻辑是场景法和影响面分析。这些能力全都长在测试基础这棵树上。我个人的体会是无论以后转去做测试开发、质量架构还是转产品、转项目管理这些基础的测试思维都会一直跟着你。它带给你的不只是找bug的技能更是一套如何通过结构化的方式理解复杂系统的思维方式。所以别觉得基础的东西太简单真正把基础吃透的人写出来的用例、做的测试决策、沟通的方式是会明显不一样的。最后分享一个小习惯建议你给自己维护一份个人测试军规把你踩过的坑、总结出的经验、常用的测试思路都记进去定期回顾更新。这份文档会是你工作几年后最值钱的东西之一。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →