跳转至

文件上传测试案例

文件上传涉及功能、兼容性、性能和安全风险。测试时不能只上传一张正常图片就结束。

需求背景

用户可以上传头像,支持 JPG、PNG,大小不超过 5 MB。上传成功后可以预览头像。

测试点拆解

维度 测试点
正常上传 JPG、PNG 文件上传成功
类型限制 GIF、PDF、EXE、脚本文件是否被拒绝
大小限制 小于 5 MB、等于 5 MB、超过 5 MB
文件名 中文、空格、特殊字符、超长文件名
内容安全 后缀伪装、恶意脚本、空文件
预览下载 上传后可预览,地址有效
并发重复 连续上传、多次替换头像
权限 未登录上传、替换他人头像

用例示例

编号 测试点 步骤 预期结果
FILE-001 上传 JPG 选择小于 5 MB 的 JPG 上传 上传成功,头像预览正常
FILE-002 上传 PNG 选择小于 5 MB 的 PNG 上传 上传成功,头像预览正常
FILE-003 超过大小限制 上传 6 MB 图片 上传失败,提示文件过大
FILE-004 非法文件类型 上传 EXE 文件 上传失败,提示格式不支持
FILE-005 后缀伪装 把脚本文件改名为 .jpg 上传 后端识别并拒绝,不允许保存为可执行内容
FILE-006 未登录上传 清空登录态后调用上传接口 返回未登录或无权限
FILE-007 多次替换头像 连续上传两张不同图片 最终显示最后一次上传的头像,旧文件处理符合需求

安全关注点

  • 后端不能只按文件后缀判断类型。
  • 上传目录不应该允许执行脚本。
  • 文件访问地址不应暴露服务器真实路径。
  • 用户不能覆盖或读取其他用户的文件。
  • 上传失败时不要返回服务器敏感路径。

测试数据准备

数据 用途
小于 5 MB 的 JPG 验证正常上传
小于 5 MB 的 PNG 验证正常上传
5 MB 边界文件 验证大小边界
6 MB 图片 验证超限
改后缀脚本文件 验证后端内容识别
中文和特殊字符文件名 验证文件名处理
未登录状态 验证鉴权

测试文件要放在专门目录中,文件名写清用途,例如 valid_avatar.jpgover_5mb.pngfake_jpg_script.jpg

执行步骤示例

  1. 登录用户,上传正常 JPG,确认预览成功。
  2. 上传正常 PNG,确认可以替换头像。
  3. 上传 5 MB 边界文件,确认是否符合需求。
  4. 上传 6 MB 文件,确认被拒绝且提示明确。
  5. 绕过前端限制,直接用接口上传 EXE 或改后缀脚本。
  6. 清空登录态后调用上传接口,确认返回未登录。
  7. 刷新页面或重新登录,确认头像地址仍有效。

接口与存储校验示例

POST /api/files/avatar
GET  /api/users/me
SELECT user_id, file_url, file_type, file_size, created_at
FROM user_files
WHERE user_id = 10001
ORDER BY created_at DESC;

缺陷示例

字段 内容
标题 后端仅校验文件后缀,脚本文件改名为 JPG 后可上传
前置条件 用户已登录,准备一个脚本文件并改名为 avatar.jpg
复现步骤 通过接口上传该文件
实际结果 上传成功并返回可访问地址
期望结果 后端识别真实文件类型并拒绝上传
影响 可能造成恶意文件存储或脚本执行风险

容易漏测

  • 只测正常图片,不测非法类型。
  • 前端限制了类型,但接口绕过后仍可上传。
  • 图片超过限制后没有友好提示。
  • 文件名包含中文或特殊字符时保存失败。
  • 头像上传成功但刷新后丢失。

复盘问题

  • 为什么文件上传是安全测试重点?
  • 前端限制文件类型是否足够?
  • 上传文件应该如何命名,才能避免重名覆盖?