零基础学习软件测试
我是计算机专业的学生,也在准备找软件测试方向的岗位。前期查资料、看招聘 JD 的时候,被自动化测试、性能测试、接口测试、持续集成"这些词搞得有点懵,不知道从哪下手。后来自己理了一条路线,按"打基础 → 学核心 → 做项目 → 准备求职"四步走,这篇文章就是把我整理的路线分享出来,每个阶段具体学什么、怎么学、学到什么程度、大概花多久都列清楚,给同样在准备的小伙伴做个参考。也欢迎评论区一起交流进度。
小提示:下面每个阶段都配了思维导图,方便对照自己学到哪了。
目录
软件测试到底是做什么的(先建立世界观)
测试岗位方向与薪资现状
我的学习路线总览(四阶段,一图看懂)
第一阶段:夯实基础(理论 + 用例 + 缺陷 + SQL + Linux,约 3~4 周)
第二阶段:核心技能进阶(Python + 接口测试 + Web 自动化 + 性能入门,约 4~6 周)
第三阶段:项目实战与深化(开源项目 + 完整流程 + 技术栈整合,约 2~3 个月)
第四阶段:求职准备(简历优化 + 面试准备)
我踩过的坑(避坑提醒)
分阶段时间规划表(以每天 2~4 小时为例)
常用工具清单与学习资源
一、软件测试到底是做什么的
一句话:软件测试就是通过人工或自动化的方式,发现软件里的缺陷,评估软件质量,确保产品符合需求的过程。
开发写完的程序,不可能一次就完美——需求可能理解错、边界情况可能没处理、多人协作可能改出兼容问题。测试的价值,就是在这些问题流向用户之前把它拦下来。一个线上 bug 的修复成本,可能是测试阶段发现时的几十倍。
几个必须先懂的核心概念
- 需求:产品经理想让软件做成什么样,是测试的依据。
- 测试用例(Test Case):把"怎么测"写清楚的步骤文档,是测试的执行依据。
- 缺陷 / Bug:实际结果和预期结果不一致的地方。
- 回归测试:修复 bug 或加新功能后,把老功能再测一遍,防止改出新问题。
- 冒烟测试:版本刚出来先快速测一遍核心流程,能跑通再深入测。
- 测试左移 / 右移:左移 = 在需求、设计阶段就介入测试;右移 = 上线后持续监控。现在大厂都在推"测试左移",越早发现问题越便宜。
软件生命周期(SDLC)与测试的关系
需求分析 → 设计 → 编码 → 测试 → 上线 → 运维测试不是最后才做的事,越早发现 bug 越便宜,这也是推崇"测试左移"的原因。
软件质量模型(ISO/IEC 25010)
衡量一个软件"好不好"有几个维度,面试常问,也帮你建立质量观:
- 功能性:软件能不能做该做的事
- 可靠性:出错后能不能恢复
- 易用性:好不好用
- 效率(性能):快不快、占不占资源
- 可维护性 / 可移植性:好不好改、能不能换个环境跑
测试分类(面试常问)
- 按阶段:单元测试、集成测试、系统测试、验收测试
- 按是否看代码:黑盒测试、白盒测试、灰盒测试
- 按是否执行:静态测试(看文档/代码,不跑)、动态测试(跑起来测)
- 按执行方式:手工测试、自动化测试
测试原则(记住几条,显得专业)
- 测试证明缺陷存在,但不能证明没有缺陷
- 尽早测试、频繁测试
- 缺陷聚集(20% 的模块藏着 80% 的 bug,即二八定律)
- 杀虫剂悖论:同一套用例用久了会失效,要不断更新
二、测试有哪些岗位方向
方向 | 做什么 | 入门难度 | 薪资(参考) |
功能测试(手工) | 按用例点功能、提 bug | 低 | 入门级 |
接口测试 | 测前后端数据交互 | 中 | 中 |
自动化测试 | 写脚本替代重复手工 | 中高 | 中高 |
性能测试 | 压测、容量评估 | 高 | 高 |
测试开发 | 开发测试平台和工具 | 高 | 高 |
三、我的学习路线总览(四阶段)
- 第一阶段 夯实基础(3~4 周):测试理论、用例设计、缺陷管理、数据库 SQL、Linux
- 第二阶段 核心进阶(4~6 周):Python、接口测试、Web 自动化、性能入门
- 第三阶段 项目实战(2~3 个月):开源项目练手、走完整测试流程、技术栈整合
- 第四阶段 求职准备:简历优化、面试准备
各阶段时间规划表(以每天 2~4 小时为例)
阶段 | 主要内容 | 预计时长 |
第一阶段 | 测试理论 + 用例设计 + 缺陷管理 + SQL + Linux | 3~4 周 |
第二阶段 | Python + 接口测试 + Web 自动化 + 性能入门 | 4~6 周 |
第三阶段 | 开源项目实战 + 完整流程 + 技术栈整合 | 2~3 个月 |
第四阶段 | 简历优化 + 面试准备 | 持续进行 |
时间紧的话,重点保住用例设计 + 接口测试 + Python + 接口自动化这四项,其它可以边工作边补。
四、第一阶段:夯实基础(约 3~4 周)学什么
这个阶段的目标是建立测试思维,把手工测试需要的技能和工具补齐。我当初心急想直接学自动化,后来发现基础不牢后面很吃力,所以建议先把这块打扎实。
4.1 测试理论基础
要理解软件开发生命周期、测试流程、缺陷生命周期,以及上面列出的测试分类、测试原则和软件质量模型。建议把"单元测试/集成/系统/验收""黑盒/白盒"这几组概念记熟。
4.2 测试用例设计方法
实际工作里用得最多的是黑盒测试方法,重点是等价类划分和边界值分析:
等价类划分:把输入分成几类,每类抽一个代表。分有效等价类(合理输入)和无效等价类(不合理输入)。
例子:用户名要求 6~18 位字母数字 → 有效类
abc123;无效类包括长度不够、超长、含特殊字符、纯中文。边界值分析:错误常发生在边界。对"6~18 位",边界值5、6、18、19都要测。
场景法:按业务流程走,比如登录的正常/异常流程(密码错、账号不存在、验证码错、网络超时)。
因果图 / 判定表:多个输入组合出不同结果时用,例如"订单优惠":会员 + 满减 + 优惠券 三个条件组合。
错误推测法:凭经验猜容易错的地方(空值、超长、重复提交、并发)。
动手练:拿一个登录页面,用 Excel 写 20 条测试用例试试。
测试用例模板:
用例编号 | 模块 | 标题 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
TC001 | 登录 | 正确账号密码登录 | 已注册账号 | 1.打开登录页 2.输入正确账号密码 3.点登录 | 登录成功,跳转首页 | 高 |
4.3 缺陷(Bug)管理与流程
一个标准的 bug 报告要写:标题、环境、复现步骤、预期结果、实际结果、截图/日志附件、严重程度(S1S4:致命/严重/一般/提示)、优先级(P0P3:先修哪个)。
Bug 的生命周期(用禅道/Jira 走一遍就懂了):
新建(New) → 指派(Assigned) → 打开(Open) → 修复(Fixed) → 回归验证(Verified) → 关闭(Closed) ↓ 没修好 重新打开(Reopened)工具方面可以熟悉:禅道(国内中小公司常用,测试/开发/需求一体化)、Jira(外企和大厂常用)、TAPD(腾讯系常用)。我是装了禅道开源版,自己提几个 bug 走了一遍流程,比看十遍文档都管用。
4.4 数据库基础(SQL)
测试经常要和数据打交道。主要学 MySQL 的增删改查,重点是多表连接查询和分组统计,这样测试时才能准确构造和核对数据。
-- 查 SELECT * FROM user WHERE age > 18 ORDER BY id DESC; -- 多表连接(重点) SELECT u.name, o.amount FROM user u JOIN `order` o ON u.id = o.user_id WHERE o.status = 'paid'; -- 分组统计(查每个城市用户数>100的) SELECT city, COUNT(*) FROM user GROUP BY city HAVING COUNT(*) > 100; -- 增删改 INSERT INTO user(name, age) VALUES('张三', 20); UPDATE user SET age = 21 WHERE name = '张三'; DELETE FROM user WHERE id = 100;测试为什么要用 SQL:造测试数据(手动插一批订单)、校验测试结果(下单后数据库里金额对不对)、排查问题(bug 是不是数据写错了)。
4.5 Linux 基础
测试环境大多部署在 Linux 上,至少要会常用文件操作和查日志的命令:
pwd # 当前目录 ls -l # 列文件 cd /opt/app # 进目录 cat app.log # 看整个日志 tail -f app.log # 实时看日志(排查问题神器) grep "ERROR" app.log # 过滤报错 ps -ef | grep java # 看进程 tar -zxvf a.tar.gz # 解压 chmod 755 start.sh # 改权限练习:装个虚拟机或买个云服务器(几块钱),把上面命令敲一遍就有手感了。
五、第二阶段:核心技能进阶(约 4~6 周)学什么
基础打完后,开始学更核心的技术,给后面的自动化做准备。
5.1 编程语言基础(Python)
选 Python 是因为语法简单,也是自动化测试的主流语言。重点学:变量、数据类型(字符串/列表/字典)、条件判断、循环、函数、类与对象(面向对象基础)、文件读写和异常处理,再加上两个测试常用库:
# 1. requests 调接口 import requests r = requests.post("https://api.xxx.com/login", json={"username":"test","pwd":"123"}) print(r.json()) # 2. openpyxl 操作 Excel(批量造数据/出报告) from openpyxl import Workbook wb = Workbook() ws = wb.active ws.append(["用例名", "结果"]) wb.save("report.xlsx")5.2 接口测试
学Postman或JMeter,理解HTTP/HTTPS 协议,能根据接口文档写接口测试用例。
- 请求方法:GET(查)、POST(增)、PUT(改)、DELETE(删)
- 状态码:2xx 成功(200)、3xx 重定向、4xx 客户端错(401 未授权/403 禁止/404 找不到)、5xx 服务端错(500 内部错误/502 网关错)
- 请求头:Content-Type、Authorization(鉴权)、Cookie
- 请求体:JSON 最常见,如
{"username":"test","pwd":"123"}
Postman 里写断言的示例:
pm.test("状态码是200", function () { pm.response.to.have.status(200); }); pm.test("返回包含token", function () { var json = pm.response.json(); pm.expect(json.data.token).to.exist; });进阶工具可以了解Apifox(国产,文档+调试+自动化一体,越来越流行)和JMeter(接口+压测都能干)。
5.3 Web 自动化测试(Selenium + Python)
学Selenium配合 Python 做 Web 页面自动化,掌握元素定位、脚本编写,再用pytest或unittest组织用例。
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://www.baidu.com") driver.find_element(By.ID, "kw").send_keys("软件测试") driver.find_element(By.ID, "su").click()要理解的概念:元素定位(id/name/xpath/css)、等待机制(隐式/显式等待,防止"元素还没加载就点"报错)、PO(Page Object)设计模式(页面对象分离,用例好维护)。移动端自动化可以用Appium;新趋势还有Playwright(更快、更稳,值得关注)。
注意:UI 自动化维护成本高,企业里多用于核心回归场景,不是所有用例都自动化;接口自动化性价比最高,优先做。
5.4 性能测试入门(JMeter)
了解性能测试的基本概念,用JMeter做简单的压测,能看懂关键指标:
- 响应时间(RT):一个请求花多久,用户感知最直接
- TPS / QPS:每秒处理的事务/请求数(吞吐量)
- 并发用户数:同一时刻多少人用
- 错误率:失败请求占比
- 资源利用率:CPU、内存、磁盘 IO、网络
JMeter 基本套路:加线程组(设并发数/循环次数)→ 加 HTTP 请求 → 加监听器(聚合报告)→ 看平均 RT、TPS、错误率。
进阶:用命令模式跑大并发,再配合服务器监控(top、nmon):
jmeter -n -t test.jmx -l result.jtl六、第三阶段:项目实战与深化(约 2~3 个月)学什么
光学理论不够,项目才是简历上最有分量的部分。
6.1 找项目练手
没有实习或工作经验的话,可以去GitHub找开源项目(电商系统、后台管理系统)来练。选功能完整、文档清楚的中小型项目入手比较顺。
6.2 走一遍完整测试流程
围绕项目,把流程完整走一遍:阅读需求 → 设计测试点 → 编写测试用例 → 执行测试 → 提交 Bug → 输出测试报告。这能让你真正体会测试工程师的日常工作。
6.3 技术栈整合(简历亮点)
把前面学的串起来,都是可以写进简历的亮点:
pytest 接口自动化最小框架结构:
test_api/ ├── api/ # 封装接口请求 ├── testcases/ # 测试用例 ├── data/ # 测试数据 ├── report/ # 测试报告 └── conftest.py # 公共配置pytest 用例示例:
import requests def test_login_success(): r = requests.post("https://api.xxx.com/login", json={"username":"test","pwd":"123"}) assert r.status_code == 200 assert r.json()["code"] == 0 def test_login_wrong_pwd(): r = requests.post("https://api.xxx.com/login", json={"username":"test","pwd":"wrong"}) assert r.json()["code"] != 0跑:pytest -v --html=report.html
持续集成(CI):学会用Jenkins定时跑用例、出报告、失败发邮件/钉钉通知。这一步让你从"会写脚本"升级为"能落地工程化",是简历上很硬的一个亮点。
也可以用Selenium把核心功能做成 Web 自动化,和接口自动化一起放进 Jenkins 定时跑。
七、第四阶段:求职准备学什么
7.1 简历优化
把学习经历和项目实战包装成具体的项目经历,多用技术关键词和量化结果,别只写"熟悉测试流程"。比如:
- "基于某开源电商项目,独立设计 200+ 条用例,跟踪 30+ 缺陷"
- "搭建 Python+pytest 接口自动化框架,覆盖 50+ 接口"
- "用 JMeter 完成下单链路压测,定位到数据库连接瓶颈"
7.2 面试准备
系统复习测试理论、SQL、Linux 命令,同时针对自己的项目准备细节,比如:
- "你是怎么设计测试用例的?"
- "接口测试和 UI 自动化你更熟哪个?"
- "遇到过什么难点,怎么解决的?"
- "这个 bug 你是怎么定位和复现的?"
八、我踩过的坑(避坑提醒)
动手比空看重要:测试是实操性很强的技能,多写用例、多敲代码、多玩工具才有用。
别突击:每天稳学 2~3 小时,比周末集中恶补效果好得多。
项目决定成败:面试官最关心的就是项目细节,自己做的项目一定要吃透。
别一上来死磕自动化:基础不牢,自动化只会越学越乱,还容易写出一堆维护不了的脚本。
别忽视沟通和文档:测试要写报告、跟开发沟通问题,表达清楚很重要。
英语别怕:报错信息、文档大多是英文,用翻译工具边查边学,慢慢就顺了。
别沉迷囤资料:收藏不等于学会,一套学完比十套半途而废强。
九、常用工具清单与学习资源
工具清单
- 缺陷管理:禅道、Jira、TAPD
- 接口调试:Postman、Apifox
- 性能 / 接口:JMeter
- 自动化:Selenium、Playwright、Appium、pytest
- CI/CD:Jenkins、GitLab CI
- 版本控制:Git
- 抓包:Fiddler、Charles(看请求响应、定位问题必备)
学习资源
- 视频:B 站搜"软件测试",黑马、尚硅谷的免费课质量不错
- 书:《软件测试》《Python 编程从入门到实践》《全栈性能测试修炼宝典》《Selenium 自动化测试实战》
- 练习:GitHub 上找开源项目,完整走一遍测试流程;或找一个常用 App 写 20 条用例
如果这篇文章对你有帮助,欢迎点赞收藏,也欢迎在评论区一起交流学习进度。共勉。
本文为作者原创,转载请注明出处。