# CaseAgent **Repository Path**: kyleoo/case-agent ## Basic Information - **Project Name**: CaseAgent - **Description**: 作者是一名很普通的测试工程师,目的是边实践边学习。 本项目使用AI编程工具和大模型协助完成,属于vibe coding项目,作者仅负责设计、审查、测试工作。 欢迎各位大佬体验本项目,如果有任何设计、流程、使用缺陷,欢迎指点,不胜感激! - **Primary Language**: Python - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2026-04-08 - **Last Updated**: 2026-05-20 ## Categories & Tags **Categories**: ai **Tags**: None ## README # AI Test Design Workbench > 基于大语言模型的智能测试用例生成工作台,从需求、文档和图片中自动生成结构化测试用例。 --- ## 项目简介 AI Test Design Workbench 是一个面向测试工程师的轻量级 Web 工具,通过接入大语言模型(LLM),将产品需求、参考文档和界面截图转化为结构化、可评审的测试用例。 适合的场景: - 需求评审阶段快速生成测试大纲 - 历史缺陷/用例作为上下文,提升生成质量 - 支持 Markdown / CSV / Excel 导出,无缝接入现有测试流程 --- ## 设计背景与价值 测试用例编写往往占用了大量重复性工时,尤其在需求变更频繁、业务复杂度高的项目中。人工编写的用例容易遗漏边界条件,且缺乏可追溯的历史知识沉淀。 本项目通过 LLM 自动生成 + 知识库 RAG 的方式: - **提升效率**:输入需求即可获得覆盖正常/异常/边界的测试用例 - **保证一致性**:结构化输出(固定列)便于评审和修改 - **知识复用**:历史文档自动索引,后续生成时自动引用相关知识 - **多模态输入**:支持图片理解(UI 截图、架构图等)作为参考材料 --- ## 核心功能架构 整体架构采用异步多阶段生成管线,确保可观测性与可控性。 ```mermaid flowchart TD A[用户输入
需求文本 / 文档 / 图片] --> B{是否需要
摘要提炼?} B -- 仅文本 --> C[直接提交生成] B -- 有附件 --> D[LLM 提炼需求摘要
识别模块与开放问题] D --> E{用户确认摘要
可编辑补充} E -- 确认 --> F[提交异步生成任务
存入数据库] E -- 修改 --> D F --> G[后台 Worker 处理
多阶段管线] G --> H[Phase1: 检索知识库
相关历史文档] H --> I[Phase2: LLM 生成
结构化测试用例] I --> J[Phase3: 后处理
去重 / 校验 / 补全] J --> K[Phase4: 生成导出文件
Markdown / CSV / XLSX] K --> L[Phase5: 向量化存储
用于后续检索] L --> M[WebSocket 实时推送
进度与阶段状态] M --> N[前端展示结果
预览 / 导出 / 历史] ``` ### 功能模块 | 模块 | 说明 | |------|------| | 测试用例生成工作台 | 左侧输入需求与附件,右侧实时预览结果与进度 | | 异步多阶段管线 | 通过 Celery Worker 后台执行,支持长时间生成任务 | | 知识库 RAG | 上传/录入历史文档,自动分块与向量化,生成时检索引用 | | 多模型支持 | 同时接入 OpenAI、DeepSeek、MiniMax 等模型,前端可切换 | | 工具集 | 时间戳转换、JSON 格式化等日常调试工具 | | 历史记录与导出 | 查看生成历史、重新加载结果、一键导出 Markdown/CSV/Excel | --- ## 技术栈 - **后端**:FastAPI + SQLAlchemy + Celery + Redis - **前端**:React 19 + TypeScript + Vite + Ant Design - **数据库**:PostgreSQL(生产)/ SQLite(开发)+ Redis(任务队列) - **向量检索**(可选):DashScope / OpenAI Embedding - **模型接入**:OpenAI 兼容接口(支持多个供应商) --- ## 环境变量配置 从 `.env.example` 复制���份配置并填写真实值: ```bash cp .env.example .env ``` ### 基础配置 | 变量名 | 说明 | |--------|------| | `APP_NAME` | 应用名称 | | `ENVIRONMENT` | 运行环境(development / production) | | `DATABASE_URL` | 数据库连接串,开发可用 SQLite,生产推荐 PostgreSQL | ### LLM 模型配置(任选至少一个) #### OpenAI ```bash LLM_BASE_URL=https://api.openai.com/v1 LLM_API_KEY=sk-xxxxxxxx LLM_MODEL=gpt-4o-mini LLM_TEMPERATURE=0.2 LLM_MAX_TOKENS=128000 LLM_SUPPORTS_VISION=true ``` #### DeepSeek ```bash DEEPSEEK_BASE_URL=https://api.deepseek.com/v1 DEEPSEEK_API_KEY=sk-xxxxxxxx DEEPSEEK_MODEL=deepseek-reasoner DEEPSEEK_MAX_OUTPUT_TOKENS=64000 DEEPSEEK_SUPPORTS_VISION=false DEEPSEEK_SUPPORTS_STRUCTURED_OUTPUT=true ``` #### MiniMax ```bash MINIMAX_BASE_URL=https://api.minimaxi.com/v1 MINIMAX_API_KEY=xxxxxxxx MINIMAX_MODEL=MiniMax-M2.7-highspeed MINIMAX_MAX_OUTPUT_TOKENS=131072 MINIMAX_SUPPORTS_VISION=false MINIMAX_SUPPORTS_STRUCTURED_OUTPUT=false ``` > **注意**:前端模型列表仅显示已在后端配置 API Key 的供应商。若列表为空,请检查对应环境变量是否已正确设置。 ### 上传与任务限制 | 变量名 | 默认值 | 说明 | |--------|--------|------| | `MAX_UPLOAD_SIZE_MB` | `10` | 单个文件最大大小(MB) | | `MAX_DOCUMENT_CHARS_PER_FILE` | `8000` | 单个文档最大字符数 | | `MAX_TOTAL_DOCUMENT_CHARS` | `20000` | 所有文档合计最大字符数 | | `MAX_UPLOAD_FILES` | `6` | 最多同时上传文件数 | | `GENERATION_MAX_RUNTIME_MINUTES` | `45` | 异步任务最大运行时长(超时自动标记失败) | ### 向量检索配置(可选) 若不配置,知识库仅使用标签/SQL 检索,不使用向量相似度。 **阿里云 DashScope 多模态 embedding**(推荐,支持图片): ```bash EMBEDDING_API_KEY=your_dashscope_api_key EMBEDDING_MODEL=qwen3-vl-embedding EMBEDDING_DIMENSIONS=2560 # 如需新加坡地域,额外配置: # EMBEDDING_DASHSCOPE_MULTIMODAL_URL=https://dashscope.aliyuncs.com/api/v1/services/embeddings/multimodal ``` **OpenAI 兼容 embedding**: ```bash EMBEDDING_BASE_URL=https://api.openai.com/v1 EMBEDDING_API_KEY=sk-xxxxxxxx EMBEDDING_MODEL=text-embedding-3-small EMBEDDING_DIMENSIONS=1536 ``` --- ## 本地开发指南 ### 前提条件 - Python 3.12+ - Node.js 22+ - PostgreSQL 16(可选,开发可用 SQLite) ### 1. 克隆项目 ```bash git clone cd case_hpr ``` ### 2. 后端启动 ```bash cd backend # 创建虚拟环境 python3 -m venv .venv source .venv/bin/activate # Windows 使用 .venv\Scripts\Activate.ps1 # 安装依赖 pip install -r requirements.txt # 配置环境变量(在项目根目录 .env 文件已配置的前提下) cd .. # 启动开发服务器(热重载) uvicorn app.main:app --app-dir backend --reload ``` 后端默认运行在:http://localhost:8000 健康检查:http://localhost:8000/api/health ### 3. 前端启动 ```bash cd frontend npm install npm run dev ``` 前端默认运行在:http://localhost:5173 > 开发模式下,Vite 会自动将 `/api` 请求代理到后端(8000 端口),避免跨域问题。 ### 4. 初始化数据库 首次运行后端时会自动创建表结构。如需手动迁移: ```bash cd backend alembic revision --autogenerate -m "init" alembic upgrade head ``` ### 5. 配置模型 API Key 确保 `.env` 中至少配置了一个模型供应商的 API Key(参考上方环境变量配置)。后端启动时会读取可用模型列表,前端页面会自动显示。 --- ## Docker Compose 部署 适合内网服务器单机一键部署。 ### 步骤 ```bash # 1. 配置环境变量 cp .env.example .env # 编辑 .env,填入真实的 LLM_API_KEY 等配置 # 2. 构建并启动 docker compose up --build -d # 3. 查看日志 docker compose logs -f app ``` ### 访问地址 - 应用界面:http://localhost:8000 - API 文档:http://localhost:8000/docs - 健康检查:http://localhost:8000/api/health ### 数据持久化 - PostgreSQL 数据存储在 `postgres_data` Docker volume 中 - 如需备份,执行:`docker run --rm -v postgres_data:/data -v $(pwd):/backup alpine tar czf /backup/db-backup.tar.gz /data` --- ## 项目目录结构 ``` case_hpr/ ├── backend/ │ ├── app/ │ │ ├── api/ # 路由层(generate.py, knowledge.py) │ │ ├── core/ # 配置与工具(config.py) │ │ ├── db/ # 数据库会话与迁移 │ │ ├── models/ # SQLAlchemy ORM 模型 │ │ ├── prompts/ # Prompt 模板 │ │ ├── schemas/ # Pydantic 数据模型 │ │ ├── services/ # 业务逻辑层 │ │ │ ├── llm_client.py # LLM 调用封装 │ │ │ ├── testcase_generator.py # 核心生成逻辑 │ │ │ ├── generation_worker.py # Celery 异步任务 │ │ │ ├── knowledge_service.py # 知识库服务 │ │ │ └── testcase_exporter.py # 导出功能 │ │ └── main.py # FastAPI 应用入口 │ ├── tests/ # 单元/集成测试 │ └── requirements.txt # Python 依赖 ├── frontend/ │ ├── src/ │ │ ├── components/ # 通用组件 │ │ │ ├── AppLayout.tsx │ │ │ ├── RequirementInput.tsx │ │ │ ├── ResultPreview.tsx │ │ │ ├── GenerationProgress.tsx │ │ │ └── tools/ # 工具集组件 │ │ ├── pages/ # 页面级组件 │ │ │ ├── GeneratorPage.tsx # 生成工作台 │ │ │ ├── KnowledgeListPage.tsx # 知识库列表 │ │ │ ├── KnowledgeDetailPage.tsx # 文档详情 │ │ │ └── ToolsPage.tsx # 工具集 │ │ ├── services/ # API 调用封装(api.ts) │ │ ├── context/ # React Context(生成任务状态) │ │ └── styles/ # 全局样式 │ ├── package.json │ └── vite.config.ts # Vite 配置(含 /api 代理) ├── docker-compose.yml # Docker 编排 ├── Dockerfile # 多阶段构建(前端 + 后端) ├── .env.example # 环境变量示例 └── README.md # 本文件 ``` --- ## 使用流程 ### 快速开始 1. 打开浏览器访问 http://localhost:8000(或部署后的地址) 2. 在左侧「输入工作区」填写需求描述 3. 可选:上传参考文档(.txt, .md, .pdf, .docx)或图片(.png, .jpg 等) 4. 选择可用模型(下拉列表) 5. 点击「生成测试用例」按钮 ### 生成流程 - **纯文本需求**:直接进入异步生成 - **含附件需求**:系统自动调用 LLM 提炼需求摘要,展示识别出的模块与待确认问题,你可编辑补充后确认提交 生成过程中: - 右侧工作区实时显示当前阶段(Phase1~Phase5)与进度条 - 可通过 WebSocket 实时推送,支持取消任务 - 完成后展示结构化表格与 Markdown 渲染结果 ### 知识库使用 访问「知识库」标签页: 1. **上传文档**:支持 .txt, .md, .pdf, .docx,可填写标题、类型、模块标签 2. **手动录入**:直接粘贴文本内容,设置元数据 3. **文档详情**:点击列表行的「详情」查看内容、分块与向量化状态 4. **重建索引**:修改文档后点击「索引」重新向量化 5. **生成时自动检索**:生成测试用例时,系统自动检索相关知识并注入 Prompt ### 导出结果 在结果工作区点击导出按钮,支持三种格式: - **Markdown**(.md):可直接粘贴到 Confluence / 飞书文档,或者导入Xmind - **CSV**(.csv):导入 Excel / 测试管理工具 - **Excel**(.xlsx):保留多 sheet,含用例表与统计摘要 --- ## API 接口速览 ### 生成相关 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/v1/generate` | 同步生成(建议仅用于调试) | | POST | `/api/v1/generate/async` | 异步提交任务 | | GET | `/api/v1/generate/tasks/{taskId}` | 查询任务状态 | | POST | `/api/v1/generate/tasks/{taskId}/cancel` | 取消任务 | | GET | `/api/v1/generate/tasks` | 分页查询历史任务 | | DELETE | `/api/v1/generate/tasks` | 清空全部历史 | | POST | `/api/v1/generate/review` | 需求评审(提炼摘要) | | GET | `/api/v1/generations/{generationId}/export` | 导出结果 | ### 知识库相关 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/v1/knowledge/documents` | 分页查询文档 | | POST | `/api/v1/knowledge/documents` | 手动创建文档 | | POST | `/api/v1/knowledge/documents/upload` | 上传文件 | | GET | `/api/v1/knowledge/documents/{id}` | 查询文档详情 | | PUT | `/api/v1/knowledge/documents/{id}` | 更新文档 | | DELETE | `/api/v1/knowledge/documents/{id}` | 删除文档 | | POST | `/api/v1/knowledge/documents/{id}/reindex` | 重建向量索引 | | POST | `/api/v1/knowledge/search` | 语义检索 | | GET | `/api/v1/knowledge/stats` | 统计信息 | ### 模型管理 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/v1/models` | 获取可用模型列表(仅返回已配置 API Key 的供应商) | --- ## 支持的文件格式 | 类型 | 格式 | 说明 | |------|------|------| | 参考文档 | `.txt`, `.md`, `.pdf`, `.docx` | 自动解析文本内容,PDF 扫描版效果有限 | | 参考图片 | `.png`, `.jpg`, `.jpeg`, `.webp` | 需模型支持视觉能力(`supportsVision=true`) | | 导出结果 | `.md`, `.csv`, `.xlsx` | 一键下载,含用例表与元数据 | --- ## Prompt 设计 系统 Prompt 定义在 `backend/app/prompts/testcase_prompt.py`,将 LLM 角色固定为资深测试工程师,并约束输出格式: - 仅输出 Markdown 表格(或 JSON 结构化数据供后处理) - 固定列:`用例ID`、`测试标题`、`前置条件`、`测试步骤`、`预期结果` - 额外字段:`category`(类别)、`priority`(优先级)、`module`(模块)、`confirmationNote`(需确认项) - 要求覆盖:正常流程、异常流程、边界条件、输入校验 Prompt 会动态注入知识库检索到的相关文档片段,提升生成的相关性与准确性。 --- ## 已知限制与未来规划 ### 当前限制 - **PDF 文本提取**:扫描版 PDF 无法提取文本,建议先转换为 .txt 或 .md - **图片理解**:依赖所选模型的视觉能力;若模型不支持,请勿上传图片或切换模型 - **生成时长**:复杂需求可能耗时 1~5 分钟,已配置 45 分钟超时自动失败 - **上下文长度**:受模型最大输入 token 限制,超大文档会被截断(有告警) - **会话无状态**:每次生成独立,不保留历史对话上下文 ### 后续迭代方向 - [ ] 会话模式:多轮交互式用例完善 - [ ] 用例评审:支持人工标注反馈,形成微调数据集 - [ ] 更多导出格式:TestLink / Jira / 禅道 - [ ] 团队协作:用例共享、权限管理、变更历史 - [ ] 更多模型接入:Claude、Gemini、国内厂商 - [ ] 自动化测试集成:一键生成 pytest / Playwright 脚本框架 --- ## 开源协议 MIT License。详见 [LICENSE](LICENSE) 文件。 --- ## 贡献与反馈 欢迎提 Issue 与 PR。如果你是技术大牛,对架构设计、Prompt 工程、RAG 优化有见解,欢迎交流! **项目地址**:https://gitee.com/kyleoo/case-agent --- > 最后更新:2026-04-16 > 当前版本:v0.1.0