软件测试学什么?怎么学?薪资多少?我用一万字给你讲清楚
本文适合:零基础想入门软件测试的人、刚转行不知道学什么的测试新人。
内容包括:行业背景、薪资行情、核心概念、工具清单、学习路线、练手项目、面试题。
阅读时间:约15分钟。建议先收藏,再按学习计划分阶段回看。
一、软件测试是什么时候“火”的?
软件测试在国内经历了三个阶段,你可以理解为:从“不存在”到“附属品”,再到“独立刚需”。
第一阶段:2000年之前,“不存在”
国内软件产业刚起步,开发人员自己写完自己测,没有专职测试。软件质量完全依赖个人能力,Bug 靠用户反馈。
第二阶段:2000-2010年,“开始出现”
随着互联网兴起、外资软件企业进入中国,微软、IBM 这类公司带来了成熟的软件工程体系。专职测试岗位开始出现,但地位不高,常被视为“开发做不了的人才去做测试”。薪资普遍低于开发。
第三阶段:2010年至今,“真正火起来”
移动互联网爆发是分水岭。几个关键因素叠加:
-
App 竞争白热化:一款 App 如果频繁崩溃、闪退,用户会秒删差评。质量直接决定生死。
-
敏捷开发普及:迭代速度从半年一个大版本变成每周甚至每天更新。没有测试保障,上线就是赌博。
-
安全事件频发:数据泄露、支付漏洞让企业意识到,测试不只是“点一点”,是风险防控。
-
测试技术升级:自动化测试、性能测试、安全测试的出现,让测试从“手工劳动”升级为“技术工种”。薪资开始追平甚至超过部分开发岗位。
结论:软件测试真正“火”起来,是在 2010 年之后。现在不是最热的风口期,但需求量稳定、不可替代,是进入 IT 行业的稳健入口之一。
二、薪资如何?参考招聘软件
仅作参考,具体视公司和行业而定
按经验分层:
| 级别 | 年限 | 一线城市薪资 | 二线城市薪资 | 典型要求 |
|---|---|---|---|---|
| 初级功能测试 | 0-1年 | 5-8K | 3.5-5.5K | 会写用例、执行测试、提 Bug |
| 中高级功能测试 | 1-3年 | 8-15K | 5.5-10K | 独立负责模块,熟悉业务流程 |
| 自动化/性能测试 | 2-5年 | 15-25K | 10-18K | 掌握 Python/Java,会用 Selenium/Jmeter |
| 测试开发 | 3-5年 | 20-35K | 15-25K | 能搭建测试框架,写测试工具 |
| 测试经理/架构师 | 5年以上 | 25-40K+ | 20-35K | 团队管理,质量体系建设 |
按技能方向分层(同是 3 年经验):
-
只会手工功能测试:10-15K
-
会接口测试 + 数据库:12-18K
-
会自动化 + 性能:15-22K
-
测试开发:18-30K
与开发岗位对比参考(3年经验、一线城市):
-
Java 开发:18-30K
-
前端开发:15-25K
-
功能+自动化测试:15-22K
-
测试开发:18-30K
三、什么是软件测试?软件测试分为哪些?
一句话定义:
软件测试,就是用人工或自动的方式,去验证软件“有没有按预期工作”,并在这个过程中,找出它可能存在的缺陷。
这定义里有三个关键点:
-
验证“有没有按预期工作”:你拿到一个软件,得先搞清楚它应该是什么样。比如一个登录功能,你的预期是:正确账号密码能进,错误密码不让进。测试就是把软件的实际行为,和这个预期做对比。
-
找出缺陷:当实际行为和预期不一致时,你就找到了一个“Bug”。比如输入正确密码,系统却报错“服务器异常”——这就是缺陷。测试的使命之一,就是在用户发现之前,自己先把这些坑填上。
-
提供质量信息:这是测试最容易被忽视的价值。你测完一个功能后,不只是告诉团队“这里有Bug”,更重要的是告诉大家:这个软件现在到底是什么状态?能不能发布?还有哪些风险?你做的是用数据和事实,为决策提供依据。
用一句更直白的话说:
软件测试,就是替用户把关,替团队探路,替老板降低风险。
软件测试的划分方式有很多种。对于初学者来说,最重要的是沿着两条主线去理解:
-
第一条线:按“测试技术”划分(功能 vs 非功能)——回答“我测的是什么”。
-
第二条线:按“测试阶段”划分(单元-集成-系统-验收)——回答“我在什么时间点测”。
下面分别展开。
第一条线:按测试技术划分
这是最基础的划分,也是你进入这个行业后,日常工作里不断在切换的两个维度。
1. 功能测试
-
测什么:软件“做没做对”。
-
核心问题:这个功能,在做了正确的操作时,得到正确的结果了吗?在做了错误的操作时,能正确地处理吗?
-
举例:登录功能。测正确的账号密码能不能登进去;测错误的密码会不会被拦下;测不填密码直接点登录,会不会有提示。
-
一句话:功能测试,就是去验证“软件该做的事做了,不该做的事没做”。
功能测试是整个测试体系的地基。一个软件要是连功能都没做对,谈其他都太早。
2. 非功能测试
-
测什么:软件“做得好不好”。
-
核心问题:除了功能正确,软件在性能、安全、兼容性、易用性上,是否达到了要求?
-
它包括很多子类:
| 子类 | 核心问题 | 举例 |
|---|---|---|
| 性能测试 | 软件在不同压力下,反应还快不快、稳不稳? | 1000个人同时下单,系统会不会崩溃? |
| 安全测试 | 软件能否抵御恶意攻击? | 黑客能不能通过输入框,偷走服务器的数据? |
| 兼容性测试 | 软件在不同环境下,能不能正常用? | 在苹果和安卓手机上,页面会不会错乱? |
| 易用性测试 | 用户用起来顺手吗? | 老人能看懂这个界面,并自己完成操作吗? |
-
一句话:功能测试是“能用”,非功能测试是“好用、安全、稳定”。
第二条线:按测试阶段划分
这是你看一个软件从开发到上线,测试是怎么一步步参与的。
1. 单元测试
-
谁来做:通常是开发人员自己。
-
测什么:软件最小的组成单元,比如一个函数、一段代码逻辑。
-
目的:确保每个“零件”本身没有缺陷,从最底层保证质量。
-
理解它:就像检查每一块砖烧得好不好。
2. 集成测试
-
谁来做:开发或测试。
-
测什么:把多个单元组合起来,检查它们之间的接口和交互。
-
目的:确保“零件”之间的连接没问题。
-
理解它:检查砖和砖之间的水泥抹匀了没。
3. 系统测试
-
谁来做:这是专业测试人员的主战场。
-
测什么:把整个软件当成一个完整的系统,全面验证它的功能和各项非功能属性。
-
目的:确保整个系统符合需求规格说明。本文前面讲的功能测试和非功能测试,大部分就发生在这个阶段。
-
理解它:房子盖好了,开始检查每间屋子、每根水管、每条电线是否都正常工作。
4. 验收测试
-
谁来做:用户或产品方代表。
-
测什么:从用户的真实使用场景出发,验收整个软件。
-
目的:确定系统是否满足业务需求,可以正式交付。
-
理解它:请业主来看房,试试开关、摸摸台面。这里不满意就改,满意了就交房。
四、软件测试常用工具介绍
学习顺序建议:Postman → 禅道 → F12开发者工具 → Playwright → JMeter
一、功能测试相关
1. 浏览器自带的开发者工具(F12)
这是最基础、最常用的工具,不需要安装。打开任何浏览器,按F12就能调出来。
-
有什么用:看网页的代码结构、网络请求、控制台错误信息。
-
典型场景:一个按钮点了没反应,按F12看控制台有没有报错信息。
-
一句话:功能测试的起点。你每天都会用到它。
2. XMind / 流程图工具
这不是测试工具,但功能测试离不开它。
-
有什么用:画业务流程、理清测试思路。比如一个下单流程:选商品→加购物车→结算→支付,每个节点都可以展开成测试用例。
-
一句话:在动手测之前,先把脑子里的逻辑画出来。
二、接口测试工具
Postman(最推荐,新手第一站)
-
有什么用:向服务器发送请求,看它返回什么数据。不需要界面,直接测试“墙里的水管”。
-
典型场景:你注册一个账号,用 Postman 查一下这个账号有没有被正确存进数据库。
-
为什么先学它:很多界面上的 Bug,根源在接口。学会了 Postman,你就不再是“表面点点点”。
-
一句话:接口测试的事实标准。新手入门必学。
Apifox / Apipost(国产替代)
功能和 Postman 类似,但更贴近国内团队的使用习惯,集成了接口文档管理、Mock 数据等功能。可以先从 Postman 上手,之后再看这些。
三、性能测试工具
JMeter(最主流、免费开源)
-
有什么用:模拟大量用户同时访问系统,测试系统扛不扛得住。
-
典型场景:模拟1000个用户同时登录,看系统响应时间是否变慢、会不会崩溃。
-
一句话:性能测试的标配。面试问“你会性能测试吗”,说的通常就是它。
LoadRunner(商业版,企业用得多)
功能比 JMeter 更强,但收费且复杂。很多大公司还在用。初期不需要碰,知道就行。
四、自动化测试工具
1. Selenium(Web自动化,最经典)
-
有什么用:模拟用户在浏览器里的操作——点击按钮、输入文字、翻页。让代码帮你重复执行。
-
典型场景:回归测试。每次发版前,让 Selenium 自动跑一遍核心流程(登录→下单→支付),人工只需要看结果。
-
一句话:Web自动化的鼻祖。学自动化,通常从它开始。
2. Playwright(新一代,更现代)
微软开发的,比 Selenium 更快、更稳定、更简单。如果你还没开始学,可以直接学这个。
-
一句话:Web自动化的未来之星。新手建议直接上手它。
3. Appium(移动端自动化)
-
有什么用:和 Selenium 类似,但测的是手机 App,不是网页。
-
一句话:移动端自动化绕不开它。
五、抓包工具
Charles / Fiddler
-
有什么用:截获你手机或电脑发出的网络请求。能看到请求的内容、服务器返回了什么。
-
典型场景:你用 App 下单,但一直提示“系统繁忙”。打开抓包工具,看请求发出去没有、服务器返回的错误信息是什么。
-
一句话:当你需要看到“数据在链路上到底发生了什么”,用抓包工具。
六、缺陷管理工具
禅道(国内最普及,开源免费)
-
有什么用:记录你发现的 Bug,指派给开发,跟踪修复进度。还集成了项目管理、需求管理等功能。
-
一句话:国内中小公司测试团队的标配。
Jira(国际主流,大厂用得多)
功能更强大,配置更灵活。外企、大厂、敏捷团队用得最多。
一句话:如果你去外企面试,会操作 Jira 是加分项。
五、零基础学习计划(仅做参考)
第一阶段:理论基础与用例设计(第1-4周)
目标:弄懂“什么是软件测试”,并掌握最核心的测试用例设计方法。
学习内容:
-
软件测试基础(第1周)
-
核心概念:软件测试的定义、目的、原则(如“测试无法穷尽”)。
-
测试分类:按技术分(功能、性能、安全),按阶段分(单元、集成、系统、验收)。
-
学习资源:你之前理解的那些概念,以及任何一本《软件测试基础》教材的前几章。
-
-
测试用例设计方法(第2-4周)
这是功能测试的核心技能。你需要彻底掌握以下方法,并大量练习:-
等价类划分法:分类,挑代表。这是基本功。
-
边界值分析法:专攻临界点,Bug最爱藏身的地方。
-
场景法:模拟用户的操作流程。
-
错误推测法:凭经验和直觉猜哪里可能出问题。
-
本周实践:
-
找你电脑上的计算器、登录框或任何一个小功能,为它设计一份包含10-15条的测试用例集。用Excel表格写下来,格式参考:
用例编号 | 测试点 | 前置条件 | 操作步骤 | 期望结果。
第二阶段:手工测试实战与缺陷管理(第5-8周)
目标:把设计好的用例执行起来,学会提交一份合格的Bug报告。
学习内容:
-
Web测试基础(第5-6周)
-
了解一个网站的基本构成,学会按F12打开浏览器的开发者工具,看看网页背后的代码和网络请求。
-
掌握常见的Web测试点:链接、表单、Cookie、页面元素布局等。
-
-
缺陷管理与禅道(第7-8周)
-
核心概念:什么是Bug的生命周期(发现->提交->修复->验证->关闭)。
-
工具实操:在自己电脑上部署或直接使用在线版禅道。学会如何清晰地描述一个Bug:环境、操作步骤、预期结果、实际结果、截图附件,一个都不能少。
-
本周实践:
-
找一个开源网站(如某商城Demo站)进行测试,把发现的Bug完整地提交到禅道上。记录至少5个不同严重等级的Bug。这是你未来面试时的重要“作品”。
第三阶段:技术进阶(第9-12周)
目标:告别“纯手工”,掌握接口测试和数据库基础,开始向技术型测试迈进。
学习内容:
-
接口测试与Postman(第9-10周)
-
核心概念:什么是接口,为什么测接口。
-
工具实操:学习使用Postman发送GET/POST请求,查看服务器返回的JSON数据。学会做简单的接口断言。
-
-
数据库基础与SQL(第11-12周)
-
核心概念:数据库的基本概念,表、行、列。
-
工具实操:安装一个MySQL数据库,用Navicat等可视化工具连接。学会最核心的SQL语句:
SELECT,INSERT,UPDATE,DELETE,尤其是带条件的查询WHERE。
-
本周实践:
-
在你之前找的开源网站上,用Postman去请求它的登录、注册等接口,并查看返回的数据结构。同时,去数据库里查一下这个刚刚注册的账号是否被成功写入。
推荐资料
-
入门书籍:《软件测试的艺术》(经典,薄而精悍)
-
在线教程:慕课网、B站搜索“软件测试基础”,找播放量最高的免费课程。
-
练习网站:找一些提供测试练习的开源项目或Demo网站,比如CureMuj,用真实网站练手。
六、GitHub实战项目推荐
一、手工功能测试练手项目
1. OrangeHRM
-
GitHub地址:搜索
orangehrm/orangehrm -
测试什么:一个开源的人力资源管理系统,包含考勤、招聘、绩效、请假等功能模块。
-
为什么适合你:
-
功能丰富:员工管理、考勤、请假审批……这些都是真实的HR业务流程,比登录框复杂得多。
-
有在线Demo:官网
opensource-demo.orangehrmlive.com可以直接访问,不需要自己部署。你直接用浏览器打开,就能开始测。 -
业务逻辑清晰:谁都能理解“请假审批”这个流程。你可以完整地测试:员工提交请假单→主管审批→系统记录的全过程。
-
-
你可以做什么:
-
为“员工信息管理”模块设计一套完整的测试用例。
-
测边界值:员工姓名最多多少字符?手机号栏输字母会怎样?
-
测场景:一个员工被删除后,他提交的请假单还能不能查到?
-
把发现的Bug记录到禅道里。
-
2. OpenCart
-
GitHub地址:搜索
opencart/opencart -
测试什么:一个完整的开源电商系统,有前台商品展示、购物车、支付,也有后台的商品管理、订单管理。
-
为什么适合你:
-
电商是测试练手的绝佳场景:业务逻辑复杂且贴近真实用户。商品属性(颜色、尺码)、优惠券、满减、运费计算……有大量场景可以测。
-
前后台联动:测完前台用户下单,再去后台看订单状态是否同步更新。
-
也有在线Demo:OpenCart官网有演示站点,前台后台都可以访问。
-
-
你可以做什么:
-
用“边界-异常-组合”那套方法,专门测它的购物车。比如:加一件商品,改数量为负数;加了库存只有3件的商品,反复加4件去结算。
-
专门测优惠券:过期优惠券能用吗?满减条件差1块钱会怎样?
-
这是你练习“接口测试”时最好的素材——前端下单,后台查数据库看订单对不对。
-
二、API接口测试练手项目
3. Restful-Booker
-
GitHub地址:搜索
mwinteringham/restful-booker -
测试什么:一个专门为测试人员练习接口测试而设计的酒店预订系统API。作者就是做测试培训的。
-
为什么适合你:
-
专为测试而生:这个项目的目的就是让你练习接口测试。它有完整的API文档,清晰列出了创建预订、获取预订、更新预订、删除预订等接口。
-
有部署好的公共版本:
restful-booker.herokuapp.com,你直接用Postman请求这个地址就能开始练。 -
内置验证机制:你需要先请求一个Token,才能做更新和删除操作,这能让你实践Postman的认证设置。
-
-
你可以做什么:
-
用Postman逐个调用它的接口,验证返回的数据结构是否正确。
-
测试异常:不传Token直接删预订,看返回什么错误码。
-
实践边界值:订房日期早于今天会怎样?住0天会怎样?
-
这是你学完Postman后,第一个应该拿来练手的项目。
-
三、自动化测试练手项目(为以后准备)
4. Swag Labs
-
GitHub地址:搜索
saucelabs-training/demo-java或直接搜 Swag Labs -
测试什么:一个模拟的电商网站,叫Swag Labs。是Sauce Labs公司专门为练习Selenium/Playwright自动化测试而做的。
-
为什么适合你:
-
专为自动化设计:网站结构稳定,不会频繁改版导致脚本失效。
-
有标准用户:网页上直接列出了几种标准账号(标准用户、锁定的用户、问题用户),每种都有预设的Bug等你发现。
-
-
你可以做什么(在你学完Postman、开始学Playwright之后):
-
用Playwright写一个自动登录脚本。
-
写一个自动遍历所有商品、加到购物车、完成下单的脚本。
-
这是你面试时最好的“自动化测试作品”来源。
-
你的上手顺序建议
-
第一周:打开 OrangeHRM 的在线Demo,开始为“员工管理”模块写测试用例。这是你功能测试的练手主战场。
-
第二周:打开 OpenCart 的在线Demo,专门测试它的购物车和优惠券功能。把Bug提交到禅道。
-
第三周起(学完Postman后):在Postman里请求 Restful-Booker 的公共接口,验证返回数据,测试异常场景。
-
一个月后(学自动化时):在Playwright里写脚本,自动化测试 Swag Labs。
这些项目的在线Demo地址,你可以直接复制到浏览器打开。如果遇到某个Demo访问不了,在GitHub上搜项目名,一般都能找到最新的在线地址。
七、一些有趣的面试题
一、经典中的经典
1. 如何测试一个杯子?
这道题几乎成了测试面试的“Hello World”。面试官考察的是你思考的维度。
解题思路框架(用你的“有的放矢”来拆解):
拿到杯子,先别急着说“摔一下看看”。在脑子里迅速建立一个框架:
-
功能测试:它做杯子该做的事吗?
-
能装水吗?能装多少?(容量测试)
-
能保温/保冷吗?(如果是保温杯)
-
水会从杯口以外的其他地方漏出来吗?
-
带杯盖的话,盖上后能完全密封吗?
-
-
易用性测试:它用起来舒服吗?
-
拿在手里,大小、形状、重量合适吗?
-
把手握着舒服吗?不硌手吗?
-
对于老人或小孩,容易抓握吗?
-
-
安全与可靠测试:它会伤害人吗?
-
材质安全吗?装开水会释放有害物质吗?
-
装开水后,杯身会不会烫手?(隔热性)
-
摔到地上会碎吗?碎片是否锋利?
-
如果是玻璃杯,能承受多大的温度骤变而不炸裂?
-
-
边界与极限测试:往极端了想。
-
装满水放进冰箱冷冻层,会冻裂吗?
-
用最大的力去拧杯盖,还能拧开吗?
-
连续开合杯盖一万次,会坏吗?
-
-
兼容性测试:它能和别的东西好好配合吗?
-
能放进常规的汽车杯架里吗?
-
杯口直径兼容咖啡机出水口吗?
-
一句话总结:这道题没有标准答案。你能说出越多的维度,并且每个维度里的测试点越具体、越有逻辑,分数就越高。
二、逻辑与场景题
2. 如何测试一台自动售货机?
这道题考察你把一个复杂系统分解为模块和流程的能力。
解题思路:
把售货机想象成一个系统,分为几个核心模块:
-
支付模块:硬币、纸币、扫码支付、刷卡。每种支付方式都要测:金额正好、金额不足、金额多了找零。假币、损坏的纸币怎么处理?
-
选择与出货模块:选择商品后,商品能准确掉下来吗?如果选了A,掉下来的是B,这是严重Bug。同时选两个商品会怎样?选了一个缺货的商品呢?
-
用户界面与指示:屏幕显示清晰吗?售罄的商品有“已售完”提示吗?钱不够时点购买,会提示“金额不足”吗?
-
异常与容错:出货过程中有人踢了机器一脚会怎样?突然断电了,如果已经扣了钱,恢复供电后会怎么处理?
3. 如何测试一个电梯?
这道题考察的是状态转换和安全性。
解题思路:
电梯是一个典型的状态机,有静止、上行、下行、开门、关门等状态。
-
基本功能:按下按钮,电梯会来吗?会停在正确的楼层吗?门会按时关闭吗?超载会报警并停止运行吗?
-
算法逻辑:这和电梯的调度算法有关。你在10楼按了“上”,同时有人在5楼按了“下”,电梯会先接谁?在上升途中,如果有人按了比当前楼层更高的楼层,电梯会响应吗?
-
安全与异常:门在关闭时被挡住,会自动打开吗?运行时停电了,应急系统会启动吗?下坠时,限速器和安全钳会启动吗?警报按钮和紧急电话是否畅通?
三、白盒与代码测试题
4. 如何测试一个函数 int add(int a, int b)?
这道题看似简单,但考察的是你用等价类和边界值的扎实程度。
解题思路:
你不需要看代码,只需要从输入和输出的角度去分析。
-
等价类:
-
两个正数:
add(1, 2) = 3 -
一正一负:
add(1, -2) = -1 -
两个负数:
add(-1, -2) = -3 -
正数和零:
add(5, 0) = 5 -
负数和零:
add(0, -5) = -5
-
-
边界值测试:这是关键,最见功底。
-
如果
int是32位的,最大值是2,147,483,647,最小值是-2,147,483,648。 -
add(1, 2147483647) = ?(预期:发生上溢出,看函数如何处理) -
add(-1, -2147483648) = ?(预期:发生下溢出) -
add(0, 2147483647) = ?
-
-
性能测试:如果连续调用这个函数100万次,会变慢吗?会内存泄漏吗?
四、开放脑洞题
5. 如何测试“快乐”?
这道题没有标准答案,考察的是你面对一个模糊概念时,如何定义、量化、测试。
解题思路:
先别慌,用“有的放矢”的第一步:先定义“靶子”。
你不能测试“快乐”本身,你只能测试“快乐的表现”。
-
生理指标:快乐时,大脑会分泌多巴胺、血清素,心率可能平稳,嘴角会上扬。可以测这些生理数据。
-
行为指标:快乐时,人会笑,会唱歌,会更愿意帮助别人。可以统计一个人在单位时间内的微笑次数、助人行为次数。
-
主观量表:设计一份科学的问卷,让人给自己1-10分的快乐程度打分。这是心理学常用的方法。
-
反向测试:测试“不快乐”。压力增大、焦虑、抑郁,这些指标的上升,可能意味着“快乐”的下降。
一句话总结:这道题的精髓,在于你敢于去拆解它,并清晰地解释你拆解的逻辑。
你转行测试时最大的困惑是什么?或者你现在正在学哪个工具?欢迎评论区讨论
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)