# testgen-platform **Repository Path**: aiagentdemo/testgen-platform ## Basic Information - **Project Name**: testgen-platform - **Description**: 把**手工测试用例**智能转换成自动化用例的平台,前后端分离架构,蓝白科技风界面。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-07-24 - **Last Updated**: 2026-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TestGen Platform 把**手工测试用例**智能转换成自动化用例的平台,前后端分离架构,蓝白科技风界面。 - **接口自动化**:Markdown 手工用例 → 结构化用例 → 可执行 **pytest** 接口用例 - **WebUI 自动化**:Markdown 手工用例 → 大模型生成 **Playwright(Python)** 用例 - **自动造数**:用例缺数据时,框架按声明自动造数,跑完清理;支持「造数 Skill」按业务造不同数据 - **账号切换**:按用例声明的角色自动领取匹配账号、登录、注入鉴权 - **大模型配置(按用途)**:接口生成、UI 生成 **各自独立配置与设默认**;接入任意 OpenAI 兼容服务,可视化管理、连通性测试。默认接入公司万擎大模型,并兼容企业网关(精简参数:只发 model+messages) - **Skill 管理**:生成类(prompt 模板)与造数类(按业务造数)统一管理,支持 zip 导入、SKILL.md 导出 ## 界面预览 ![TestGen Platform](./screenshot.png) ## 模型按用途配置 模型分两组、互不影响: - **接口生成模型**:用于生成 pytest 接口用例(`purpose=api`) - **UI 生成模型**:用于生成 Playwright UI 用例(`purpose=ui`) 每组各自有一个「默认」模型,生成时按用例类型自动选用对应组的默认模型。默认 seed 了万擎接口/UI 两份配置(参考 `smart-test-platform/backend/.env.example`)。对万擎这类企业网关,开启「精简参数」后只发送 `model + messages`,不带 `temperature/max_tokens`,避免网关报错。 ## 造数 Skill(按业务造不同数据) 造数从「写死在 factories.yaml」升级为「可管理的造数 Skill」。每个造数 Skill 用 `data_type` 标识业务(如 order/coupon/user),支持两种执行方式: - **声明式**:SKILL.md 里用 YAML 描述造数接口序列(复用 `{param.x}/{export.x}` 渲染与 teardown) - **脚本式**:SKILL.md 里写 Python,定义 `build(ctx, params)` 返回导出字段,可选 `teardown(ctx, exports)`;`ctx` 提供 `client/headers/base_url` **自动调用**:用例的 `preconditions.data[].type` 决定调哪个造数 Skill。生成阶段会把「当前可用造数 Skill 清单」注入 prompt,大模型据此智能选择正确的 `type`;执行时框架按 `type` 匹配造数 Skill 造数(找不到则回退 `factories.yaml`)。 ## 技术栈 | 层 | 技术 | |----|------| | 前端 | Vue3 + Vite + TypeScript + Element Plus + Pinia + Vue Router | | 后端 | FastAPI + Pydantic | | 存储 | SQLite(模型配置 / Skill / 生成记录),账号池为 YAML | | 生成 | OpenAI 兼容接口(无 key 时内置离线 Mock,开箱即跑通) | | 执行 | pytest(接口)/ Playwright(UI) | ## 核心设计:用例逻辑与数据/账号解耦 大模型不把数据写死,而是把依赖显式声明为 **preconditions**(角色 + 造数),框架运行时满足: ```json { "preconditions": { "role": "vip", "data": [{ "type": "order", "params": { "status": "已支付" } }] }, "steps": [ { "method": "POST", "path": "/api/refund", "body": { "order_id": "${factory.order.order_id}" }, "expect": { "status_code": 200, "json_path": { "data.success": true } } } ] } ``` 运行时:领取匹配角色账号 → 登录换 token → 调工厂造数 → 注入 `${account.x}` / `${factory.order.order_id}` → 执行 → teardown 清理。 ## 目录结构 ``` testgen-platform/ ├── backend/ # FastAPI 后端 │ ├── app/ │ │ ├── main.py # 应用入口,装配路由 + CORS + 初始化 DB │ │ ├── config.py # YAML 配置加载(${BASE_URL} 替换) │ │ ├── llm.py # LLM 客户端(读激活模型 + 启用 skill;离线 mock) │ │ ├── db/store.py # SQLite 数据层 │ │ ├── api/ # 路由:llm / skills / generate / config │ │ └── core/ # accounts / factory / context / generator / runner │ ├── config/ # accounts.yaml / factories.yaml / settings.yaml │ ├── generated/ # 生成的用例(api/ ui/) │ └── requirements.txt ├── frontend/ # Vue3 前端 │ └── src/ │ ├── views/ # 概览 / 智能生成 / 大模型 / Skill / 账号造数 / 记录 │ ├── api/ # axios 封装 │ ├── stores/ # 主题(亮/暗切换) │ └── styles/theme.css # 蓝白科技风主题 └── _legacy/ # 旧单体版本(已被前后端分离版替代,可忽略) ``` ## 快速开始 ### 1. 启动后端 ```bash cd backend pip install -r requirements.txt python -m playwright install chromium # 仅 UI 用例需要 bash run.sh # → http://localhost:8000 (API 文档 /docs) ``` ### 2. 启动前端 ```bash cd frontend npm install npm run dev # → http://localhost:5173 ``` 打开 http://localhost:5173 : - **概览**:平台统计与最近生成 - **智能生成**:粘贴 Markdown → 选类型/模型 → 生成 → 预览 → 运行 - **大模型配置**:新增/编辑/删除模型,测试连通,设为默认 - **Skill 管理**:编辑生成策略(prompt 模板),启用/停用,导出 SKILL.md - **账号/造数**:在线编辑账号池与数据工厂 YAML(保存即热更新) - **运行记录**:查看历史用例代码与执行输出 > 默认带一个 **Mock(离线)** 模型,无需任何 API key 即可跑通完整流程。接真实模型:在「大模型配置」新增(OpenAI / DeepSeek / 通义 / 本地 vLLM 等),填 Base URL、API Key、模型名,设为默认即可。 ## 接入你的系统 只改 `backend/config/` 下的 YAML,无需动代码: - **`accounts.yaml`**:按 `roles` 标签登记账号,配置登录接口、token 提取路径、鉴权头格式 - **`factories.yaml`**:每种数据一个工厂,声明造数接口序列、字段导出、teardown - **`settings.yaml`**:被测系统 `base_url` 也可直接在前端「账号/造数」页面在线编辑。 ## 已验证 - 后端 API 全量冒烟:健康检查、统计、模型 CRUD(key 脱敏)、连通性测试、Skill CRUD、生成+记录、配置管理 ✓ - 前端 `vite build` 通过,6 个页面全部编译 ✓ - 前后端联调:后端健康 + 前端首页 200 + 生成接口连通 ✓ - 端到端用例执行:生成的退款用例自动领 VIP 账号 → 登录 → 造「已支付」订单 → 注入订单号 → 断言成功 → 删订单,`pytest 1 passed` ✓ ## 说明 - SQLite 默认建在 `backend/testgen.db`,可用环境变量 `TESTGEN_DB` 覆盖路径。 - 当前账号锁在准备阶段领取、用例结束释放,适合顺序执行;高并发场景需把锁延续到用例结束。