FindBeauty[图片编辑AI项目]测试报告篇

寻美 FindBeauty 测试报告

1. 测试概述

项目 说明
项目名称 寻美 FindBeauty --- AI 智能图片处理平台
测试版本 v0.0.1-SNAPSHOT
测试类型 集成测试、单元测试、故障注入测试
测试框架 pytest 8.4.2 + pytest-html 4.2.0 + pytest-mock 3.15.1
测试环境 macOS 26.5.1 (ARM64) + Python 3.9.6 + Java 17
报告日期 2026-06-16

2. 测试环境

组件 版本/配置
Spring Boot 后端 3.2.0(端口 8081)
Python Flask 服务 3.0+(端口 5000)
MySQL 8.0
Redis 7.x
JDK OpenJDK 17.0.15
Python 3.9.6
测试账号 test_auto

3. 测试范围与用例分布

3.1 集成测试(Java 后端 HTTP 接口)

模块 测试类 用例数 说明
用户认证 TestAuth 3 登录注册、缺少参数、登出
图片上传 TestFileUpload 3 正常上传、无文件、无 Token
图片查询 TestFileQuery 1 我的图片列表
图片搜索 TestFileSearch 2 文搜图、空关键词
图片编辑 TestFileEdit 2 编辑本人图片、越权编辑
图片合并 TestFileMerge 2 合并两张图、缺参数
图片删除 TestFileDelete 3 删除已有、不存在、无 Token
Agent 对话 TestAgentConversation 9 CRUD、空标题、不存在、无 Token
Agent 执行 TestAgentExecute 5 空指令、无 Token、执行、已有对话追加
历史记录 TestRecord 2 查询记录、无 Token
小计 32

3.2 单元测试(Python 服务核心逻辑)

模块 测试类 用例数 说明
图片描述与审核 TestDescribeImage / TestValidateImage 8 AI 描述生成、人像/穿搭审核、LLM 异常降级
CLIP 向量化 TestClipFunctions 4 图片→512d 向量、文本→512d、归一化、异常
字段提取 TestGetFieldFromRequest / TestExtractUserId / TestExtractOssUrl 5 JSON/Form/Query 兼容读取
文本相似度 TestNormalizeText / TestCharNgrams / TestTextSimilarity / TestCosineSimilarity512 17 搜索核心算法的全覆盖
Agent 输出解析 TestParseOutput 6 JSON 提取、格式容错、嵌套
Agent 工具函数 TestAgentTools 8 编辑/合并/描述 成功/失败/路径不存在
Agent 执行逻辑 TestExecutePlan 5 未初始化、正常路径、对话记忆、LLM 异常
Agent 行为断言 TestAgentToolOrder / TestAppendModify / TestBoundary / TestConversationMemory 14 工具顺序、追加修改、边界、记忆截断
图片工具函数 TestToDataUri / TestDownloadToLocal / TestSafeExtractImage / TestCallQwenEdit / TestReadImage 13 data URI、下载、URL提取、文件读取
故障注入 TestRedisFailure / TestDashScopeFailure / TestExternalHttpFailure / TestRequestValidation 17 Redis 不可用、API 超时、OSS 故障、参数校验
Agent 工具断言 test_agent_assertions.py 7 编辑/合并/描述的 mock 回归
小计 115

3.3 总计

类别 用例数
集成测试 32
单元测试 115
合计 147

4. 测试策略

4.1 测试分层

复制代码
┌─────────────────────────────────┐
│   集成测试(API 层)              │  → 真实 HTTP 请求,验证端到端流程
├─────────────────────────────────┤
│   单元测试(Mock 层)             │  → mock 外部依赖,验证核心逻辑
├─────────────────────────────────┤
│   故障注入测试                   │  → 模拟外部故障,验证降级与容错
└─────────────────────────────────┘

4.2 设计原则

  • Session 级 token 复用:所有集成测试共用一次登录获取的 JWT,减少重复鉴权
  • pytest-order 控制顺序:上传 → 查询 → 搜索 → 编辑 → 合并 → 删除,保证数据依赖
  • TestResultCollector 数据收集器:记录每次 API 调用的状态与详情,输出结构化报告
  • Mock 隔离外部依赖:单元测试通过 mock 隔离 DashScope、CLIP、Redis、OSS 等不可控服务
  • 故障注入覆盖:验证 Redis 宕机、DashScope 超时、OSS 下载失败等场景下的降级行为

4.3 测试数据管理

  • 上传测试使用内存内联的极小 PNG,避免依赖外部文件
  • 登录使用固定测试账号,后端自动处理"不存在即注册"
  • 故障注入测试不依赖真实 Redis/OSS 实例

5. 测试执行

5.1 执行命令

bash 复制代码
# 集成测试(需先启动 Java + Python 服务)
cd find_beauty_python/tests
python run_tests.py --server http://localhost:8081

# 单元测试(无需启动服务,mock 隔离)
cd find_beauty_python/tests
pytest unit/ -v

5.2 测试报告

  • HTML 报告test_report.html(pytest-html,自包含单文件)
  • JSON 报告test_report.json(结构化数据,含通过率统计)
  • Markdown 报告TEST_REPORT.md(本文档)

6. 测试结果

6.1 总体统计

指标 数值
总用例数 147
通过 143
失败 1
跳过 3
错误 0
通过率 97.3%

6.2 失败/跳过用例明细

编号 用例 状态 原因分析
1 test_upload_success Failed 测试断言预期 HTTP 200,但上传的 1×1 极小 PNG 被 AI 内容审核正确拦截(既非人物也非服装),后端返回 500。AI 审核行为正确,测试断言需适配
2 test_edit_image Skipped 依赖 test_upload_success 的结果,上传失败导致无可用图片
3 test_merge_images Skipped 同上
4 test_delete_image Skipped 同上

6.3 根因分析

1 个失败和 3 个跳过的根因相同 :测试 fixture 使用的 1×1 极小 PNG 不符合业务规则(仅允许人物人像和服装穿搭),被 AI 内容审核正确拦截。实际这是 AI 审核模块功能正确的表现,但测试断言预期的是 HTTP 200。

修复建议 :将测试 fixture 的 MINI_PNG 替换为一张真实的人物或服装类图片(预置到测试资源目录),确保图片能通过 AI 审核,从而走通完整业务链路。

7. 缺陷统计

严重程度 数量 说明
高危 0 ---
中危 0 ---
低危 0 ---
建议 1 测试 fixture 替换为真实图片,消除上传失败的假阳性

8. 测试结论

8.1 质量评估

本次测试共执行 147 条用例,除去测试数据问题导致的 1 失败 3 跳过,核心业务逻辑全部通过,通过率 97.3%。

测试覆盖了:

  • 正向流程:注册 → 上传 → 查询 → 搜索 → 编辑 → 合并 → 删除 完整链路
  • 异常场景:缺参数、无 Token、越权访问、资源不存在、空值输入
  • AI 稳定性:DashScope 超时/限流降级、Redis 不可用容错、OSS 下载失败
  • Agent 行为:工具调用顺序、对话记忆、追加修改、JSON 解析容错

8.2 风险提示

  • 集成测试依赖 Java + Python 双服务同时运行,Python 未启动时 Agent 执行相关测试预期返回 500
  • 图片编辑/合并接口依赖 DashScope API,响应时间 30~120s,CI 中需设置足够超时
  • CLIP 模型首次加载耗时长,单元测试通过 mock 替代,真实环境需确认 GPU 环境

8.3 改进建议

  1. 替换测试 fixture 为真实图片,修复上传环节的假阳性
  2. 补充并发/压力测试用例,验证 AI 接口高峰期表现
  3. 增加大文件上传(接近 50MB OSS 限制)边界测试
  4. CI 中集成 pytest,实现代码提交后自动回归