2026年4月3日,把这些年做软测攒下来的东西整理了一遍,发现每次被人问到“软件测试到底要学什么”时,我都要重复讲一长串。今天干脆把它写成一份清单式笔记,把我自己用过的、面试时被问到的、带新人时反复强调的内容全部摆出来。这份笔记是写给两类人看的:刚准备入行软测、正在纠结从哪下手的零基础学习者,以及学了一段时间但知识体系还是一团散沙的“半成品测开”。
很多人会把软测理解成“点点点”,觉得只要会玩手机、会用电脑就能干。但真进了项目里你会发现,测试工程师要做的事情远不止是找Bug。你需要懂需求分析、会写测试用例、能操作数据库验证数据、能写脚本做自动化回归,还得在团队里把缺陷沟通清楚。这份清单不会跟你扯虚的,每一条都是实际工作里绕不开的能力项,同时也会把我自己在GitHub上扒项目、刷面试题、转行学习时踩过的坑一并讲明白。看完之后你至少能回答两个问题:我该学什么?学了之后去哪里练手?
1. 软测必学清单打底:先搞懂这几大块
如果把软测的知识体系比作一棵树,那么测试基础理论是根,编程、数据库、Linux这些是养分,自动化测试是枝干,业务理解力和沟通能力是果实。缺了任何一环,树都长不好。很多人一上来就急着学工具,Selenium还没跑通就想着写框架,这是典型的顺序搞反。工具随时可以换,但底层的测试思维和分析能力才是你吃饭的本事。
1.1 测试基础理论:用例设计方法决定你的下限
第一块必须吃透的是测试理论,特别是测试用例设计方法。这是你进入公司后第一周就要用的东西,也是面试的时候最容易翻车的地方。
常见的测试用例设计方法包括等价类划分、边界值分析、场景法、错误推测法、因果图法。很多新手觉得这些是过时的教科书内容,实际工作中没人用。这么说吧:等价类和边界值,我在真实项目里每天都在用。比如一个输入框要求“密码长度为6到16位”,等价类就是把这所有输入分成有效等价类(6到16位的任意字符)和无效等价类(小于6位、大于16位)。边界值则是在这个基础上专门去测5、6、16、17这几个数字,因为经验告诉我们,bug大概率藏在边界上。
除了设计方法,你还得知道一条完整的测试用例包含哪些要素。很多新手写的用例就是一个“测试步骤+预期结果”,真拿给开发看,开发会一脸懵。一个标准的用例需要有用例编号、所属模块、用例标题、前置条件、测试数据、操作步骤、预期结果、优先级。不要小看优先级这个字段,我见过很多初入职场的测试把所有用例都标成高优先级,结果评审的时候被开发怼得无话可说。建议每个模块的用例,高优先级控制在20%以内。
缺陷管理也是理论基础的重要一环。你需要会写一份合格的Bug报告,包含Bug标题、复现步骤、实际结果、预期结果、环境信息、截图视频、严重程度和优先级。记住一个核心判断标准:你写的Bug报告,要能让人不看你的解释也能复现。很多新人写的Bug描述只有“页面报错”四个字,开发来问你在哪个页面、什么数据、点了哪里,你又答不上来。这种Bug最后大概率会被打回,白白浪费来回沟通的时间。
1.2 编程、数据库、Linux:工具储备决定你的效率
第二块就是工具储备。我强烈建议把Python作为入门语言,因为语法简单、测试生态完善,无论是做接口自动化用requests,还是做UI自动化用Selenium和Playwright,资源都很丰富。很多初学者在这里会犯一个致命错误——把Python当成后端开发来学,啃完了整本《Python编程从入门到实践》、学完面向对象、学完装饰器再回头学测试,结果发现用不上多少,反而被绕晕了。正确思路是:在测试实战中学Python,先把列表、字典、循环、函数、文件操作、异常处理、类的基础结构学会,然后直接写自动化脚本,用到什么补什么。我跟你说,我见过最快入门的例子,一个月就能写出可运行的接口自动化用例,而他那一个月在培训机构里只学了“Python基础语法”。
数据库是第二个重头戏。测试工作中至少有30%以上的时间是在跟数据库打交道。做一个注册功能,前端填完信息点提交,你要确认信息是不是真的落库了。做一个订单功能,你要下单、支付、退款,每一步后端的金额和状态字段都要去数据库里查验。这时候你就需要会使用SQL,至少掌握这些:SELECT查询、WHERE条件过滤、ORDER BY排序、GROUP BY分组、JOIN多表关联、UPDATE更新数据,以及DELETE FROM删除数据(慎用!)。很多人面试的时候说自己“熟悉MySQL”,结果面试官让现场写一条关联查询就卡住了。我给你一个建议,去本地装一个MySQL或者直接用SQLite,造几张表,模拟电商的“用户表、订单表、商品表”,每天写十条查询练习,一周就能上手。
Linux命令是第三个基本功。虽然现在很多公司用Windows做开发机,但服务器百分之九十九是Linux。日志排查、环境部署、服务启停,全依赖Linux基础。你需要掌握这些高频命令:cd、ls、cat、tail -f(实时查看日志,测试排查问题的时候用得出神入化)、grep(过滤日志关键词)、ps和top(查看进程和CPU内存)、netstat -tunlp(查端口占用),以及curl(命令行接口请求)。这里有个贼实用的场景:线上环境报Bug了,测试环境复现不出来,你拿着运维给的服务器权限,登上去用tail -f 日志文件 | grep "订单号",几秒钟就能定位到报错信息。这套操作看起来不难,但很多人就是没练过,导致面试时一问就露馅,或者进了项目组后被开发拉着一起排查问题,站在旁边连命令都不会敲,非常尴尬。
1.3 自动化方向:接口自动化和UI自动化怎么选
自动化测试是软测进阶的必经之路,但很多人分不清接口自动化和UI自动化的区别,这是一个大坑。
接口自动化测试是直接对后端API发起HTTP请求,验证接口的响应数据、状态码、业务逻辑是否正确。它执行速度快、稳定性高、维护成本低。在一个迭代节奏快的互联网项目里,接口自动化是投入产出比最高的自动化形式。学了Python之后,你用requests库发送GET和POST请求,配合pytest框架管理用例,再用Allure生成测试报告,一套最基础的接口自动化能力就成形了。这套组合也是目前招聘市场上需求量最大的技能组合之一。
UI自动化测试是用Selenium或Playwright驱动浏览器,模拟用户点击按钮、输入文本、选择下拉框等操作,来验证页面的视觉和交互表现。它的优势是更贴近真实用户视角,但代价是执行慢、环境依赖多、页面元素一变就可能挂。很多人学了一两个月Selenium之后发现代码写得很熟练,到了真实项目里却很难快速落地,原因就在这里——业务页面变化太频繁,UI用例维护成本高。所以我建议:新手入行,优先把接口自动化作为重点突破方向,UI自动化了解原理、能写脚本就够了。这个选择直接决定了你简历上“自动化测试能力”这一栏的含金量。
2. 在GitHub上找软测项目的实操路径
接下来重点写一下如何在GitHub上找软测项目,这是最近我被问得最多的一个问题,没有之一。很多学习者的困境是:理论看了一堆,代码也敲了几段,但就是不知道自己做的这些练习在真实项目里怎么落地。问就是“我只做过Demo”,简历上写着“熟悉接口自动化测试”,结果一个拿得出手的真实项目都讲不出来。GitHub就是破局的地方。
2.1 为什么GitHub比教程视频更能练出真本事
教程视频的核心功能是“演示”,它会把一切准备好、引导你一步步走通。这种模式有两个问题:一是你很容易产生虚假的成就感,跟着视频跑通了一个全流程就觉得掌握了;二是视频里的代码是别人封装好的,你没有经历真实世界的夹缝——见不到版本兼容问题、碰不到历史遗留烂代码、感受不到设计一个测试方案时的取舍。
GitHub上的开源项目恰恰能补上这些盲区。你去读一个真实项目的测试目录,会发现测试用例并不是按照“登录”“支付”“购物车”这样的模块整齐划分的,它们散落在各个服务里面,命名方式也千奇百怪,有的项目中测试和被测代码融在一起。你需要自己去理清楚这些测试是怎么组织、怎么命名、怎么实现数据隔离的。这个过程非常像实习第一天接手一个老项目,看到一堆代码无从下手,逼着自己去读、去猜、去跑,这种能力是视频永远教不会的。而且开源项目的Issue区和Pull Request区有大量的真实讨论,你能看到其他人是怎么报告Bug、怎么走代码评审流程的,这些东西在培训机构里永远接触不到。
2.2 关键词、Topics和筛选条件的具体组合
GitHub的搜索能力非常强,直接用搜索框输关键词就行,问题在于很多人搜出来的结果都是同一个类型,看不到多元的项目形态。我给你一套我实测过的组合拳。
第一步,用关键词搜索找基础。光搜“software testing”会搜出一大堆理论仓库,很多都是人家整理的链接大全。这时候可以把关键词组合得更细例子:
python pytest api testing selenium page object 接口自动化 测试框架 python第二步,用Topics标签找到高质量集合。GitHub有一个Topics机制,把同一个主题的项目聚合在一起。直接在Topics页面浏览这几组标签:automation-testing、test-automation、sqa、software-testing、quality-assurance。这里面的项目通常质量比较好,维护也活跃。
第三步,用Filters做精细筛选。比如在搜索结果页面点“Language: Python”,再按“Most starred”排序,就能把最热门的Python测试工具和项目都捞出来。如果想要新项目,就按“Recently updated”排序。我个人最常用的筛选条件是:
| 筛选维度 | 具体操作 | 目的 |
|---|---|---|
| 语言 | Python / Java / JavaScript | 匹配自己的技术栈 |
| Stars数 | stars:>500 | 过滤掉无人问津的仓库 |
| 更新时间 | pushed:>2025-01-01 | 只看活跃项目,避免一进去就是一堆历史遗留问题 |
| License | 选MIT / Apache-2.0 | 确保可以放心学习甚至复用代码 |
如果你实在不知道从哪下手,还有个捷径:找“Awesome”系列的列表仓库,比如awesome-testing,这些仓库把测试领域的工具、框架、教程全都按类别列好了,等于有人帮你做了索引,拿到之后按图索骥就行。
2.3 拿到项目后怎么拆,才不会变成“收藏党”
收藏了不叫学习,跑通了才叫入门。很多人点开一个项目,看到README里密密麻麻的英文和一堆文件目录,瞬间劝退。我来拆一拆拿到一个软测项目的操作顺序。
第一步,不要急着读源码,而是先看README和项目的目录结构。先明白这是个什么项目、它要解决什么问题、它使用的技术栈是什么、怎么安装和运行。对于软测项目来说,这一步重点关注它运行需要哪些前置条件,比如Python版本、JDK、Node.js、数据库依赖这些,整理出一张检查清单。
第二步,把项目跑起来。很多开源项目会有现成的测试demo、example或场景样例代码,你先在本地把测试跑通,能看到绿色PASS的结果。这一步的意义在于让你有个具体的环境,后面改代码的时候能立刻看到效果。跑不通是最正常的情况,这时候把报错信息复制到搜索引擎里,十有八九能找到解决方案。
第三步,去读测试用例文件,搞懂三层逻辑:被测代码是干什么的、测试用例是怎么构造的、断言的是期望值还是状态码还是数据库里的记录。我建议你每读一个测试文件,就在本子上用自然语言把它翻译成人话,比如“这个用例是先用POST请求创建一个订单,然后调用支付接口,最后去数据库里查这条订单的状态字段是不是PAID”,翻译一遍之后你才算真的看懂了。
第四步,做一件很多人从头到尾没做过的事——主动破坏代码。把被测程序里某个判断改成相反的,或者把测试数据故意传错,看看测试是不是真的会失败,断言是不是真的会起作用。这个操作能帮你验证这套测试不是摆设,也让你理解“测试是为了发现缺陷而存在的”,而不是为了凑覆盖率数字。
第五步,把一个项目里你学到的测试设计方法搬到自己的练习项目里。你可以挑一个自己熟悉的小系统,比如论坛、博客、待办事项,为它补一套完整的接口测试用例,推到自己的GitHub仓库。这样你的简历上就有了一个“自己写的、可以展示的、有完整用例的项目”,面试官要代码,你直接甩链接。
3. 软测面试题:靠背诵没用,要构建答题框架
聊完GitHub练手,再来说说面试这块。软测面试题的类型总共就那么几大类:基础知识题、用例设计题、自动化原理题、项目经验题、场景追问题。很多新人喜欢直接背面试题库,背了几十道题觉得自己稳了,结果面试官换个角度问一句就崩了。我建议你把面试整体当作一次“测试思维”的展示,而面试题只是你展示能力的载体。下面我按常见题型给你拆一拆答题框架。
3.1 用例设计题:用微信红包把思维模型说清楚
用例设计题是软测面试的头号题型,本质上是考察你的测试思维。你别管面试官最后问的是微信发红包、支付宝转账、登录页面还是ATM取款,答题架构都是一样的。
比如“请设计微信发红包功能的测试用例”。很多人上来就说“红包金额小于0.01不行,大于200不行,抢不到红包会退款”,这种答法叫零散罗列,显得毫无章法。你需要展示的是维度的系统性:
- 功能维度:正常发红包、正常抢红包、红包过期退还、24小时未领取退还余额。
- 异常维度:余额不足、网络中断、重复点击发送、红包被抢完后再点。
- 边界维度:金额为0.01元、金额为200元、人数为1人、人数为上限。
- 兼容维度:iOS/Android、微信不同版本、低内存手机。
- 性能维度:群成员全员同时抢红包。
- 安全维度:抓包修改红包金额(如果是接口测试,这就是个典型的越权风险点)。
你在回答的时候,先说“我会从功能、异常、边界、兼容、性能、安全这几个维度来设计”,然后每个维度举一两个例子,面试官立刻会觉得你有体系,而不是在背网上的标准答案。我见过很多候选人面试时聊到这个题都会卡壳,原因就是他们把它当成了一道孤立的题,而没有建立“测试计划”的全局思维。
3.2 技术原理题:面试官真正想看你的理解深度
技术原理题主要出现在自动化测试方向。比如问Selenium中find_element和find_elements的区别、显式等待和隐式等待的区别、WebDriver的底层工作原理,或者问pytest中fixture的作用和conftest.py的作用。
这些题本身不难,但很多人只会背定义,一追问原理就露馅。我给你举一个最常见的例子:“Selenium的显式等待和隐式等待有什么区别?”标准回答是:隐式等待是设置一个固定的轮询时间,针对全局所有元素;显式等待是针对某个元素设置等待条件和超时时间。但面试官想听到的是,你知道什么时候用哪一个。我的建议是回答的时候补充一个实际场景:页面加载时数据请求慢,它是异步渲染的,顶部Loading转圈了3秒后数据才出来,如果用隐式等待,即使设了20秒也会每条find语句傻等20秒,测试执行时间会爆炸,而用显式等待,配合expected_conditions.element_to_be_clickable,只有特定元素点不了的时候才去等,执行效率高得多。
讲接口自动化时,面试官可能会问“一个完整的接口测试用例包含哪些字段”。这个问题在小公司面试里非常高频。我就直接给一个模板:Method、URL、Headers、Body、前置条件(比如需要登录Token)、预期状态码、响应断言点(字段值、数据库状态)、用例描述。多提“数据库状态”这个词,会让面试官觉得你不是只停留在接口层,而是有全链路验证的意识。
3.3 项目经验题:三句话讲清你做了什么
项目经验相关的问题,也就是“你介绍一下你做的项目”这个经典开头,是决定你能不能拿到Offer的关键一环。很多人的回答是“我做过一个电商项目的测试”,面试官追问“你在里面具体做了什么”,答案就是“我写了测试用例、执行了回归测试、用Postman做了接口测试”。这种回答等于白说,因为没有让面试官感知到你的价值。
我给你一套“三句话框架”:项目背景一句话、我的职责和工作量一句话、项目里最值得讲的一个亮点案例一句话。举个例子:
项目背景:这是一个面向B端客户的订单管理后台,核心流程包括创建订单、审批、物流跟踪、结算。我的职责:我负责订单模块和结算模块的功能测试和接口自动化,手工用例写了200多条,接口自动化用pytest+requests覆盖了核心流程30多条用例,集成到Jenkins每天自动跑。亮点案例:订单结算是金额敏感模块,我在设计测试数据时发现同时查询数据库中的结算记录和Excel导出的汇总表时,会出现一条订单被重复统计的情况,反馈开发后定位是SQL关联查询没有对订单状态加过滤条件,上线后类似问题没有再发生过。
注意亮点案例一定要有“发现问题的过程+定位思路+最终结果”,不要只讲“我发现了一个Bug”。这样讲完之后,面试官大概率会针对这个案例追问几个技术细节,比如你是怎么设计测试数据的、怎么通过数据库验证数据的、自动化用例是怎么组织的。只要前面练过,这些追问就是你的主场。
3.4 高频面试题自测清单
下面这张表是我整理的高频软测面试题方向,你可以拿来当自测清单,一个方向一个方向过。我会给出对应的回答重点,方便你快速定位知识缺口。
| 题目方向 | 考察点 | 答题关键词 |
|---|---|---|
| 你们公司的测试流程 | 对测试流程的理解 | 需求评审→用例评审→冒烟测试→功能测试→回归→上线→线上监控 |
| 什么是Bug的优先级和严重程度 | 缺陷管理基本功 | 优先级是按件紧急性排,严重程度是按影响面排,两者不是一回事 |
| 对接口测试的理解 | 接口测试深度 | 数据传递、状态码、响应校验、事务回滚、接口安全性、幂等性 |
| 如何保证用例覆盖率 | 分析方法论 | 需求拆解、场景矩阵、等价类边界值、结合测试开发评审查漏 |
| 手工测试会被自动化取代吗 | 行业认知与心态 | 手工和自动化各司其职,探索性测试和用户场景价值无法替代 |
| 你做过最难处理的Bug是什么 | 实战能力 | 描述Bug表象→排查过程→Root Cause→验证方案 |
| SQL题:查询连续下单用户 | SQL能力 | 窗口函数、日期排序、关联表查询 |
如果你面试前能把这些方向都用自己的话梳理一遍,基本可以应付绝大多数软测岗位的技术面。我强烈不建议直接背别人的面经,因为面试官只要追问一个细节,背的答案就露馅了。你要做的是把每道题的逻辑理清楚,然后结合自己的练手项目去讲故事。
4. 学习节奏与避坑:三个月从零到可以面试
最后这部分送给正处在迷茫期的零基础同学。软测这个岗位的门槛不像开发那么高,但也绝不意味着随便学学就能进。我见过最快的转行案例是三个月,也见过磨磨蹭蹭学了一年还在原地打转的。差距不在智商,而在学习节奏和方向选择。
4.1 一份可以落地的时间规划
以三个月为一个周期,目标是达到初级测试工程师或测试开发实习生的水平,日程可以这么安排:
第一个月:打基础。前两周集中啃测试理论和测试用例设计,每天至少写十道手工用例练手。后两周学Python基础和SQL基础,Python不要求达到开发水平,但一定要能看懂脚本、能自己写简单的requests请求脚本。这个阶段性价比最高的每日打卡是:一道用例设计题+一条Linux命令+一条SQL查询。
第二个月:上自动化。开始接触pytest框架和requests库,自己搭一套最小可用的接口自动化脚手架。网上有很多优质的开源项目,按照第2章的方式找项目、跑起来、读测试、改成自己的用例。月底的目标是能独立完成一个“登录+核心业务接口”的参数化测试Demo,并生成一份Allure报告。
第三个月:做项目和面经。把前两个月学的东西整合成两个有展示度的项目:一个是手工测试的项目(包含测试计划、用例集、Bug清单),一个是自动化的项目(包含测试代码、README、报告截图)。然后把第3章的面试题按自己的话过一遍,每道题给自己讲五分钟,录下来回听,直到逻辑顺畅为止。
很多人的问题不是不努力,而是每个方向都努力过头,最后全堆在半空。我特别提醒一句:这个阶段“能跑通”比“理解到源码级”重要一百倍,你先成为工具的使用者,再慢慢成为工具的解释者。
4.2 我踩过的坑和给你的建议
如果你只记一条经验,我希望是这一条:软测学习过程中最危险的敌人不是“不会”,而是“懂了但没做过”。我说三个具体的坑,你对照自己看有没有中招。
坑一:只收藏不删减。收藏几百G视频资源,关注几十个公众号,然后每天花时间看各种“速成攻略”,最后真正敲过的代码可能只有Hello World。GitHub上找项目的意义,就在于给你一个机制上的约束——不是看完就完,而是必须跑出一个结果。
坑二:无聊的工具研究得太多。今天研究这个测试平台,明天研究那个抓包工具,工具列表背得滚瓜烂熟,但连一台服务器都没部署过。工具是为了解决问题,不是为了当陈列品。每次想学一个新工具之前,先问自己:我手上有没有一个问题需要它来解,如果答案是“暂时没有”,那就先放一放。
坑三:害怕写复杂的代码。很多人觉得自动化测试需要很强的编程功底,自己只会写点简单脚本不敢碰。我想说,测试自动化代码的核心是“可运行”,不是“优雅”。你写的每一条用例、每一个断言,只要能帮你发现缺陷、守住回归,它就是合格的。等你跑通100条用例以后,自然会想改进代码结构,这是一个水到渠成的过程,不用一开始就自我设限。
最后再分享一个小技巧:学软测一定要建立一个“错题本”,不是记你笔试做错的题,而是记你测试过程中遇到的最奇葩的Bug和排查过程。因为你在GitHub上练手的项目越多、跑通的测试越多,你积累的“Bug手感”就越强,面试时能讲出的故事也就越生动。我当时入行时整理了几十个这种记录,后来每次面试讲到项目亮点都用得上,效果比背十篇面经都好。希望能对正在路上的你有帮助。