消息通知测试案例¶
消息通知看起来简单——"发一条消息"——但它涉及多渠道(站内信、短信、邮件、Push)、模板渲染、发送时机、频率控制、失败重试等复杂场景。测试时要覆盖渠道、内容、时机和异常。
需求背景¶
系统在用户注册、订单状态变更、密码重置等场景触发消息通知。支持站内信、短信和邮件三种渠道。消息内容使用模板渲染,支持变量替换。短信和邮件有发送频率限制(同一手机号 1 分钟内最多 1 条)。
测试点拆解¶
| 维度 | 测试点 |
|---|---|
| 触发场景 | 注册成功、下单成功、发货、退款、密码重置 |
| 站内信 | 消息列表、已读/未读、删除、批量操作 |
| 短信 | 验证码短信、通知短信、签名和模板合规 |
| 邮件 | 标题、正文、HTML 渲染、附件、退订链接 |
| 模板渲染 | 变量替换(用户名、订单号、金额)、变量缺失兜底 |
| 频率控制 | 同一手机号 1 分钟内多次触发、24 小时上限 |
| 发送时机 | 同步发送 vs 异步发送、延迟发送、定时发送 |
| 失败处理 | 短信通道故障、邮件发送失败、重试机制 |
| 安全 | 短信轰炸防护、邮件退订、敏感信息脱敏 |
| 兼容性 | 邮件在 Outlook/Gmail/QQ 邮箱的渲染差异 |
用例示例¶
| 编号 | 测试点 | 步骤 | 预期结果 |
|---|---|---|---|
| NOTIFY-001 | 注册站内信 | 新用户注册成功 | 站内信列表出现欢迎消息,未读状态 |
| NOTIFY-002 | 订单短信 | 用户下单成功 | 手机收到订单确认短信,含订单号和金额 |
| NOTIFY-003 | 邮件渲染 | 订单发货后 | 邮件标题含订单号,正文含物流信息,HTML 正常显示 |
| NOTIFY-004 | 变量缺失 | 模板中有 {{username}} 但用户未设置昵称 |
兜底显示"用户"或手机号脱敏,不显示变量占位符 |
| NOTIFY-005 | 频率限制 | 1 分钟内连续触发 3 次短信 | 只发送 1 条,其余被拦截或合并 |
| NOTIFY-006 | 站内信已读 | 点击未读消息 | 状态变为已读,未读计数减 1 |
| NOTIFY-007 | 站内信删除 | 删除一条站内信 | 消息从列表消失,不影响其他消息 |
| NOTIFY-008 | 邮件退订 | 点击邮件底部退订链接 | 取消订阅成功,后续不再收到营销邮件 |
| NOTIFY-009 | 短信通道故障 | 模拟短信服务商返回错误 | 系统记录发送失败,触发重试或降级 |
| NOTIFY-010 | 邮件多邮箱 | 发送到 Gmail、QQ 邮箱、Outlook | 三个邮箱均能收到,HTML 渲染无明显错乱 |
接口校验¶
通知接口至少检查:
- HTTP 状态码和业务码。
- 短信发送接口的
phone参数格式校验。 - 邮件发送接口的
to参数是否支持多个收件人。 - 模板 ID 不存在时是否报错。
- 频率限制是否生效(同一手机号短时间内重复调用)。
- 异步发送时接口是否立即返回,不阻塞主流程。
测试数据准备¶
| 数据 | 用途 |
|---|---|
| 已绑定手机号的用户 | 验证短信发送 |
| 已绑定邮箱的用户 | 验证邮件发送 |
| 未绑定手机号的用户 | 验证降级处理(只发站内信) |
| 多个测试手机号 | 验证频率限制和并发发送 |
| 各种邮件模板 | 验证变量替换和 HTML 渲染 |
短信测试建议用专用测试号,不要用真实手机号,避免被频率限制影响。
执行步骤示例¶
- 触发一个注册场景,检查站内信、短信、邮件是否同时发出。
- 检查短信内容:签名是否合规、订单号是否正确、链接是否可点击。
- 检查邮件 HTML:在 Gmail 和 QQ 邮箱中分别打开,检查排版。
- 连续触发同一场景 3 次,检查频率限制是否生效。
- 模拟短信通道返回错误,检查系统是否有重试记录。
- 检查站内信列表:未读计数、已读状态、删除操作。
- 用 Postman 调用通知接口,传不存在的模板 ID,检查错误处理。
数据校验示例¶
-- 查看用户的站内信
SELECT id, title, is_read, created_at
FROM notifications
WHERE user_id = 10001
ORDER BY created_at DESC;
-- 查看短信发送记录和状态
SELECT id, phone, template_id, status, retry_count, created_at
FROM sms_logs
WHERE phone = '13800138000'
ORDER BY created_at DESC;
-- 期望:频率限制生效时,1 分钟内只有 1 条成功记录
缺陷示例¶
| 字段 | 内容 |
|---|---|
| 标题 | 邮件模板变量 {{order_amount}} 未替换,用户收到原始占位符 |
| 前置条件 | 订单发货触发邮件通知,模板含 {{order_amount}} 变量 |
| 复现步骤 | 创建一笔订单,发货后查看收到的邮件内容 |
| 实际结果 | 邮件正文显示"订单金额:{{order_amount}} 元" |
| 期望结果 | 邮件正文显示"订单金额:299.00 元" |
| 影响 | 用户体验差,信息不完整,降低信任度 |
容易漏测¶
- 只测站内信,不测短信和邮件。
- 不验证模板变量缺失时的兜底显示。
- 忘记测频率限制(同一手机号短时间多次触发)。
- 不验证邮件在不同邮箱服务商的渲染差异。
- 不测发送失败后的重试和降级。
- 不验证退订链接是否生效。
- 忽略短信签名合规性(必须包含公司/产品名)。
复盘问题¶
- 短信和邮件发送失败后,应该怎么处理?直接丢弃还是重试?重试几次?
- 站内信的"未读"计数,应该实时更新还是定时刷新?性能怎么考虑?
- 如何防止短信轰炸攻击(恶意用户用接口给任意手机号发短信)?