Files
danyang-match/测试体系、验收标准与上线质量保障方案.md
T

4015 lines
45 KiB
Markdown
Raw Normal View History

2026-09-09 22:05:00 +08:00
# 丹阳公益婚恋服务平台
# V1.0 测试体系、验收标准与上线质量保障方案
版本:V1.0
适用范围:微信小程序用户端、公益红娘工作台、运营管理后台、后端服务、数据库、实时消息、对象存储、风控与统计模块
核心目标:保证V1.0上线前“功能可用、状态正确、权限不越界、数据不重复、敏感信息不泄露、核心链路可恢复、上线后可快速定位问题”
---
# 第一章 测试总体目标
本项目测试不是简单确认:
> 页面能不能打开。
真正需要验证的是:
1. 核心婚恋闭环是否完整
2. 状态变化是否正确
3. 并发情况下是否产生重复数据
4. 用户隐私是否被严格隔离
5. 后台工作人员是否会越权
6. 拉黑、封禁、审核等状态是否即时生效
7. 弱网和异常情况下数据是否仍一致
8. 活动现场是否真正可执行
9. 红娘工作流是否能连续使用
10. 数据统计是否与业务真实数据一致
最终标准:
> **不是“没有明显Bug就上线”,而是核心业务链路在正常、异常、并发和越权场景下都可控。**
---
# 第二章 测试体系总结构
V1.0测试体系分为:
```text
01 单元测试
02 Service业务规则测试
03 API接口测试
04 数据库约束测试
05 状态机测试
06 并发与幂等测试
07 前端功能测试
08 实时聊天测试
09 权限与越权测试
10 隐私与敏感数据测试
11 安全测试
12 活动现场测试
13 红娘SOP测试
14 风控流程测试
15 数据统计口径测试
16 性能测试
17 兼容性测试
18 灾备与恢复测试
19 上线前回归测试
20 上线Go/No-Go验收
```
---
# 第三章 测试环境划分
建议至少:
```text
development
test
staging
production
```
---
# 第四章 Development
用途:
> 开发人员本地开发。
可以使用:
- 模拟微信用户
- 模拟实名认证
- 测试对象存储
- 测试数据库
禁止使用真实生产身份证等敏感数据。
---
# 第五章 Test环境
用途:
- 自动化测试
- QA测试
- 接口测试
- 并发测试
必须允许:
> 数据随时重置。
---
# 第六章 Staging预发布
必须尽可能接近Production:
```text
同版本数据库
同Redis结构
同对象存储策略
同Nginx
同Docker部署
同权限配置
```
第三方实名、微信能力可以使用:
> 官方测试环境或受控测试账号。
---
# 第七章 Production
生产数据:
> 不用于普通开发测试。
线上故障复现:
优先使用:
- 日志
- RequestId
- Audit
- 脱敏数据
---
# 第八章 测试账号体系
必须提前准备标准测试账号。
例如:
```text
U001 新用户
U002 已绑定手机号未实名
U003 已实名资料未完成
U004 审核中
U005 审核通过正常用户
U006 paused用户
U007 getting_to_know用户
U008 successful用户
U009 limited用户
U010 banned用户
```
---
# 第九章 关系测试用户
至少:
```text
A neutral B
C liked D
D liked C
E blocked F
G active match H
I unmatched J
K successful L
```
方便快速测试状态。
---
# 第十章 后台测试账号
必须分别准备:
```text
super_admin
platform_admin
organization_admin_A
organization_admin_B
reviewer
matchmaker_A
matchmaker_B
activity_manager
risk_operator
volunteer
data_viewer
```
不能只拿超级管理员测所有后台。
---
# 第十一章 测试数据生成
建议开发:
```text
seed:test
```
或对应脚本。
自动生成:
- 不同年龄
- 不同性别
- 不同婚姻状态
- 不同择偶条件
- 不同审核状态
- Match
- Conversation
- Activity
- Report
- MatchmakerService
---
# 第十二章 核心端到端测试链路
V1最重要的第一条E2E:
```text
微信登录
↓
手机号
↓
实名认证
↓
填写资料
↓
设置择偶条件
↓
提交审核
↓
后台审核通过
↓
首页推荐
↓
用户详情
↓
Like
↓
另一方Like
↓
Mutual Match
↓
聊天
```
此链路必须:
> 100%可通过。
---
# 第十三章 第二核心E2E:红娘
```text
用户申请红娘
↓
后台分配
↓
红娘查看服务
↓
系统生成候选
↓
红娘推荐
↓
用户查看
↓
Like
↓
Mutual
↓
服务跟进
↓
完成服务
```
---
# 第十四章 第三核心E2E:活动
```text
后台创建活动
↓
发布
↓
用户报名
↓
人工审核
↓
报名通过
↓
签到
↓
活动结束
↓
提交反馈
↓
活动互选
↓
双向互选
↓
创建Match
↓
聊天
```
---
# 第十五章 第四核心E2E:风控
```text
用户举报
↓
Report创建
↓
风控处理
↓
RiskAction
↓
账号受限
↓
聊天即时禁止
↓
推荐即时排除
↓
用户申诉
↓
人工复核
↓
撤销/维持
```
---
# 第十六章 单元测试范围
重点Service:
```text
MatchEligibilityService
RequiredConditionService
DirectionalScoringService
MutualScoringService
MessagePermissionService
ActivityEligibilityService
RiskStatusService
PermissionService
DataScopeService
```
---
# 第十七章 匹配算法单元测试
必须覆盖:
```text
年龄边界
身高边界
地区
婚姻状态
子女情况
学历
吸烟
饮酒
婚姻计划
定居意愿
兴趣
Null
Required
Preferred
```
---
# 第十八章 Required测试
例如:
A:
```text
年龄30~35 required
```
B=35:
> 通过。
B=36:
> Reject。
不能进入后续评分。
---
# 第十九章 双向Required测试
```text
A接受B
B不接受A
```
最终:
> Reject。
---
# 第二十章 MutualScore测试
输入:
```text
AB = 92
BA = 78
```
验证:
```text
0.6×78 + 0.4×85
```
结果符合公式。
---
# 第二十一章 推荐理由测试
输入条件真实匹配:
> 生成对应理由。
不能生成资料中不存在的:
> “双方都喜欢旅行”。
---
# 第二十二章 Service测试原则
业务Service测试重点:
> 状态变化和副作用。
例如Like:
不仅检查:
```text
like插入成功
```
还要检查:
```text
reverse like存在时创建Match
Conversation创建
Members创建
```
---
# 第二十三章 API测试
所有API至少覆盖:
```text
正常请求
缺少Token
Token过期
参数缺失
参数越界
业务状态错误
资源不存在
权限不足
重复请求
```
---
# 第二十四章 API响应格式测试
所有API错误必须符合:
```json
{
"success": false,
"code": "...",
"message": "...",
"data": null
}
```
不能某接口返回:
```text
500 Internal Error
```
另一个返回:
```json
{"msg":"error"}
```
---
# 第二十五章 RequestId测试
每个请求:
> 必须能够获得RequestId。
错误日志能通过RequestId追踪。
---
# 第二十六章 登录测试
覆盖:
- 正常微信登录
- 无效code
- code重复
- 微信接口失败
- banned账号
- closed账号
- Token refresh
- logout
- Session撤销
---
# 第二十七章 手机绑定测试
覆盖:
- 正常手机号
- 已绑定手机号
- 同手机号重复绑定
- 无效手机号
- 短信验证码错误(若启用)
- 微信phoneCode失效
---
# 第二十八章 实名认证测试
覆盖:
```text
合法身份
姓名不一致
身份证格式错误
未成年
重复身份证
第三方超时
重复提交
```
---
# 第二十九章 实名测试特别要求
必须确认:
> 实名失败日志中没有完整身份证。
数据库中:
> 没有明文身份证。
---
# 第三十章 资料填写测试
覆盖:
- 每个字段正常值
- 最大/最小值
- 字典非法值
- selfIntro为空
- selfIntro超长
- 联系方式
- 特殊字符
- Emoji
- XSS文本
---
# 第三十一章 图片测试
覆盖:
```text
正常JPEG
PNG
伪装EXE.jpg
超大文件
异常MIME
损坏图片
带EXIF GPS图片
重复上传
```
必须确认:
> EXIF按设计处理。
---
# 第三十二章 审核状态机测试
覆盖:
```text
not_submitted → pending
pending → processing
processing → approved
processing → need_edit
processing → rejected
need_edit → pending
```
---
# 第三十三章 非法审核迁移测试
例如:
```text
approved → processing
```
由普通审核接口请求。
必须:
> 拒绝。
---
# 第三十四章 审核并发领取
模拟:
> 10个审核员同时领取同一任务。
最终:
```text
1人成功
9人失败
```
不能出现多个assigned_operator。
---
# 第三十五章 审核处理中修改资料
用户尝试修改正在审核字段。
必须按既定规则:
> 禁止或进入明确版本机制。
不能造成审核内容变化却仍然批准旧任务。
---
# 第三十六章 推荐资格测试
以下用户绝不能进入推荐:
```text
未实名
审核中
审核拒绝
paused
successful
banned
closed
blocked
```
---
# 第三十七章 推荐冷却测试
A Pass B。
下一次推荐:
> B被排除。
冷却到期后的行为:
> 根据配置恢复。
---
# 第三十八章 推荐缓存失效测试
缓存已有B。
B随后:
```text
paused
```
A再次获取推荐:
> 不得返回B。
---
# 第三十九章 Like正常测试
A Like B:
```text
liked = true
mutual = false
```
---
# 第四十章 双向Like测试
B先Like A。
A再Like B。
最终:
```text
1 Match
1 Conversation
2 ConversationMembers
```
---
# 第四十一章 同时Like并发测试
A与B同时发送。
循环至少:
> 100~1000次并发场景。
每轮必须:
```text
只产生1个Match
```
---
# 第四十二章 重复Like幂等
同一个:
```text
Idempotency-Key
```
重复10次。
最终:
> 一个Like结果。
---
# 第四十三章 取消Like测试
未Mutual:
> 可取消。
已Mutual:
> 必须拒绝,要求Unmatch。
---
# 第四十四章 Block测试
A Block B后:
必须同时验证:
- B不能Chat A
- A/B推荐互相排除
- Search排除
- 红娘候选排除
- Conversation不可发送
---
# 第四十五章 Unblock测试
解除后:
- 不自动恢复Like
- 不自动恢复Match
- Conversation仍不可自动恢复
---
# 第四十六章 Unmatch测试
任一方解除:
```text
match → unmatched
conversation.canSend = false
```
另一方下一条消息:
> 必须失败。
---
# 第四十七章 Success测试
A发起。
B确认。
最终:
```text
match successful
双方relationship_status更新
停止新推荐
```
---
# 第四十八章 Success拒绝测试
A发起。
B拒绝。
不能:
> 成功状态生效。
---
# 第四十九章 Success与Unmatch并发
A发Success。
同时B Unmatch。
最终必须只有一个合法业务状态。
不可出现:
```text
match = successful
conversation = unmatched
```
互相矛盾。
---
# 第五十章 聊天权限测试
必须覆盖:
```text
neutral
single like
active match
unmatched
blocked
banned
paused
successful
```
确认每种状态canSend正确。
---
# 第五十一章 Paused聊天测试
用户暂停寻找:
> 已有active Match聊天仍正常。
这是明确业务规则。
---
# 第五十二章 Successful聊天测试
成功牵手:
> 已有双方Conversation仍可保留。
不能因为成功就突然断聊。
---
# 第五十三章 消息幂等测试
服务端已经保存。
客户端超时重试相同:
```text
clientMessageId
```
最终:
> 数据库仅一条。
---
# 第五十四章 消息顺序测试
高频连续发送:
```text
M1 M2 M3 M4
```
客户端最终顺序稳定。
---
# 第五十五章 弱网测试
模拟:
```text
3G
高延迟
30%丢包
临时断网
网络切换
```
确认:
- 草稿不丢
- 重试不重复
- 历史最终一致
---
# 第五十六章 WebSocket断线重连测试
场景:
```text
WS断开
↓
对方发送5条
↓
重新连接
```
客户端最终:
> 5条全部可恢复。
---
# 第五十七章 后台切换测试
微信小程序:
```text
进入后台5分钟
↓
重新打开
```
需要:
- WS恢复
- 未读恢复
- 状态刷新
---
# 第五十八章 实时封禁测试
A正在聊天。
后台封禁A。
A不刷新页面直接发送。
必须:
> 发送失败。
不能等重新登录。
---
# 第五十九章 实时Block测试
A/B都在线。
B Block A。
A立即发送:
> 必须失败。
---
# 第六十章 消息限频测试
模拟:
```text
1秒100条
```
必须触发:
> Rate Limit。
同时普通连续发送:
```text
5~10条短消息
```
不能明显误伤。
---
# 第六十一章 重复群发测试
同一用户向多个Match发完全相同广告话术。
系统:
> 生成Spam风险。
---
# 第六十二章 Risk关键词测试
普通:
> “我在银行工作。”
不能直接封禁。
明显:
> “转钱给我投资”
应触发:
> 风险提醒/事件。
---
# 第六十三章 图片消息测试
覆盖:
- 上传成功发送
- 上传失败
- 上传成功但消息失败
- 图片权限失效
- 被Block后发送图片
- 恶意文件
---
# 第六十四章 系统通知测试
必须测试:
```text
审核通过
审核退回
Mutual Match
红娘推荐
活动批准
活动取消
账号受限
```
每个通知:
- 正确用户
- 正确业务ID
- 不重复
---
# 第六十五章 Notification幂等
同一个业务事件重复消费:
> 用户只收到一个正式通知。
---
# 第六十六章 活动创建测试
覆盖:
- 合法时间
- 开始>结束
- 报名结束>活动开始
- 空标题
- 无组织
- 无人数限制
- 无规则
---
# 第六十七章 活动状态测试
```text
draft → open
open → closed
closed → ongoing
ongoing → ended
```
非法逆转:
> 拒绝。
---
# 第六十八章 活动报名测试
覆盖:
```text
正常用户
未实名
未审核
年龄不符
活动关闭
重复报名
名额已满
```
---
# 第六十九章 Pending名额测试
假设:
```text
总名额10
pending 100
approved 9
```
仍只能再批准:
> 1人。
---
# 第七十章 活动最后名额并发
模拟:
> 50个审核请求同时批准最后1个名额。
最终:
```text
1 approved
49 ACTIVITY_FULL
```
---
# 第七十一章 性别名额测试
如果开启:
```text
male_limit = 10
```
第11名男性:
> GENDER_QUOTA_FULL。
同时女性名额不受错误影响。
---
# 第七十二章 用户取消与审核并发
用户正在取消pending。
审核员同时approve。
最终只能出现:
> 一个确定状态。
不能既approved又cancelled逻辑冲突。
---
# 第七十三章 活动取消并发
活动管理员取消活动时:
用户同时提交报名。
报名必须:
> 失败。
---
# 第七十四章 签到测试
覆盖:
```text
正常Token
Token过期
Token篡改
错误activity
非approved
重复签到
```
---
# 第七十五章 重复签到
返回:
> 已签到。
而不是500。
---
# 第七十六章 手工签到测试
检查:
- 操作人记录
- Audit
- 重复防护
---
# 第七十七章 活动互选测试
A选B:
> B看不到。
B选A:
> 生成Match。
---
# 第七十八章 多人互选限制
如果配置:
```text
maxSelections = 3
```
提交4人:
> 拒绝。
---
# 第七十九章 互选对象越权测试
用户修改targetId:
> 指向未参加该活动用户。
必须拒绝。
---
# 第八十章 Block与互选
A Block B。
即使旧页面存在B:
提交:
> 拒绝。
---
# 第八十一章 活动已有Match测试
A/B已有Match。
活动再次互选:
> 不创建重复Match。
---
# 第八十二章 活动Unmatch后重新互选
按照最终实现的“重新激活原Match/创建历史事件”逻辑测试。
要求:
> 历史不丢,关系不重复。
---
# 第八十三章 红娘申请测试
覆盖:
```text
正常申请
重复同类型active服务
paused用户
banned用户
successful用户
```
---
# 第八十四章 红娘接单并发
10位红娘同时Claim。
最终:
> 1位成功。
---
# 第八十五章 红娘候选测试
候选必须排除:
- Required冲突
- Block
- paused
- banned
- successful
- 当前不可推荐
---
# 第八十六章 红娘越权候选测试
红娘不能:
> 手工绕过系统提交任意targetUserId。
服务端仍校验。
---
# 第八十七章 红娘推荐重复测试
已推荐且用户已Pass的候选:
系统应提示历史。
按规则禁止/提示重复。
---
# 第八十八章 红娘查看聊天测试
Matchmaker角色请求聊天正文:
> 403。
必须验证。
---
# 第八十九章 红娘查看身份证测试
> 403。
---
# 第九十章 红娘替用户Like测试
不存在此权限/API。
如果构造调用:
> 拒绝。
---
# 第九十一章 红娘联系意向对象测试
V1保守方案:
A明确申请。
系统向B发中性通知。
必须确认:
- 不泄露B联系方式
- B可拒绝
- B拒绝后不重复骚扰
---
# 第九十二章 红娘风险转交测试
红娘创建风险转交后:
- 产生RiskEvent
- 红娘不能自行Ban
- 风控可继续处理
---
# 第九十三章 举报正常测试
覆盖类型:
```text
虚假资料
婚姻状态疑似虚假
骚扰
诈骗
金钱诱导
广告
冒充他人
其他
```
---
# 第九十四章 举报隐私测试
被举报用户:
> 不得知道举报人身份。
---
# 第九十五章 举报证据权限测试
仅:
```text
risk.evidence.view
```
可查看。
红娘、活动管理员:
> 403。
---
# 第九十六章 举报处理测试
结果:
```text
confirmed
rejected
insufficient_evidence
```
分别验证。
---
# 第九十七章 Report与RiskAction分离测试
举报成立:
不代表必然ban。
例如:
```text
confirmed + warning
```
应合法。
---
# 第九十八章 多RiskAction测试
用户同时有:
```text
message_limit
temporary_suspend
```
撤销一个以后:
> 不能简单恢复normal。
必须根据剩余Action重新计算。
---
# 第九十九章 申诉测试
覆盖:
```text
pending
processing
approved
rejected
```
approved:
> 正确撤销对应Action。
---
# 第一百章 权限测试总体要求
权限测试必须以:
> “默认拒绝”
为原则。
测试不仅看菜单隐藏。
必须直接构造HTTP请求。
---
# 第一百零一章 RBAC测试
每个角色访问每类资源。
形成正式:
> Permission Test Matrix。
---
# 第一百零二章 组织越权测试
机构A管理员:
请求机构B:
```text
activity
matchmaker service
operator
```
必须:
> 403。
---
# 第一百零三章 Assigned Scope测试
红娘A:
尝试访问红娘B服务。
没有授权:
> 拒绝。
---
# 第一百零四章 Activity Scope测试
志愿者只分配活动X。
访问活动Y签到名单:
> 403。
---
# 第一百零五章 敏感权限测试
没有:
```text
user.sensitive.identity.full
```
不能通过:
- API
- 下载
- URL参数
获得完整身份证。
---
# 第一百零六章 权限修改实时测试
管理员撤销权限。
旧Token继续请求:
> 应立即/短时内失效。
不能必须退出重登才生效。
---
# 第一百零七章 Operator Disabled测试
账号已登录。
后台管理员Disable。
下一API:
> 拒绝。
---
# 第一百零八章 角色自提权测试
organization_admin请求给自己:
```text
super_admin
```
必须:
> 拒绝并Audit。
---
# 第一百零九章 IDOR专项测试
必须重点覆盖:
```text
/users/{userId}
/conversations/{id}
/reports/{id}
/activities/{id}/registration
/matchmaker/services/{id}
/admin/users/{id}
```
手工替换ID。
---
# 第一百一十章 用户资料IDOR
A通过修改ID尝试看:
> 被B Block后的B详情。
必须:
> TARGET_UNAVAILABLE/403。
---
# 第一百一十一章 Conversation IDOR
A不属于Conversation。
访问:
> 403。
---
# 第一百一十二章 Checkin Token IDOR
Token不可通过:
> 修改userId
伪造其他签到。
签名必须验证。
---
# 第一百一十三章 隐私测试总目标
必须保证:
> “知道某个资源ID”不等于“拥有访问权”。
---
# 第一百一十四章 隐私字段测试
PublicProfile不得返回:
```text
real_name
id_number
phone
exact_address
```
---
# 第一百一十五章 SelfProfile测试
允许:
> phoneMasked
但仍不返回完整身份证。
---
# 第一百一十六章 Matchmaker DTO测试
不得包含:
```text
idNumber
chatContent
riskEvidence
```
---
# 第一百一十七章 活动签到DTO测试
只返回签到必要信息。
---
# 第一百一十八章 日志泄露测试
主动触发:
- 实名错误
- Token错误
- SQL错误
- 上传错误
然后检查日志。
不得出现:
- 完整身份证
- 密码
- Token
- 聊天正文
---
# 第一百一十九章 对象存储测试
测试用户图片:
> 直接访问Bucket URL。
必须:
> 不能Public Read。
---
# 第一百二十章 Signed URL测试
过期后:
> 无法继续访问。
---
# 第一百二十一章 文件越权测试
A拿到B fileId。
调用access-url。
若当前业务无权限:
> 拒绝。
---
# 第一百二十二章 安全测试范围
上线前至少进行:
```text
认证绕过
授权越权
SQL注入
XSS
CSRF(Web)
CORS
文件上传
Token重放
暴力登录
接口限流
ID枚举
敏感数据泄露
对象存储权限
```
---
# 第一百二十三章 SQL注入测试
所有:
- 搜索
- Filter
- 用户输入
- 后台Query
尝试经典注入Payload。
必须:
> 参数化安全。
---
# 第一百二十四章 XSS测试
向:
```text
selfIntro
activityDescription
feedback
reportDescription
matchmakerFollowup
```
写入恶意HTML/Script。
前端:
> 必须转义。
---
# 第一百二十五章 CORS测试
管理后台API:
只允许正式授权Origin。
不能:
> `*`
配合敏感凭证。
---
# 第一百二十六章 暴力登录测试
后台连续错误密码。
必须:
> 限频/锁定。
---
# 第一百二十七章 Rate Limit测试
重点接口:
```text
login
real-name
like
message
report
upload
```
---
# 第一百二十八章 CSRF测试
如后台采用Cookie认证:
> 必须验证CSRF。
如采用Bearer:
重点验证:
- Token存储
- XSS
- CORS
---
# 第一百二十九章 前端兼容性测试
微信小程序至少测试:
- iOS微信主流版本
- Android微信主流版本
尤其:
- 登录
- 手机号
- 图片上传
- WebSocket
- 二维码
---
# 第一百三十章 屏幕适配
至少:
```text
320px
375px
390px
430px
```
重点检查:
- BottomTab
- Dialog
- 长文字
- 表单
- 聊天Input
---
# 第一百三十一章 大字体测试
用户系统字体放大后:
- 文字不能被严重截断
- 关键按钮仍可操作
---
# 第一百三十二章 后台浏览器
建议支持:
- Chrome
- Edge
近期主流版本。
V1不需要兼容IE。
---
# 第一百三十三章 后台分辨率
重点:
```text
1366×768
1920×1080
```
响应式支持更宽屏。
---
# 第一百三十四章 空状态测试
每个列表必须测试:
> 0数据。
例如:
- 无推荐
- 无消息
- 无活动
- 无红娘服务
- 无举报
- 无审核
不能显示空白页。
---
# 第一百三十五章 加载状态测试
网络慢时:
> Skeleton/Loading正确。
不能用户连续重复点击造成重复业务动作。
---
# 第一百三十六章 网络错误测试
API 500/Timeout:
页面应:
- 提示
- 可重试
- 不破坏已有数据
---
# 第一百三十七章 表单防重复提交
按钮提交后:
> Loading + 防双击。
但最终仍需服务端幂等。
---
# 第一百三十八章 草稿恢复测试
Onboarding填写一半退出。
重新进入:
> 能恢复安全草稿。
敏感身份证:
> 不应长期保存在本地草稿。
---
# 第一百三十九章 前端路由状态测试
必须覆盖启动时:
```text
未登录
未绑定
未实名
资料未完成
审核中
need_edit
approved
banned
paused
successful
```
进入正确页面。
---
# 第一百四十章 Deep Link/分享访问测试
如果用户通过活动分享链接进入:
未登录时:
```text
登录
↓
恢复到活动
```
不能登录后丢失原目标。
---
# 第一百四十一章 redirectAfterLogin安全测试
传恶意外部URL:
> 必须被白名单拒绝。
---
# 第一百四十二章 数据统计测试
每个正式指标:
> 必须有测试数据集和预期数字。
---
# 第一百四十三章 注册漏斗测试
构造:
```text
注册10
实名7
提交5
通过4
```
验证全部页面一致。
---
# 第一百四十四章 Match统计测试
2个Like:
> 1个Mutual Match。
不能统计成2。
---
# 第一百四十五章 Chat Started测试
仅SystemMessage:
> 0。
真实用户消息:
> +1。
---
# 第一百四十六章 Two-Way Chat测试
A发1条:
> 0。
B回复:
> +1。
---
# 第一百四十七章 Activity统计测试
```text
申请100
通过90
签到80
```
Attendance:
```text
80 / 90
```
---
# 第一百四十八章 Activity双向意向
10对Mutual:
> Mutual Pair=10。
不是:
> 20对。
---
# 第一百四十九章 Red Matchmaker统计
红娘看20候选。
正式推3人。
Recommendation:
> 3。
---
# 第一百五十章 举报统计
10条举报:
```text
6 confirmed
2 rejected
2 insufficient
```
Confirmed Rate:
```text
6/10
```
如果全部已完成。
---
# 第一百五十一章 Dashboard一致性
同日期条件:
```text
Overview
Matches Analytics
Activity Analytics
```
引用同指标时必须相同。
---
# 第一百五十二章 Summary重算测试
先生成昨日汇总。
修改测试数据后运行:
```text
rebuildMetrics
```
结果:
> 与业务表重新一致。
不能累加重复。
---
# 第一百五十三章 时区测试
23:59与00:01产生的事件:
必须正确归属:
> Asia/Shanghai自然日。
---
# 第一百五十四章 性能测试目标
前面定义的性能数值属于建议目标。
V1建议验证:
```text
普通核心API P95 < 500ms
Recommendation P95 < 1.5s
Dashboard P95 < 2s
```
具体最终SLA可在上线前根据基础设施确认。
---
# 第一百五十五章 性能测试用户规模建议
早期可模拟:
```text
1万用户
5万用户
```
数据库数据量。
并模拟:
```text
100~300并发
```
核心API。
不需要一开始测试百万并发。
---
# 第一百五十六章 推荐性能测试
候选池:
```text
100
500
1000
5000
```
分别测试。
确保SQL先过滤。
---
# 第一百五十七章 Message性能测试
至少模拟:
> 数十至数百同时在线连接。
验证:
- Send
- Push
- Reconnect
V1不需要做超级IM压力测试。
---
# 第一百五十八章 Activity并发重点
真正需要高并发保证的是:
> 最后名额。
即使整体QPS不高:
事务一致性必须正确。
---
# 第一百五十九章 数据库性能测试
重点SQL必须执行:
```text
EXPLAIN ANALYZE
```
检查:
- 推荐初筛
- 消息分页
- 审核待办
- 举报待办
- 活动报名
- Dashboard聚合
---
# 第一百六十章 N+1测试
例如推荐列表6人:
不能产生:
> 几十/上百条SQL。
---
# 第一百六十一章 数据库约束测试
手工绕过Service插入:
- 重复Match
- 重复ActivityRegistration
- 重复clientMessageId
- self relation
数据库应尽量拒绝。
---
# 第一百六十二章 Redis故障测试
停Redis。
必须判断:
哪些功能可降级。
例如:
> 核心数据库业务仍应尽量工作。
不能Redis一挂:
> 数据全部丢失。
---
# 第一百六十三章 Recommendation Cache Redis故障
可以:
> 回数据库实时计算/返回暂时不可用。
不能把Redis当正式推荐关系数据源。
---
# 第一百六十四章 WebSocket Redis故障
如果单实例:
> 可能仍可工作。
如果多实例:
实时跨实例受影响。
消息仍然:
> 已落PostgreSQL。
用户重新拉取应恢复。
---
# 第一百六十五章 对象存储故障测试
图片暂时无法上传。
文字资料:
> 不应全部瘫痪。
页面提示:
> 图片服务暂时不可用。
---
# 第一百六十六章 第三方实名认证故障
第三方超时:
用户看到:
> 认证服务暂时不可用,请稍后重试。
不能:
> 把用户标记为认证失败欺诈。
---
# 第一百六十七章 微信API故障
外部服务失败:
- 记录
- 合理提示
- 不泄露技术错误
---
# 第一百六十八章 灾备测试
至少验证:
```text
数据库备份
恢复
对象存储恢复/版本
配置恢复
```
---
# 第一百六十九章 数据库恢复测试
不是只确认:
> 有备份文件。
必须定期:
> 在测试环境实际恢复。
---
# 第一百七十章 备份恢复验收
恢复后检查:
```text
users
matches
messages
activities
reports
audit
```
关键关联完整。
---
# 第一百七十一章 部署回滚测试
必须提前验证:
```text
新版本部署
↓
发现问题
↓
回滚上一版本
```
数据库migration也要考虑兼容。
---
# 第一百七十二章 Migration测试
所有Migration:
> 在空数据库跑一遍。
同时:
> 从上一版本数据库升级一遍。
---
# 第一百七十三章 Migration不可破坏性原则
正式上线前:
避免直接:
```text
DROP COLUMN
```
导致旧版本无法运行。
采用:
```text
先新增
双版本兼容
后续再清理
```
---
# 第一百七十四章 Staging上线演练
正式生产前至少完整跑一次:
```text
部署
↓
Migration
↓
Seed必要配置
↓
健康检查
↓
核心E2E
↓
回滚演练
```
---
# 第一百七十五章 健康检查
建议:
```text
/health/live
/health/ready
```
检查:
- App
- PostgreSQL
- Redis
- Object Storage关键连通状态(可适度)
---
# 第一百七十六章 Smoke Test
每次发布后立即执行:
```text
登录
查看首页
用户详情
Like测试账号
聊天
后台登录
审核列表
活动列表
```
控制在几分钟内完成。
---
# 第一百七十七章 自动化测试优先级
必须自动化:
```text
Match算法
状态机
API权限
幂等
关键数据库约束
```
---
# 第一百七十八章 不要求所有UI自动化
微信小程序完整UI自动化维护成本高。
V1可以:
> 核心E2E少量自动化 + QA人工回归。
---
# 第一百七十九章 推荐自动化测试比例
核心后端:
> 尽量高覆盖。
尤其:
- Match
- Relationship
- Risk
- Permission
不是单纯追求代码覆盖百分比。
---
# 第一百八十章 测试覆盖率原则
不要:
> 为80%覆盖率写无意义测试。
更重要:
> 高风险业务路径全部覆盖。
---
# 第一百八十一章 Bug严重级别
建议:
```text
P0 Blocker
P1 Critical
P2 Major
P3 Minor
P4 Suggestion
```
---
# 第一百八十二章 P0 Blocker
例如:
- 无法登录
- 无法实名认证
- Match核心链路断裂
- 数据库严重损坏
- 大规模敏感数据泄露
- 权限系统完全失效
结论:
> 禁止上线。
---
# 第一百八十三章 P1 Critical
例如:
- 未Mutual可以聊天
- Block后仍可聊天
- 红娘能看到身份证
- 普通用户可读他人Conversation
- 活动严重超卖
- 重复生成Match
- 封禁用户仍可推荐
结论:
> 必须修复后上线。
---
# 第一百八十四章 P2 Major
例如:
- 某筛选条件失效
- 某统计数字错误
- 图片重试异常
- 活动通知漏发但报名成功
一般:
> 核心影响较大,应上线前尽量清零。
---
# 第一百八十五章 P3 Minor
例如:
- 局部UI错位
- 非关键文案
- 少量动画问题
可评估是否延后。
---
# 第一百八十六章 Bug修复要求
修复:
> 必须有Regression Test。
不能:
> 修完手点一下就关闭Bug。
---
# 第一百八十七章 缺陷模板
建议记录:
```text
标题
环境
账号
前置条件
操作步骤
实际结果
预期结果
截图/RequestId
严重级别
```
---
# 第一百八十八章 UAT用户验收
除了技术测试,还需要:
> 实际运营人员验收。
包括:
- 审核员
- 红娘
- 活动人员
- 管理员
---
# 第一百八十九章 审核员UAT
给审核员:
> 20~50条测试审核任务。
确认:
- 是否知道哪里处理
- 原因是否好选
- 能否快速完成
- 是否容易误操作
---
# 第一百九十章 红娘UAT
给红娘一批模拟用户。
任务:
```text
接单
查看需求
看候选
推荐
跟进
完成服务
```
观察:
> 是否需要额外Excel/纸笔才能完成。
如果需要:
> 工作台还不完整。
---
# 第一百九十一章 活动管理员UAT
完整演练:
```text
创建活动
报名
审核
最后名额
签到
现场异常
反馈
互选
```
---
# 第一百九十二章 志愿者UAT
找一个不了解系统的志愿者。
只给简单培训。
验证:
> 是否能完成签到。
如果签到必须专业IT人员操作:
> 设计失败。
---
# 第一百九十三章 风控员UAT
模拟:
- 骚扰举报
- 诈骗举报
- 无证据举报
- 申诉
确认:
> 处理链路清晰。
---
# 第一百九十四章 普通用户UAT
至少覆盖不同年龄和数字化能力用户。
重点测试:
```text
注册
资料
择偶条件
推荐
Like
聊天
活动
红娘
```
---
# 第一百九十五章 用户UAT核心判断
不只是问:
> “喜欢吗?”
更应该观察:
- 会不会用
- 会不会迷路
- 是否知道下一步
- 是否理解必须/最好
- 是否误解推荐等级
- 是否知道怎么拉黑举报
---
# 第一百九十六章 易用性验收
核心操作:
> 尽量不超过3步。
例如Like:
```text
推荐 → 详情 → 喜欢
```
---
# 第一百九十七章 文案验收
重点检查:
> 是否存在商业婚恋套路。
禁止:
- 桃花爆棚
- 优质男神
- 高价值女性
- VIP
- 成功率92%
---
# 第一百九十八章 合规文案验收
不能出现:
```text
100%真人
100%单身
婚姻状态已官方验证
绝对安全
```
---
# 第一百九十九章 实名标识验收
只能表达:
> 已实名。
不能让用户理解为:
> 全部婚恋资料官方真实。
---
# 第二百章 数据删除/注销验收
测试账号注销。
必须确认:
- 不再推荐
- 不再搜索显示
- 不能新聊天
- 红娘服务停止
- 未开始活动按规则取消
- 历史业务关系不崩溃
---
# 第二百零一章 隐私设置验收
关闭:
```text
visibleInSearch
```
必须不再Find。
关闭:
```text
visibleInRecommendations
```
必须不被推荐。
---
# 第二百零二章 隐私状态缓存测试
修改隐私后:
> 旧缓存立即不再暴露。
---
# 第二百零三章 Audit验收
随机执行:
```text
审核
Ban
活动取消
权限修改
敏感查看
```
后台必须可以查到:
> 谁、什么时候、做了什么。
---
# 第二百零四章 SensitiveAccess验收
查看实名敏感信息。
必须产生:
```text
operator
user
reason
time
```
---
# 第二百零五章 安全事件演练
上线前建议至少桌面演练一次:
> “如果用户身份证数据疑似泄露怎么办?”
团队必须知道:
```text
谁负责
怎么停服务
怎么查影响
怎么保留证据
怎么修复
怎么通知/报告
```
---
# 第二百零六章 生产监控
上线后至少监控:
```text
API 5xx
API P95
数据库连接
CPU
内存
磁盘
Redis
WebSocket
登录失败
第三方实名认证失败率
对象存储错误
```
---
# 第二百零七章 业务监控
重点:
```text
登录成功率
实名认证成功率
审核积压
推荐失败率
Match创建异常
消息失败
活动报名异常
举报积压
```
---
# 第二百零八章 告警分级
建议:
```text
SEV1
SEV2
SEV3
```
---
# 第二百零九章 SEV1
例如:
- 大面积无法登录
- 数据库不可用
- 敏感数据泄露
- 权限绕过
- 大量Match重复
立即处理。
---
# 第二百一十章 SEV2
例如:
- 推荐模块大面积异常
- 聊天大面积失败
- 活动报名不可用
---
# 第二百一十一章 SEV3
例如:
- 单个非核心统计异常
- 局部UI问题
---
# 第二百一十二章 上线方式
建议V1采用:
> 小范围灰度 → 扩大。
不要第一天就:
> 全丹阳大规模宣传。
---
# 第二百一十三章 第一阶段灰度
建议:
```text
内部工作人员
+
少量受邀真实用户
```
例如:
> 数十人。
验证:
- 真实资料填写
- 审核
- 推荐
- Like
- Chat
---
# 第二百一十四章 第二阶段灰度
扩大:
> 数百人。
加入:
- 公益红娘
- 第一场小规模活动
---
# 第二百一十五章 第三阶段
确认:
- 核心错误稳定
- 用户池可用
- 风控流程可运行
再正式推广。
---
# 第二百一十六章 灰度期间重点观察
不是只看注册数。
重点:
```text
实名失败
审核问题
无候选比例
用户是否理解Like
Mutual后是否聊天
举报
红娘工作量
```
---
# 第二百一十七章 Feature Flag
建议关键模块支持:
```text
activityEnabled
matchmakerEnabled
imageChatEnabled
```
出现严重问题:
> 可以单独关闭。
不需要整个平台下线。
---
# 第二百一十八章 Kill Switch
高风险模块建议能够快速关闭:
```text
用户推荐
聊天图片
活动报名
```
由高权限配置。
---
# 第二百一十九章 上线前配置核对
必须确认:
```text
微信AppID
实名认证Provider
对象存储Bucket
数据库
Redis
域名
HTTPS证书
隐私政策版本
用户协议版本
运营组织
角色权限
风控规则
```
---
# 第二百二十章 Secret核对
确认:
> Secret没有进入Git。
---
# 第二百二十一章 数据库上线检查
确认:
```text
Migration全部成功
Indexes存在
Foreign Keys正确
Unique约束存在
备份已完成
```
---
# 第二百二十二章 权限上线检查
必须使用不同角色逐个登录验证。
不能只看配置表。
---
# 第二百二十三章 对象存储上线检查
测试:
> 未授权公网不能下载用户照片。
---
# 第二百二十四章 日志上线检查
制造测试异常。
确认日志:
> 无敏感信息。
---
# 第二百二十五章 Backup检查
生产第一次正式开放前:
> 完成一次基线备份。
---
# 第二百二十六章 Rollback检查
确认:
> 当前版本对应上一稳定镜像/构建包仍可获取。
---
# 第二百二十七章 Go/No-Go总体标准
正式开放前必须开上线评审。
结果:
```text
GO
CONDITIONAL GO
NO-GO
```
---
# 第二百二十八章 NO-GO硬条件
以下任何一项存在:
> 不得正式上线。
```text
存在P0 Bug
存在未接受风险的P1 Bug
核心E2E无法通过
实名认证不可用
资料审核不可用
Mutual Match逻辑错误
聊天权限错误
Block无效
后台严重越权
敏感数据明文泄露
活动名额可严重超卖
数据库无可用备份
无法回滚
```
---
# 第二百二十九章 Conditional GO
例如:
- 少量P2 Bug
- 非核心统计延迟
- 某个P1模块通过Feature Flag暂时关闭
可以由负责人明确接受风险后:
> 有条件上线。
必须记录:
- 问题
- 影响
- 临时措施
- 修复计划
---
# 第二百三十章 GO条件
至少:
```text
核心E2E全部通过
P0=0
P1=0或全部正式接受
核心权限测试通过
隐私测试通过
并发测试通过
数据库备份通过
恢复验证通过
Smoke通过
运营UAT通过
```
---
# 第二百三十一章 V1上线验收清单——用户核心
```text
□ 微信登录
□ 手机绑定
□ 实名
□ 未成年人拦截
□ 资料填写
□ 照片
□ 择偶条件
□ 提交审核
□ 审核状态
□ 首页推荐
□ 找对象
□ 用户详情
□ Like
□ Pass
□ Mutual Match
□ Unmatch
□ Block
□ 举报
□ 隐私设置
□ 注销
```
---
# 第二百三十二章 上线验收清单——聊天
```text
□ 无Match不能聊
□ 有Match能聊
□ Text
□ Image
□ 消息幂等
□ 未读
□ WS重连
□ Block即时禁止
□ Ban即时禁止
□ 历史分页
□ 举报入口
□ RiskNotice
```
---
# 第二百三十三章 上线验收清单——活动
```text
□ 创建
□ 发布
□ 报名
□ 审核
□ 名额
□ 并发最后名额
□ 取消报名
□ 签到
□ 重复签到
□ 反馈
□ 活动互选
□ 双向生成Match
□ 活动取消
```
---
# 第二百三十四章 上线验收清单——红娘
```text
□ 服务申请
□ 分配/接单
□ 用户必要资料
□ 候选
□ Required规则
□ 推荐
□ 跟进
□ Waiting User
□ 活动推荐
□ 风险转交
□ 完成服务
□ 不能看聊天
□ 不能看身份证
```
---
# 第二百三十五章 上线验收清单——后台
```text
□ 统一登录
□ 不同角色菜单
□ Data Scope
□ 用户管理
□ 审核
□ 红娘
□ 活动
□ 风控
□ Organization
□ Operators
□ Roles
□ Permissions
□ Audit
□ Sensitive Access
```
---
# 第二百三十六章 上线验收清单——统计
```text
□ 注册
□ 实名
□ 审核
□ 推荐
□ Like
□ Mutual
□ Chat Started
□ Successful
□ 红娘
□ 活动
□ 举报
□ Dashboard一致性
□ 时区正确
```
---
# 第二百三十七章 上线验收清单——安全
```text
□ IDOR
□ SQL Injection
□ XSS
□ CORS
□ 文件上传
□ Rate Limit
□ 暴力登录
□ Token失效
□ Secret管理
□ 日志脱敏
□ 图片私有
□ 敏感权限
```
---
# 第二百三十八章 上线验收签字角色
建议至少由:
```text
产品负责人
技术负责人
测试负责人
运营负责人
数据/隐私安全负责人
```
确认。
一人团队可以兼任。
但检查项不能因此消失。
---
# 第二百三十九章 上线后24小时
重点观察:
- 登录
- 实名
- API错误
- 数据库
- 推荐
- 消息
- 权限错误
- 用户反馈
---
# 第二百四十章 上线后首周
每天查看:
```text
新增用户
实名异常
审核积压
无候选率
消息失败
举报
```
并快速修复真实用户遇到的问题。
---
# 第二百四十一章 首场线下活动必须现场演练
活动前一天:
> 用测试账号完整模拟。
活动当天提前:
```text
管理员登录
签到设备
二维码
名单
网络
应急方案
```
全部确认。
---
# 第二百四十二章 活动现场技术应急
至少准备:
```text
备用网络
备用手机
手工签到方式
脱敏应急名单
工作人员联系方式
```
避免现场网络问题导致活动无法执行。
---
# 第二百四十三章 数据库生产事故原则
如果发现数据异常:
> 优先停止写入相关模块。
不要为了保持页面可用:
> 继续写错数据。
---
# 第二百四十四章 Match事故原则
如果发现Match重复:
立即考虑关闭:
> Like/Matching Feature Flag。
先保护数据。
---
# 第二百四十五章 权限事故原则
发现越权漏洞:
> 最高优先级。
立即:
- 封闭接口
- 撤销Session
- 检查日志
- 评估访问范围
---
# 第二百四十六章 敏感信息事件
发现身份证/聊天等泄露:
必须进入:
> 安全事件响应流程。
不能当普通Bug处理。
---
# 第二百四十七章 线上Bug修复流程
```text
发现
↓
定级
↓
复现
↓
修复
↓
自动/人工测试
↓
Staging验证
↓
发布
↓
监控
```
---
# 第二百四十八章 不允许直接生产库手改核心数据
紧急情况下如果必须:
> 经过审批/记录。
优先通过:
- 正式管理接口
- 修复脚本
- Migration
---
# 第二百四十九章 修复脚本要求
必须:
- 可重复安全执行
- 有日志
- 先Dry Run
- 备份
- 可验证结果
---
# 第二百五十章 测试文档交付物
建议项目最终维护:
```text
docs/testing/test-strategy.md
docs/testing/test-cases/
docs/testing/permission-matrix.md
docs/testing/go-live-checklist.md
docs/testing/incident-playbook.md
```
---
# 第二百五十一章 自动化测试目录建议
```text
tests/
├── unit/
├── integration/
├── api/
├── permission/
├── concurrency/
├── security/
└── e2e/
```
---
# 第二百五十二章 CI必须执行
每次合并:
```text
Lint
Unit Test
Service Test
API Integration Test
Migration Validation
Build
```
---
# 第二百五十三章 主分支保护
建议:
> 测试未通过不得合并。
如果团队小:
仍然至少:
> CI失败不能直接发布生产。
---
# 第二百五十四章 Release Candidate
正式版本:
```text
v1.0.0-rc.1
```
在Staging完成最终回归。
通过后:
```text
v1.0.0
```
---
# 第二百五十五章 版本号原则
推荐Semantic Versioning:
```text
MAJOR.MINOR.PATCH
```
例如:
```text
1.0.0
1.0.1
1.1.0
```
---
# 第二百五十六章 Hotfix
生产紧急修复:
```text
1.0.1
```
不能随意覆盖:
> 1.0.0原构建物。
保证可追溯。
---
# 第二百五十七章 最重要的测试优先级
如果时间有限,优先级必须是:
```text
安全与越权
↓
数据一致性
↓
核心Match关系
↓
聊天权限
↓
实名认证/审核
↓
活动名额
↓
红娘权限
↓
统计
↓
普通UI细节
```
---
# 第二百五十八章 不允许为了赶上线牺牲的项目
绝不能因为时间紧而跳过:
```text
Block测试
权限越权测试
敏感数据测试
Mutual并发测试
活动名额并发测试
数据库备份
Rollback
```
---
# 第二百五十九章 V1质量目标
平台正式上线至少应该达到:
> **核心链路无阻断。**
> **关键关系无重复。**
> **高风险权限无越权。**
> **敏感数据无明显泄露。**
> **弱网情况下关键业务最终一致。**
> **工作人员能够按照系统完成服务。**
> **发生异常时能够定位、回滚、恢复。**
---
# 第二百六十章 最终质量原则
V1.0必须坚持:
> **能打开页面,不等于功能正确。**
> **功能正确,不等于状态一致。**
> **状态一致,不等于安全。**
> **安全,不等于用户真正会用。**
> **用户会用,不等于线下工作人员能执行。**
因此完整的上线质量标准应该同时包含:
```text
功能正确
+
业务状态正确
+
数据一致
+
并发安全
+
权限正确
+
隐私安全
+
用户易用
+
工作人员可执行
+
异常可恢复
+
数据可追溯
```
最终上线标准不是:
> “开发说完成了。”
而是:
> **用户能顺利完成婚恋服务闭环,工作人员能稳定提供公益服务,系统在异常和风险情况下仍然知道该拒绝什么、保护什么、保留什么、恢复什么。**