跳转至

章节练习与参考答案

新手导读

这份练习册用于把教程内容变成可执行任务。建议每学完一个阶段,就做对应练习,并把答案写到自己的笔记中。


阶段练习入口


使用方式

步骤 说明
先独立完成 不要一边看答案一边写,先暴露自己的薄弱点
再对照答案 重点看思路是否完整,不要求和参考答案一字不差
最后复盘 写下自己漏掉的测试点、命令、断言和风险判断

每道题建议按下面格式输出:

题目:
我的答案:
参考答案差异:
我漏掉的点:
下次改进:

一、测试理论练习

练习 1:登录功能测试点拆分

需求:

用户可以使用手机号和密码登录。手机号必须为 11 位。密码连续输错 5 次后,账号锁定 15 分钟。登录成功后进入首页。

请拆分至少 12 个测试点。

参考答案:

维度 测试点
正常流程 正确手机号和密码登录成功
参数校验 手机号为空、密码为空、手机号不足 11 位、手机号超过 11 位、手机号含字母
密码错误 密码错误 1 次、连续错误 5 次、锁定后输入正确密码
账号状态 未注册账号、禁用账号、注销账号
会话状态 登录后刷新页面、退出登录后访问首页
安全 密码是否明文传输、错误提示是否暴露账号存在

新手常漏:

  • 只测正确账号密码。
  • 只看页面提示,不看接口是否返回 token。
  • 不测账号锁定后的正确密码登录。

练习 2:缺陷报告改写

原始缺陷描述:

登录有问题,点了没反应。

请改成一条合格缺陷。

参考答案:

字段 内容
标题 正确账号密码登录后页面无跳转且无错误提示
环境 Chrome 125,测试环境,Windows 11
前置条件 用户 13800138000 已注册且状态正常
复现步骤 1. 打开登录页;2. 输入手机号和正确密码;3. 点击登录按钮
实际结果 页面停留在登录页,无加载提示、无错误提示
期望结果 登录成功后跳转首页,并展示用户昵称
附件 控制台截图、Network 请求截图、接口响应
严重级别 Major

二、SQL 练习

练习 1:查询用户订单

表结构:

users(id, username, phone)
orders(id, user_id, amount, status, created_at)

题目:查询手机号为 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:定位脏数据

表结构:

orders(id, user_id, amount)
users(id, username)

题目:找出订单表中 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 排查

场景:

测试环境登录接口返回 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:磁盘满导致上传失败

题目:上传接口突然失败,怀疑服务器磁盘满。请写出检查命令。

参考答案:

df -h
du -sh /www/wwwroot/*
du -sh /var/log/*

注意:

  • 不要直接删除不认识的目录。
  • 先确认大文件属于日志、缓存还是业务文件。
  • 删除前最好和开发或运维确认。

四、接口测试练习

练习 1:登录接口断言

接口:

POST /api/login
Body: {"username":"test_user","password":"test_password"}

请写出至少 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:创建订单接口测试点

接口:

POST /api/orders
Header: Authorization: Bearer <token>
Body: {"productId":10001,"quantity":1}

参考答案:

场景 预期
正常下单 创建订单成功,状态为待支付
未登录 返回 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 数据
风险 隐私数据泄露,属于水平越权

七、综合项目练习

练习:电商下单主流程

请围绕下面主流程完成一份小型测试交付:

登录 -> 搜索商品 -> 加入购物车 -> 创建订单 -> 取消订单

要求输出:

  1. 业务流程图。
  2. 至少 20 条测试点。
  3. 至少 10 条测试用例。
  4. 3 个接口断言点。
  5. 3 条数据库校验 SQL。
  6. 2 个缺陷示例。
  7. 1 段测试结论。

达成标准:

  • 测试点覆盖正常、异常、权限、数据一致性。
  • 用例步骤别人能照着执行。
  • 接口断言不只检查状态码。
  • SQL 能验证订单和库存变化。
  • 测试结论能说明是否建议上线。

综合项目练习入口

完成综合项目练习后,建议进入项目实战:

查看项目实战总览


八、自查清单

  • 我能独立拆测试点,而不是只照抄教程。
  • 我能把测试点写成可执行用例。
  • 我能写清楚缺陷标题、步骤、实际结果和期望结果。
  • 我能用 SQL 验证关键业务数据。
  • 我能用 Postman 或 Python 做基础接口断言。
  • 我知道哪些场景适合自动化,哪些场景不适合第一版自动化。
  • 我能把性能测试结果写成有指标、有证据、有建议的结论。
  • 我能识别登录、订单、权限、上传这类高风险场景。

练习不是为了做完题,而是为了形成测试人员的基本习惯:先理解业务,再设计测试,再收集证据,最后给出清楚结论。


阶段通关检查

完成练习后,使用以下通关检查确认是否可以进入下一阶段:

阶段 通关检查
第 1 阶段 测试入门通关
第 2 阶段 工具实战通关
第 3 阶段 专项测试通关
第 4 阶段 自动化测试通关
第 5 阶段 项目面试通关

查看学习中心 | 查看学习路线