跳转至

消息通知测试案例

消息通知看起来简单——"发一条消息"——但它涉及多渠道(站内信、短信、邮件、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 渲染

短信测试建议用专用测试号,不要用真实手机号,避免被频率限制影响。

执行步骤示例

  1. 触发一个注册场景,检查站内信、短信、邮件是否同时发出。
  2. 检查短信内容:签名是否合规、订单号是否正确、链接是否可点击。
  3. 检查邮件 HTML:在 Gmail 和 QQ 邮箱中分别打开,检查排版。
  4. 连续触发同一场景 3 次,检查频率限制是否生效。
  5. 模拟短信通道返回错误,检查系统是否有重试记录。
  6. 检查站内信列表:未读计数、已读状态、删除操作。
  7. 用 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 元"
影响 用户体验差,信息不完整,降低信任度

容易漏测

  • 只测站内信,不测短信和邮件。
  • 不验证模板变量缺失时的兜底显示。
  • 忘记测频率限制(同一手机号短时间多次触发)。
  • 不验证邮件在不同邮箱服务商的渲染差异。
  • 不测发送失败后的重试和降级。
  • 不验证退订链接是否生效。
  • 忽略短信签名合规性(必须包含公司/产品名)。

复盘问题

  • 短信和邮件发送失败后,应该怎么处理?直接丢弃还是重试?重试几次?
  • 站内信的"未读"计数,应该实时更新还是定时刷新?性能怎么考虑?
  • 如何防止短信轰炸攻击(恶意用户用接口给任意手机号发短信)?