测试与验收
软件开发测试怎么做?从测试计划、接口验证到上线验收的完整清单
软件开发测试不只是点页面。本文从测试计划、环境和数据、用例、业务闭环、权限、接口回调、缺陷分级、性能、安全、发布门禁到上线交接,整理一份可执行的测试验收清单。
软件开发测试不是上线前点一遍页面,也不是把所有问题都交给用户发现。测试的目标,是在约定的环境和数据条件下,证明核心流程、权限、接口、异常处理和交付材料符合范围,并且出现问题时可以定位、修复和回滚。
本文适用于企业官网、管理系统、SaaS、APP、小程序和软件外包项目。内容重点是如何制定测试计划、写测试用例、验证接口与第三方回调、管理缺陷、设置发布门禁和完成上线验收。性能阈值、合规要求和设备范围需要结合项目实际确认,本文不构成固定质量或排名承诺。
一、先定义测试要证明什么
测试开始前先写测试目标,而不是直接打开浏览器找问题。目标应对应项目范围和业务风险,例如:销售能否完成客户建档到跟进,员工是否只能看到授权记录,支付回调失败后订单是否可恢复,管理员能否导出正确数据,部署失败时是否可以回滚。
可以用“风险、场景、证据、负责人”建立测试范围表:
| 风险 | 关键场景 | 需要留下的证据 | 负责人 |
|---|---|---|---|
| 核心流程无法完成 | 创建、提交、审批、完成、取消 | 测试用例、操作记录和版本号 | 业务负责人 |
| 数据被越权查看 | 不同部门、角色和外部账号访问 | 权限矩阵、请求日志和截图 | 产品或安全负责人 |
| 接口重复处理 | 重复回调、超时重试、乱序消息 | 请求编号、幂等结果和补偿记录 | 技术负责人 |
| 上线后无法恢复 | 发布失败、数据错误、服务异常 | 备份、恢复和回滚演练记录 | 运维负责人 |
先测试高价值、高频率和高风险路径,再扩展到低频功能和视觉细节。测试范围应包含明确不测试的内容、已知限制和依赖条件,否则报告中的“通过”容易被误解成系统没有任何问题。
二、测试计划至少包含八项内容
一份可执行的测试计划应写清楚:
- 测试对象:版本、页面、接口、后台、移动端和部署环境。
- 测试范围:本次包含的模块、场景、角色、设备和浏览器。
- 不在范围内的内容:暂不支持的平台、未完成的接口、已知限制和后续版本。
- 进入条件:需求和原型已确认,测试环境可访问,账号和数据已准备。
- 退出条件:阻断问题关闭,关键用例通过,剩余问题有负责人和处理决定。
- 测试角色:开发自测、测试人员、业务人员、管理员和外部协作者分别负责什么。
- 问题流程:如何提交、分级、分配、修复、回归和关闭缺陷。
- 交付证据:测试报告、版本说明、日志、截图、接口回执和验收签字存放在哪里。
测试计划要随版本变化更新。需求、接口、权限或数据规则发生变化时,补充受影响的用例和回归范围。项目的需求基线可以参考软件定制开发需求分析清单,交付物和验收材料可以参考软件定制开发交付物清单。
三、测试环境和数据要接近真实使用
开发环境里“能运行”不等于用户环境里“可用”。测试环境应尽量与生产保持相同的运行时版本、数据库类型、关键配置、域名路径、消息队列和第三方接口模式;不能完全一致时,要列出差异和可能影响。
测试数据至少准备以下几类:
- 正常数据:覆盖常用业务路径和主要字段组合;
- 空数据:新账号、新部门、没有订单、没有库存或没有通知时的页面状态;
- 边界数据:最大长度、最小值、最大金额、跨月日期、超大批量和特殊字符;
- 冲突数据:重复客户、重复 SKU、同一资源被同时预约或库存不足;
- 异常数据:缺失字段、无效状态、失效账号、过期链接和第三方错误回执;
- 脱敏数据:用于真实流程验证,但不把完整生产个人信息复制到开发环境。
每个测试账号要标明角色、组织、数据范围、创建时间和回收时间。不要让所有人都使用管理员账号测试,否则权限问题和真实操作路径无法被发现。测试数据的导入、清理、重置和备份也应有步骤,避免一次失败后无法复现。
四、测试用例怎么写才可复现
测试用例不是一句“检查客户管理是否正常”。它至少应包含编号、前置条件、角色、数据、操作步骤、预期结果、实际结果、状态、版本和问题编号。
| 字段 | 示例写法 |
|---|---|
| 用例编号 | CRM-CUST-001 |
| 测试目标 | 部门销售创建一个新客户 |
| 前置条件 | 销售账号已登录,客户名称不存在 |
| 测试数据 | 客户名称、联系人、手机号、来源 |
| 操作步骤 | 打开客户页,填写字段,保存并搜索 |
| 预期结果 | 保存成功,归属正确,列表可搜索,日志有记录 |
| 异常检查 | 重复名称提示,必填缺失不保存,重复点击不产生两条 |
| 证据 | 页面截图、请求编号、版本号和日志位置 |
用例要同时写成功和失败路径。对每条核心流程,至少覆盖创建、编辑、提交、退回、撤回、取消、重复操作、无权限、网络中断和恢复。预期结果应尽量是可观察的状态、数据、消息或日志,少用“体验良好”“符合预期”这类无法复核的表述。
五、功能测试要按业务闭环执行
功能测试的最小单位不是一个页面,而是一条从触发到结果的业务闭环。以“线索到成交”为例,可以测试线索创建、分配、跟进、转商机、报价、合同、回款和关闭;以“采购到入库”为例,需要检查申请、审批、下单、收货、质检、入库和对账之间的数据关系。
每条闭环都要明确:
- 什么条件可以开始,什么条件算完成;
- 哪些角色可以推动状态,哪些角色只能查看;
- 退回、撤回、作废和重新提交如何处理;
- 同一数据被两个角色同时修改时以什么规则为准;
- 失败后是否保留草稿、错误原因和重试入口;
- 统计和导出的数据是否与详情页保持一致。
功能测试通过,不代表所有数据都正确。要用导入前后数量、关键金额、库存、状态和关联关系做抽样对账。旧系统替换或数据迁移项目还应单独执行盘点、清洗、试迁和回滚测试,可参考旧系统数据迁移方法。
六、权限测试要绕过前端再验证一次
权限至少包括功能、组织、记录、字段和操作五个维度。前端不显示按钮不能作为安全控制,测试人员应直接修改请求参数、访问深层 URL、替换记录 ID、调用导出接口和打开附件链接,验证服务端是否拒绝越权操作。
权限测试矩阵
| 角色 | 查看范围 | 可执行动作 | 必须验证的限制 |
|---|---|---|---|
| 普通员工 | 本人或授权记录 | 创建、编辑草稿、提交 | 不能查看同事私有数据和管理配置 |
| 部门负责人 | 本部门或授权组织 | 审批、退回、查看汇总 | 不能越过组织边界查看其他部门 |
| 财务或运营 | 指定金额、订单或回款字段 | 对账、导出、确认 | 敏感字段和无关模块需要隔离 |
| 只读用户 | 明确的查询范围 | 查看和有限筛选 | 不能修改、删除、导出未授权数据 |
| 外部协作者 | 指定项目或共享记录 | 上传资料、查看进度 | 不能访问内部客户、价格和系统配置 |
还要测试组织调整、离职账号、临时代理、角色回收和历史审批。权限变更应有生效时间和操作记录,不能让离职用户继续登录,也不能因为组织树变化导致历史数据失去责任人。
七、接口和第三方回调重点测试失败
接口测试不能只验证 HTTP 200。要确认业务数据是否真的保存、状态是否正确、重复请求是否幂等、失败后是否可重试,以及双方能否对账。
接口测试至少覆盖:
- 正常请求、必填字段缺失、字段类型错误和枚举值变化;
- 超时、断网、连接被关闭、服务端 5xx 和限流;
- 同一个请求重复发送、回调重复到达和消息乱序;
- 外部系统返回成功但本地事务失败,或本地成功但响应丢失;
- 鉴权过期、密钥轮换、签名错误和回调地址错误;
- 部分成功、人工补录、重试上限和异常队列;
- 接口日志是否隐藏密码、令牌、完整个人信息和敏感业务内容。
支付、库存、订单、审批和消息接口要有幂等键或等效的重复判断机制。接口文档应写明数据源、同步方向、字段映射、负责人、调用费用和失败处理。ERP 或企业微信对接可以参考ERP 接口与数据迁移规划和企业微信审批工作流规划。
八、缺陷分级和回归测试要有规则
缺陷报告至少写清环境、版本、角色、数据、复现步骤、预期结果、实际结果、频率、截图或日志。分级应按业务影响,而不是按报告人的感觉。
| 等级 | 判断标准 | 发布处理 |
|---|---|---|
| 阻断 | 无法登录、数据隔离失效、核心交易无法完成、数据不可恢复 | 不允许发布 |
| 严重 | 主要流程错误、金额或库存不一致、接口重复处理 | 原则上发布前关闭,例外需负责人书面确认 |
| 一般 | 非核心功能异常、特定条件下失败、影响部分用户 | 有修复版本和明确期限 |
| 建议 | 文案、间距、交互优化,不影响约定功能 | 进入后续迭代或产品清单 |
修复一个问题后,不只重测原步骤,还要根据改动范围做回归:关联页面、权限、接口、报表、导入导出和移动端都可能受到影响。每次发布记录修复版本、回归范围、通过数量、未关闭问题和风险接受人。
九、性能、安全和兼容性测试怎么定口径
性能目标必须带测试条件。要说明设备、网络、并发量、数据量、页面、接口、测试工具和统计方式。可以分别观察页面加载、搜索、列表、批量操作、文件上传、接口响应和后台任务,不要只报告一个首页分数。
常见测试项目包括:
- 移动端和桌面端首屏、交互响应、布局稳定性和大表格滚动;
- 接近日常峰值的并发登录、查询、提交、导出和文件上传;
- 大数据量下的分页、筛选、排序、搜索索引和报表生成;
- 证书、跨站请求、输入校验、文件类型、权限绕过和敏感日志;
- 主要浏览器、手机系统、屏幕尺寸、弱网、断网恢复和低电量设备;
- 备份完整性、恢复时间、恢复后的权限和数据一致性。
Google 的 Core Web Vitals 可作为网页体验参考,但实验室结果不等于所有用户的真实体验。企业系统的性能还要结合真实业务峰值、数据量和设备条件验收。安全测试发现高风险问题时,应暂停发布并完成修复或经过明确的风险接受流程。
十、上线前设置发布门禁
发布门禁是“满足哪些条件才允许上线”的共同规则,不是测试人员单方面阻止项目。建议至少包括:
- 核心业务闭环的关键用例全部通过;
- 阻断缺陷关闭,严重缺陷已修复或由负责人书面接受风险;
- 角色、记录、字段和导出权限完成越权测试;
- 关键接口的超时、重复回调、失败补偿和对账通过;
- 正式数据迁移完成试迁和抽样对账;
- 生产配置、证书、域名、定时任务和第三方回调已核对;
- 备份已完成,恢复或回滚步骤至少演练一次;
- 监控、日志、告警、联系人和故障响应渠道已准备;
- 业务手册、培训、管理员账号和交接资料已完成;
- 上线时间、观察窗口、回滚触发条件和决策人已确认。
上线不是测试结束。上线当天要检查首页或登录、核心提交、消息、接口、数据、日志、备份和监控;上线后第一周按约定频率查看错误率、异常单、接口失败、权限事件、性能和真实用户反馈。维护责任和 SLA 可以参考软件开发后期维护与 SLA。
十一、测试报告应该让别人复查
测试报告不需要堆很多截图,但要让没有参加测试的人知道测了什么、没测什么、在哪个版本、什么结果和还有什么风险。至少包含:版本与环境、范围与排除项、用例数量和通过率、缺陷统计、未关闭问题、接口与权限结果、性能条件、迁移和恢复结果、上线建议以及风险接受人。
通过率不能单独证明质量。如果核心用例只有十条,其他低风险用例通过率很高,也不能掩盖一条支付或权限测试失败。报告应把核心路径单独列出,并说明测试数据是否足够接近真实场景。
可直接复制的测试验收清单
项目名称:
版本号和测试日期:
测试环境、设备、浏览器和网络:
测试角色、组织范围和账号回收时间:
本次包含的页面、流程、接口和明确排除项:
核心业务闭环及关键通过条件:
正常、空数据、边界、重复、越权和异常数据:
第三方接口、回调、幂等、超时和补偿用例:
缺陷等级、响应期限、修复版本和复测人:
数据迁移、数量核对、金额或库存对账结果:
备份、恢复、部署、回滚和密钥轮换结果:
未关闭问题、风险接受人和上线限制:
上线观察窗口、监控指标和故障联系人:
常见问题
软件开发测试应该由开发人员还是客户负责?
开发人员负责自测、单元和接口验证,测试人员或技术负责人负责独立检查,业务人员负责确认流程和结果是否符合实际工作。三者不能完全互相替代,尤其是权限、数据口径和验收场景需要业务参与。
没有专职测试人员还能上线吗?
可以,但必须明确测试负责人,准备不同角色账号和可复现用例,并把核心流程、异常、权限、备份恢复和发布门禁补齐。没有专职岗位不等于可以省略测试证据。
测试通过后还会出现问题吗?
会。测试只能在约定范围、环境和数据下降低风险,不能证明系统在所有用户和未来变化中绝对没有问题。上线后要保留监控、日志、反馈、回滚和维护流程。
软件外包项目什么时候开始验收?
从第一个可访问版本就可以按核心用例逐步验收,不要等到最后一天才首次让业务人员使用。每个里程碑确认范围和问题,最终上线再完成整体验收和交接。外包执行方式可以参考软件开发外包执行清单。
测试用例越多越好吗?
不是。用例应覆盖真实风险和关键路径,且能够执行、复现和维护。数量很多但没有角色、数据、预期结果和异常路径,反而会让测试报告失去判断价值。
测试报告能保证百度或 Google 排名吗?
不能。测试可以检查页面可访问、状态码、canonical、结构化数据、性能和表单链路,但搜索排名还取决于内容质量、竞争环境、抓取、索引和持续运营。