AI-TestHub:我如何从零开发一个智能测试用例生成平台

AI-TestHub:从零构建智能测试用例生成平台

>一个帮助测试人员从需求文档自动生成测试用例并生成selenium脚本文件的AI工具,支持PDF/Word解析、两阶段AI生成、异步任务处理,测试效率提升70%以上

项目代码已开源:https://github.com/WindChaser-w/ai-testhub.git

一、项目背景

1.1 痛点分析

接上文写了一篇专门对于电商平台自动化测试的文章,对于这个电商平台的功能测试部分我发现一个普遍存在的效率瓶颈:每天要花大量时间阅读需求文档、编写测试用例。

以我所在的电商项目为例:

  • 一个中等规模的需求文档(约10页),包含登录、购物车、支付等模块
  • 资深测试工程师编写完整用例需要2-3小时
  • 新手可能需要半天甚至更久
  • 过程中还容易遗漏边界条件和异常场景

每天两眼一睁就在编用例,所以我就想:能不能让AI来承担这份重复性工作?用户上传需求文档,系统自动分析并生成规范的测试用例。

1.2 项目目标

核心目标:实现Web应用,支持PDF/Word文档上传,AI自动生成结构化测试用例

质量目标:生成的用例覆盖功能、边界、异常场景,格式规范可直接使用

技术目标:采用现代技术栈,代码清晰,便于学习和扩展

简历目标:作为一个完整的测开项目,体现后端开发、AI工程化和测试思维

二、项目框架设计

2.1 技术栈集

Python + FastAPI + SQLAlchemy + MySQL + DeepSeek API + pdfplumber + python-docx + pandas + HTML5/JavaScript + Docker

2.2 项目架构

整体流程设计

用户在前端创建项目后,上传 PDF/Word 文档,系统解析文本存入数据库。点击"生成用例"时,后端创建任务记录,通过 `BackgroundTasks` 将 AI 调用放入后台队列,立即返回 `task_id`。前端轮询任务状态,后台独立执行:先调用 AI 提取需求点,再基于需求点生成 JSON 格式用例,逐条存入数据库,最后标记任务完成。生成后的用例支持在线编辑、删除和导出 Excel,每条用例还可单独生成 Selenium 自动化脚本。

项目目录

ai-testhub/

│

├── 📁 app/ # 核心应用代码

│ ├── 📁 api/ # API 路由层

│ │ ├── 📄 projects.py # 项目管理(增删改查)

│ │ ├── 📄 upload.py # 文档上传(PDF/Word)

│ │ ├── 📄 generate.py # 用例生成(异步任务)

│ │ └── 📄 cases.py # 用例管理(增删改查 + 导出)

│ │

│ ├── 📁 core/ # 核心配置层

│ │ ├── 📄 config.py # 环境变量配置

│ │ └── 📄 database.py # 数据库连接管理

│ │

│ ├── 📁 models/ # 数据模型层

│ │ └── 📄 models.py # 四张表结构定义

│ │

│ ├── 📁 services/ # 业务逻辑层

│ │ ├── 📄 parser.py # PDF/Word 文档解析

│ │ ├── 📄 ai_service.py # AI 调用核心(两阶段 Prompt)

│ │ └── 📄 export.py # Excel 导出服务

│ │

│ ├── 📁 static/ # 前端静态文件

│ │ ├── 📄 index.html # 主页面

│ │ ├── 📁 css/ # 样式文件

│ │ └── 📁 js/ # 交互逻辑

│ │

│ └── 📄 main.py # FastAPI 应用入口

│

├── 📁 exports/ # Excel 导出临时目录

├── 📁 uploads/ # 用户上传文档存储目录

├── 📄 .env # 环境变量(API Key、数据库密码)

├── 📄 .env.example # 环境变量模板

├── 📄 docker-compose.yml # Docker 容器编排

├── 📄 Dockerfile # 后端镜像构建

├── 📄 requirements.txt # Python 依赖清单

├── 📄 init_db.py # 数据库初始化脚本

└── 📄 README.md # 项目说明文档

2.3 数据库设计

表名 主要字段 作用
projects id, name, description 测试项目管理
documents id, project_id, content_text 上传文档及解析内容
tasks id, project_id, status, progress 异步任务进度追踪
test_cases id, project_id, steps(JSON), automation_code 测试用例及自动化脚本

关键设计:

  • 使用级联删除 (cascade="all, delete-orphan"),删除项目时自动清理关联数据

  • Task表用UUID做主键,避免暴露任务数量

  • steps字段使用JSON类型,直接存储步骤列表,存取方便


三、核心内容详解

3.1 文档解析服务 (services/parser.py)

功能:将PDF和Word文档转换为纯文本

技术要点:

  • pdfplumber比PyPDF2准确率高,能更好处理表格和复杂布局

  • with语句自动管理文件资源,避免内存泄漏

  • 统一返回纯文本,上层调用不关心原始格式

3.2 AI服务核心 (services/ai_service.py)

这是项目的灵魂,采用两阶段Prompt设计:

第一阶段:提取需求点

复制代码

第二阶段:生成测试用例

复制代码
请直接输出JSON数组

为什么分两阶段?

  • 直接生成:AI容易遗漏需求点或生成不相关内容

  • 分阶段:先让AI"理解"文档(提取需求),再"创作"(生成用例),逻辑更清晰,质量更高

3.3 异步任务调度 (api/generate.py)

AI调用耗时10-30秒,必须异步处理:

复制代码

前端轮询实现:

javascript

复制代码

3.4 异步AI调用的核心处理

OpenAI SDK是同步的,直接调用会阻塞FastAPI事件循环。解决方案:

run_in_executor将同步调用放到线程池执行,主线程通过await让出控制权,可以继续处理其他请求。

3.5 用例导出 (api/cases.py)

支持导出Excel:

技术要点:

  • pandas的to_excel一行代码生成Excel

  • 文件名带时间戳避免冲突

  • 下载时使用项目名作为文件名,用户体验好


四、难点攻克

难点一:AI返回格式不稳定

问题:AI有时返回markdown包裹的JSON,有时直接返回JSON,有时不是合法JSON格式。

解决方案:

python

复制代码

难点二:PDF解析乱码或失败

问题:部分PDF文件编码不标准,提取出乱码;或者PDF全是图片,没有文字。

解决方案:

  • 使用pdfplumber替代PyPDF2,准确率更高

  • 解析失败时自动删除已保存的文件

  • 返回友好错误信息给前端

难点三:异步任务的状态追踪

问题:用户可能想知道AI生成到哪一步了,是卡住了还是在正常处理。

解决方案:

  • 设计tasks表记录状态和进度

  • 在AI服务的各个阶段更新进度(20%提取需求、40%生成用例...)

  • 前端轮询获取进度并显示进度条

复制代码

五、项目成果

该项目有效提升了测试的效率,以下是一个对比图:

5.1效果对比图

对比维度 手工操作 使用平台 提升效果
文档阅读+用例编写 2-3小时 5-10分钟 效率提升 90% 以上
用例格式规范性 因人而异,格式不统一 统一模板输出,规范一致 实现标准化
边界场景覆盖 依赖个人经验,容易遗漏 AI 自动补充边界值和异常场景 覆盖更全面
回归测试效率 每次需求变更需重新编写 重新上传文档即可生成 维护成本降低

以一个典型的电商登录模块为例:原来手工编写用例需要 1 小时(包含正常登录、密码错误、账号锁定、验证码过期等场景),现在只需上传需求文档,5 分钟即可生成包含 10-20 条用例的完整测试方案。

5.2 技术收获

通过这个项目的开发,我在以下方面有了深入理解和实践:

FastAPI 异步编程 :掌握了 FastAPI 的异步路由、BackgroundTasks 后台任务、依赖注入等核心特性,理解了如何在异步框架中处理同步的第三方 SDK(如 OpenAI),以及如何用 run_in_executor 将同步调用放到线程池执行。

AI Prompt 工程:积累了实用的 Prompt 设计经验,特别是两阶段设计------先提取需求再生成用例,比一次性生成准确率更高。同时掌握了处理 AI 返回格式不稳定问题的方法(JSON 清理、异常兜底)。

异步任务状态追踪:设计并实现了完整的任务状态机(pending → processing → completed/failed),通过数据库记录进度并在各阶段更新,前端通过轮询获取实时进度,用户体验良好。

数据库设计:熟悉了 SQLAlchemy ORM 的使用,包括表关系定义(一对多、级联删除)、JSON 字段存储、UUID 主键设计等。

Docker 容器化:掌握了编写 Dockerfile 和多容器编排(docker-compose)的技能,实现了项目的快速部署和环境统一。


六、未来规划

RAG 检索增强生成:当前版本每次生成都是基于当前文档独立生成,没有利用历史用例。计划引入向量数据库(如 ChromaDB),将公司历史用例向量化存储,生成新用例时先检索相似的历史用例作为参考上下文,让生成的用例更符合公司规范,同时复用之前积累的测试经验。

更多文档格式支持:目前仅支持 PDF 和 Word,后续计划扩展支持 Markdown(技术文档常用)、Excel(测试数据)、图片(OCR 识别需求文档截图),满足更多使用场景。

用例评审流程:测试用例生成后通常需要评审。计划增加在线评审功能,支持多人评论、版本对比、评审记录追踪,帮助团队规范用例质量管控流程。

自定义 Prompt 模板:不同团队可能有不同的用例格式要求(如是否需要优先级、是否需要关联需求ID)。计划允许用户自定义 Prompt 模板,根据团队规范灵活调整生成格式。

七、写在最后

这个项目是我对"AI + 测试"方向的一次探索尝试。起初的想法很朴素:既然 AI 能理解文档、能生成代码,那能否帮助测试同学从重复的用例编写中解放出来?带着这个问题,我开始从 0 到 1 搭建这个平台。

在技术实现上,两阶段 Prompt 的设计是反复调试后的成果------先让 AI 提取需求点,再基于需求点生成用例,将复杂任务拆解为多个简单任务的组合,生成的用例质量显著提升。异步任务加轮询的模式则解决了 AI 调用长耗时与用户体验之间的矛盾,后台独立执行,前端实时反馈,让等待变得可感知。

这个项目还有很多不完善的地方,生成的脚本中元素定位器仍需手动补充,文档格式也仅支持 PDF 和 Word。后续计划引入 RAG 检索历史用例,持续优化生成质量。作为刚入门的学生,这次开发让我对后端架构和 AI 工程化有了更具体的认知。AI 不会取代测试工程师,但或许能让我们把精力放在更有价值的事情上,不断完善增强自己的能力。

项目代码已开源:https://github.com/WindChaser-w/ai-testhub.git

相关推荐
老金带你玩AI2 小时前
这几天,我都是拿手机让dot帮我干活
人工智能
怕浪猫4 小时前
GEO 优化到底是什么?AI时代内容创作者必须懂的新技能
算法·面试·github
7yewh5 小时前
SLAM 三维空间刚体运动(2)
数据结构·人工智能·机器人·嵌入式·slam
miofly5 小时前
Aleph Alpha 开源 78B 参数 MoE 模型 Kolibri
开源·github
小虎AI生活6 小时前
WorkBuddy 模型选型实操:0.03 倍的 Space-Bunny 怎么用、派什么活、避什么坑
人工智能·超级个体·一人公司·青玥ai
ai小陈6 小时前
GPU服务器租用存储验收:检查点写入与磁盘吞吐实战
运维·服务器·人工智能·ai·ssh·gpu算力
微三云马玮均—GEO源码系统 私有化部署6 小时前
消费返物业费:消费+服务趋势的必然产物!
大数据·人工智能·物联网·区块链·生活
明月_清风6 小时前
Muse 登顶 App Store 第一,SDK 直接开源:AI Agent 开始进入下一个阶段
人工智能·后端
言乐66 小时前
HTML视频审核模型
python·django·virtualenv·pygame·tornado