本测试套件为 @imgly/background-removal-js 项目提供了全面的自动化测试,覆盖以下方面:
- 单元测试 - 核心工具函数测试
- 集成测试 - 完整流程测试
- 性能测试 - 大图片、批量处理测试
- 异常处理测试 - 各种错误场景的容错处理
- 跨浏览器测试 - Chrome、Firefox、Safari 浏览器兼容性测试
packages/node-e2e/
├── src/
│ ├── unit/
│ │ ├── utils.test.js # 核心工具函数单元测试
│ │ └── config.test.js # 配置验证测试
│ ├── integration/
│ │ └── integration.test.js # 完整流程集成测试
│ ├── performance/
│ │ └── performance.test.js # 性能测试
│ ├── error/
│ │ └── error.test.js # 异常处理测试
│ └── browser/
│ ├── browser.test.js # Playwright 跨浏览器测试
│ └── test-page.html # 浏览器测试页面
├── jest.config.js # Jest 配置
├── playwright.config.js # Playwright 配置
└── package.json # 依赖和脚本
测试内容:
- 测试图像放大和缩小
- 测试像素值范围保持 (0-255)
- 测试不同尺寸的输入输出
- 测试 HWC (Height, Width, Channels) 到 BCHW (Batch, Channels, Height, Width) 格式转换
- 测试像素归一化
- 测试自定义 mean 和 std 参数
- 测试 Float32 到 Uint8 的正确转换
- 测试张量形状保持
- 测试按比例缩小尺寸
- 测试原始尺寸小于最大尺寸的情况
- 测试不同宽高比的处理
applyContrast- 对比度调整applyThreshold- 阈值处理applyBoxBlur- 方框模糊applyGaussianBlur- 高斯模糊applyErosion- 腐蚀操作applyDilation- 膨胀操作applyEdgeMode- 边缘模式处理
- 测试创建正确尺寸的背景
- 测试颜色交替模式
- 测试纯色背景合成
- 测试图像背景合成
- 测试 alpha 通道混合
测试内容:
- 默认配置测试
- 有效配置验证
- 模型别名测试 (large/small/medium → isnet/isnet_quint8/isnet_fp16)
- 输出格式验证 (image/png, image/jpeg, image/webp, image/x-rgba8, image/x-alpha8)
- 无效格式拒绝
- 质量设置验证
- publicPath 必须是有效 URI
- 无效路径拒绝
- device: cpu/gpu 验证
- rescale: true/false
- proxyToWorker: true/false
- mask 配置 (smoothness, feather, edgeMode, contrast, threshold)
- background 配置 (transparent, solid, image, checkerboard)
测试内容:
- 本地图片文件处理
- 不同输出格式 (PNG/JPEG/WebP)
- 不同质量设置
- 进度回调支持
- 不同模型类型 (small/medium/large)
- 基本分割功能
- alpha8 格式输出
- 前景移除功能测试
- 掩码应用到图片
- Buffer
- Uint8Array
- 文件路径字符串
- 调试模式
- 结果保存到文件
- alpha 通道信息验证
- 模型缓存测试
测试内容:
- 首次加载时间(包含模型初始化)
- 后续加载时间(利用模型缓存)
- 性能提升百分比计算
- 不同批次大小 (1/3/5 张图片)
- 顺序处理 vs 并行处理对比
- 平均处理时间计算
- small vs medium 模型
- 处理时间 vs 输出大小
- 质量/性能权衡
- 处理前后内存使用对比
- 多次处理后内存趋势
- 内存使用合理性验证
- PNG/JPEG/WebP 格式对比
- 不同质量设置的影响
- 输出大小 vs 处理时间
测试内容:
- 无效模型名称
- 无效输出格式
- 无效 publicPath
- 无效 mask 配置(边界值)
- 无效 background 配置
- 不存在的文件路径
- 空数据
- 无效图片格式
- null/undefined 输入
- 空字符串路径
- 无效 publicPath
- resources.json 不存在
- 网络错误 (ECONNRESET)
- 404 响应
- 500 服务器错误
- 请求超时
- 数字类型图片源
- 对象类型(非 Blob/Buffer)
- 数组类型
- 多个并发请求中的失败处理
- Promise.allSettled 行为验证
- 错误消息的有意义性
- 配置验证错误的具体信息
- 极小图片处理
- 单通道图片
- 处理后资源清理
- 内存增长控制
测试内容(Chrome/Firefox/Safari):
- 测试页面正确加载
- API 可用验证
- preload 功能测试
- 预加载时间测量
- 基本背景移除
- 输出格式验证
- 处理时间测量
- PNG/JPEG/WebP 格式
- 不同格式输出大小对比
- 进度事件触发
- 进度数据正确性
- 首次调用 vs 后续调用
- 缓存带来的性能提升
- segmentForeground 功能
- CPU 设备配置
- mask 配置 (smoothness, feather, edgeMode, threshold)
- background 配置 (transparent, solid, checkerboard)
- OffscreenCanvas 支持
- WebGL/WebGPU 支持
- 硬件并发数
- Node.js >= 16.x
- pnpm 包管理器
- 项目已构建 (
pnpm run build)
cd packages/node-e2e
pnpm install# 运行所有 Node.js 测试
pnpm run test
# 运行单元测试
pnpm run test:unit
# 运行集成测试
pnpm run test:integration
# 运行性能测试
pnpm run test:performance
# 运行异常处理测试
pnpm run test:error
# 运行 CI 友好的测试
pnpm run test:ci# 安装 Playwright 浏览器
pnpm run playwright:install
# 运行浏览器测试
pnpm run test:browser- 测试环境: Node.js
- 超时: 300 秒
- 单工作器运行(避免内存竞争)
- HTML 报告输出
- 浏览器: Chromium, Firefox, WebKit
- 截图: 仅失败时
- 视频: 失败时保留
- 自动启动本地测试服务器
性能测试会收集以下指标:
-
处理时间
- 首次加载时间(模型初始化)
- 后续加载时间(缓存命中)
- 平均每张图片处理时间
- 批量处理总时间
-
内存使用
- RSS (Resident Set Size)
- Heap Total
- Heap Used
- External Memory
-
输出质量
- 输出文件大小
- 不同格式对比
- 模型加载: 首次运行测试需要下载/加载模型,可能需要较长时间
- 网络连接: 部分测试需要网络连接来获取资源
- 内存: 性能测试会监控内存使用,建议在有足够内存的机器上运行
- 超时: 集成测试和性能测试有较长的超时时间,正常运行不会触发
- 浏览器测试: 需要先安装 Playwright 浏览器
- 单元测试: 全部通过
- 集成测试: 全部通过(验证核心功能)
- 性能测试:
- 后续加载时间 < 首次加载时间 * 1.5
- 多次处理后内存增长 < 500MB
- 异常测试: 全部通过(验证错误处理)
- 浏览器测试: 全部通过(验证跨浏览器兼容性)
如果测试失败,检查以下方面:
- 环境问题: Node.js 版本、依赖安装、网络连接
- 模型问题: 模型文件是否存在、publicPath 配置是否正确
- 资源问题: 内存不足、磁盘空间不足
- 超时问题: 测试机器性能较慢,考虑增加超时时间
测试套件设计为 CI/CD 友好:
# CI 环境运行
pnpm run test:ci- 单工作器运行,避免并发问题
- 合理的超时设置
- 结构化的测试报告