章节练习与参考答案¶
新手导读
这份练习册用于把教程内容变成可执行任务。建议每学完一个阶段,就做对应练习,并把答案写到自己的笔记中。
阶段练习入口¶
第 1 阶段:测试入门
测试理论、用例设计、缺陷管理练习。
第 2 阶段:工具实战
SQL、Linux、接口调试练习。
第 3 阶段:专项测试
接口测试、性能测试、安全测试练习。
第 4 阶段:自动化测试
自动化用例设计、Playwright 优化练习。
使用方式¶
| 步骤 | 说明 |
|---|---|
| 先独立完成 | 不要一边看答案一边写,先暴露自己的薄弱点 |
| 再对照答案 | 重点看思路是否完整,不要求和参考答案一字不差 |
| 最后复盘 | 写下自己漏掉的测试点、命令、断言和风险判断 |
每道题建议按下面格式输出:
一、测试理论练习¶
练习 1:登录功能测试点拆分¶
需求:
请拆分至少 12 个测试点。
参考答案:
| 维度 | 测试点 |
|---|---|
| 正常流程 | 正确手机号和密码登录成功 |
| 参数校验 | 手机号为空、密码为空、手机号不足 11 位、手机号超过 11 位、手机号含字母 |
| 密码错误 | 密码错误 1 次、连续错误 5 次、锁定后输入正确密码 |
| 账号状态 | 未注册账号、禁用账号、注销账号 |
| 会话状态 | 登录后刷新页面、退出登录后访问首页 |
| 安全 | 密码是否明文传输、错误提示是否暴露账号存在 |
新手常漏:
- 只测正确账号密码。
- 只看页面提示,不看接口是否返回 token。
- 不测账号锁定后的正确密码登录。
练习 2:缺陷报告改写¶
原始缺陷描述:
请改成一条合格缺陷。
参考答案:
| 字段 | 内容 |
|---|---|
| 标题 | 正确账号密码登录后页面无跳转且无错误提示 |
| 环境 | Chrome 125,测试环境,Windows 11 |
| 前置条件 | 用户 13800138000 已注册且状态正常 |
| 复现步骤 | 1. 打开登录页;2. 输入手机号和正确密码;3. 点击登录按钮 |
| 实际结果 | 页面停留在登录页,无加载提示、无错误提示 |
| 期望结果 | 登录成功后跳转首页,并展示用户昵称 |
| 附件 | 控制台截图、Network 请求截图、接口响应 |
| 严重级别 | Major |
二、SQL 练习¶
练习 1:查询用户订单¶
表结构:
题目:查询手机号为 13800138000 的用户最近 10 条已支付订单。
参考答案:
SELECT o.id, o.amount, o.status, o.created_at
FROM orders o
JOIN users u ON o.user_id = u.id
WHERE u.phone = '13800138000'
AND o.status = 'PAID'
ORDER BY o.created_at DESC
LIMIT 10;
检查点:
- 是否使用
JOIN关联用户表和订单表。 - 是否过滤
status = 'PAID'。 - 是否按创建时间倒序。
- 是否限制数量,避免一次查太多数据。
练习 2:定位脏数据¶
表结构:
题目:找出订单表中 user_id 不存在于用户表的订单。
参考答案:
SELECT o.id, o.user_id, o.amount
FROM orders o
LEFT JOIN users u ON o.user_id = u.id
WHERE u.id IS NULL;
测试意义:
- 验证数据一致性。
- 发现异常订单、导入错误或删除用户后的遗留数据。
三、Linux 练习¶
练习 1:接口 500 排查¶
场景:
请写出排查步骤。
参考答案(服务器通常是 Linux,但本地调试可能用 Windows,两种命令都列出):
# 1. 进入日志目录
cd /var/log/app # Linux / Mac 日志通常在这
cd C:\app\logs # Windows 根据项目实际路径调整
# 2. 查看最新日志
tail -n 200 app.log # Linux / Mac
Get-Content app.log -Tail 200 # PowerShell
# 3. 实时观察错误
tail -f app.log # Linux / Mac
Get-Content app.log -Wait # PowerShell
# 4. 搜索错误关键字
grep -n "ERROR" app.log # Linux / Mac
Select-String -Path app.log -Pattern "ERROR" # PowerShell
# 5. 查看服务是否存在
ps -ef | grep java # Linux / Mac
Get-Process java # PowerShell
# 6. 查看端口是否监听
ss -tlnp | grep 8080 # Linux / Mac
netstat -ano | findstr :8080 # Windows
输出结论时不要只说“日志报错”,要写清:
练习 2:磁盘满导致上传失败¶
题目:上传接口突然失败,怀疑服务器磁盘满。请写出检查命令。
参考答案:
注意:
- 不要直接删除不认识的目录。
- 先确认大文件属于日志、缓存还是业务文件。
- 删除前最好和开发或运维确认。
四、接口测试练习¶
练习 1:登录接口断言¶
接口:
请写出至少 6 个断言点。
参考答案:
| 层级 | 断言 |
|---|---|
| HTTP | 状态码为 200 或符合接口约定 |
| 业务 | code 为成功码 |
| 字段 | 返回 data.token 且不为空 |
| 安全 | 响应不返回明文密码 |
| 会话 | token 有过期时间或服务端会话记录 |
| 数据 | 登录日志新增成功记录 |
Postman 示例:
pm.test("业务成功", function () {
const body = pm.response.json();
pm.expect(body.code).to.eql(0);
pm.expect(body.data.token).to.be.a("string").that.is.not.empty;
});
练习 2:创建订单接口测试点¶
接口:
参考答案:
| 场景 | 预期 |
|---|---|
| 正常下单 | 创建订单成功,状态为待支付 |
| 未登录 | 返回 401 或未登录业务码 |
| 商品不存在 | 返回商品不存在 |
| 商品下架 | 返回商品不可购买 |
| 库存不足 | 下单失败,不扣库存 |
| 数量为 0 | 参数校验失败 |
| 重复提交 | 不重复扣库存,不重复创建有效订单 |
| 越权查看订单 | 用户只能查看自己的订单 |
数据库校验:
SELECT id, user_id, status, total_amount
FROM orders
WHERE id = 10001;
SELECT product_id, stock
FROM inventory
WHERE product_id = 10001;
五、自动化测试练习¶
练习 1:判断哪些用例适合自动化¶
请判断下面场景是否适合第一版自动化。
| 场景 | 是否适合 | 原因 |
|---|---|---|
| 登录成功 | 适合 | 高频、稳定、回归价值高 |
| 首页 Banner 视觉细节 | 不适合第一版 | 改动频繁,断言成本高 |
| 商品搜索 | 适合 | 核心入口,容易自动断言 |
| 第三方真实支付 | 不适合第一版 | 依赖外部系统,稳定性差 |
| 订单详情查看 | 适合 | 核心流程,数据可控 |
判断标准:
- 是否稳定。
- 是否高频。
- 是否有明确断言。
- 是否能准备和清理测试数据。
- 失败后是否容易定位。
练习 2:Playwright 登录用例优化¶
原始写法:
page.goto("https://test.example.com/login")
page.fill("#u", "test")
page.fill("#p", "123456")
page.click(".btn")
page.wait_for_timeout(5000)
assert "home" in page.url
参考优化:
from playwright.sync_api import expect
def test_login_success(page):
page.goto("https://test.example.com/login")
page.get_by_label("用户名").fill("test")
page.get_by_label("密码").fill("123456")
page.get_by_role("button", name="登录").click()
expect(page.get_by_text("退出登录")).to_be_visible()
优化点:
- 用语义化定位替代脆弱 CSS。
- 用自动等待断言替代固定等待。
- 断言用户能看到的结果,而不只看 URL 字符串。
六、性能与安全练习¶
练习 1:性能结论改写¶
原始结论:
参考答案:
在 100 并发商品查询场景下,系统 TPS 稳定在 230 左右,平均响应时间 310ms,P95 响应时间 860ms,错误率 0.02%,CPU 峰值 68%,满足本轮目标。
在 200 并发时,创建订单接口 P95 升至 2400ms,错误率达到 1.8%,数据库慢查询日志显示 order_items 表存在全表扫描,建议补充索引后重新压测。
好结论必须包含:
- 场景。
- 并发或数据量。
- 指标。
- 是否达标。
- 证据。
- 下一步建议。
练习 2:越权测试¶
题目:普通用户 A 登录后,可以通过修改订单 ID 访问用户 B 的订单详情。请写缺陷报告。
参考答案:
| 字段 | 内容 |
|---|---|
| 标题 | 普通用户修改订单 ID 后可查看他人订单详情 |
| 严重级别 | Critical |
| 前置条件 | 用户 A 和用户 B 都有订单 |
| 复现步骤 | 用户 A 登录;请求自己的订单详情;把订单 ID 改为用户 B 的订单 ID;重新发送请求 |
| 实际结果 | 返回用户 B 的订单详情、手机号和地址 |
| 期望结果 | 返回无权限或订单不存在,不返回用户 B 数据 |
| 风险 | 隐私数据泄露,属于水平越权 |
七、综合项目练习¶
练习:电商下单主流程¶
请围绕下面主流程完成一份小型测试交付:
要求输出:
- 业务流程图。
- 至少 20 条测试点。
- 至少 10 条测试用例。
- 3 个接口断言点。
- 3 条数据库校验 SQL。
- 2 个缺陷示例。
- 1 段测试结论。
达成标准:
- 测试点覆盖正常、异常、权限、数据一致性。
- 用例步骤别人能照着执行。
- 接口断言不只检查状态码。
- SQL 能验证订单和库存变化。
- 测试结论能说明是否建议上线。
综合项目练习入口¶
完成综合项目练习后,建议进入项目实战:
- 电商系统测试实战 - 完整测试流程
- 接口自动化项目实战 - 接口自动化实践
- Web 自动化项目实战 - Web 自动化实践
- 性能测试项目实战 - 性能测试实践
- CI/CD 自动化回归实战 - CI/CD 集成实践
→ 查看项目实战总览
八、自查清单¶
- 我能独立拆测试点,而不是只照抄教程。
- 我能把测试点写成可执行用例。
- 我能写清楚缺陷标题、步骤、实际结果和期望结果。
- 我能用 SQL 验证关键业务数据。
- 我能用 Postman 或 Python 做基础接口断言。
- 我知道哪些场景适合自动化,哪些场景不适合第一版自动化。
- 我能把性能测试结果写成有指标、有证据、有建议的结论。
- 我能识别登录、订单、权限、上传这类高风险场景。
练习不是为了做完题,而是为了形成测试人员的基本习惯:先理解业务,再设计测试,再收集证据,最后给出清楚结论。
阶段通关检查¶
完成练习后,使用以下通关检查确认是否可以进入下一阶段:
| 阶段 | 通关检查 |
|---|---|
| 第 1 阶段 | 测试入门通关 |
| 第 2 阶段 | 工具实战通关 |
| 第 3 阶段 | 专项测试通关 |
| 第 4 阶段 | 自动化测试通关 |
| 第 5 阶段 | 项目面试通关 |