# 丹阳公益婚恋服务平台 # 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 功能正确 + 业务状态正确 + 数据一致 + 并发安全 + 权限正确 + 隐私安全 + 用户易用 + 工作人员可执行 + 异常可恢复 + 数据可追溯 ``` 最终上线标准不是: > “开发说完成了。” 而是: > **用户能顺利完成婚恋服务闭环,工作人员能稳定提供公益服务,系统在异常和风险情况下仍然知道该拒绝什么、保护什么、保留什么、恢复什么。**