一个完整的全栈自动化测试用例管理系统,支持 Windows 应用自动化、OCR 识别、图像匹配和原生控件操作。
- 原生控件 - 通过控件名称精确定位(PyWinAuto)
- OCR 文字识别 - 通过文字内容定位(PaddleOCR)
- 图像模板匹配 - 通过截图模板定位(OpenCV)
- 全局键盘事件 - 无需定位,直接发送键盘指令
- 鼠标操作 - 单击、双击、右键、悬停、拖拽
- 输入操作 - 文本输入、清空输入框
- 键盘操作 - 快捷键、组合键
- 等待操作 - 延迟执行
- 网格点击 - 图像匹配支持网格分割,精确点击指定区域(如
1/3:1/-1表示 1 行 3 列网格,点击最右边) - 自动重试 - 定位失败或操作失败时自动重试,可配置重试次数和间隔
- 调试模式 - 可视化显示匹配结果、网格分割、点击位置
- 全局配置 - 统一配置图像阈值、OCR 阈值、重试策略等
- 类型安全 - Python Pydantic 模型自动生成 TypeScript 类型
- 创建、编辑、删除测试用例
- 可视化编辑测试步骤
- 单步调试和完整执行
- 执行结果记录和查看
- Python 3.12+
- Node.js 18+
- pnpm 8+
- uv (Python 包管理器)
git clone <repository-url>
cd autoRobot# Python 依赖
uv sync
# 安装 solidvision(核心 OCR 和图像识别库)
cd solidvision
uv pip install -e .
cd ..
# 前端依赖
cd web
pnpm install
cd ..# 后端(终端 1)
uv run python -m uvicorn backend.main:app --reload --port 8000
# 前端(终端 2)
cd web
pnpm dev- 前端: http://localhost:5173
- 后端 API: http://localhost:8000
- API 文档: http://localhost:8000/docs
- 访问首页,点击"+ 新建用例"
- 填写用例名称和描述
- 点击用例进入详情页
每个步骤包含以下配置:
- 软件名称 - 目标应用程序
- 窗口标题 - 窗口标题(支持自动获取)
- 原生控件 - 输入控件名称
- OCR 文字识别 - 输入要查找的文字
- 图像模板匹配 - 上传截图模板,支持网格点击
- 全局键盘事件 - 不需要定位
根据定位类型,支持不同的操作:
- 原生控件/OCR/图像 - 单击、双击、右键、悬停、拖拽
- 原生控件 - 输入(只有原生控件支持输入框定位)
- 全局键盘 - 键盘操作(快捷键或文本输入)
- 所有类型 - 等待
- 输入操作 - 输入文本、是否清空前置内容
- 拖拽操作 - X/Y 轴偏移量、拖拽时长
- 悬停操作 - 悬停时长
- 等待操作 - 等待时长
- 键盘操作 - 快捷键或文本
- 单步执行 - 点击步骤右侧的"▶ 执行"按钮
- 完整执行 - 在用例详情页点击"▶ 运行用例"按钮
访问"配置"页面,可以调整:
- 启用调试模式
- 弹窗显示调试图片
- 保存调试图片到文件
- 图像匹配阈值(0.7-0.9,推荐 0.8)
- OCR 置信度阈值(0.5-0.8,推荐 0.6)
- 操作间隔(每个操作之间的等待时间)
- 窗口激活延迟(激活窗口后的等待时间)
- 最大重试次数(1-10 次,推荐 3 次)
- 重试间隔(0-5 秒,推荐 1 秒)
- FastAPI - 现代化的 Python Web 框架
- SQLAlchemy - ORM 数据库操作
- Pydantic - 数据验证和类型生成
- SQLite - 轻量级数据库
- PyAutoGUI - 鼠标键盘控制
- PyWinAuto - Windows UI 自动化
- SolidVision - OCR 和图像识别(基于 PaddleOCR)
- OpenCV - 图像处理和模板匹配
- React 19 - 现代化前端框架
- TanStack Router - 类型安全的路由
- shadcn/ui - 现代化 UI 组件库
- Tailwind CSS - 实用优先的 CSS 框架
- TypeScript - 类型安全
- Vite - 快速构建工具
autoRobot/
├── backend/ # FastAPI 后端
│ ├── models/ # Pydantic 数据模型
│ │ ├── test_case.py # 测试用例模型
│ │ ├── test_step.py # 测试步骤模型(包含操作类型枚举)
│ │ ├── execution.py # 执行结果模型
│ │ └── config.py # 全局配置模型
│ ├── schemas/ # SQLAlchemy 数据库模型
│ ├── api/ # API 路由
│ │ ├── test_cases.py # 用例管理 API
│ │ ├── execution.py # 执行 API
│ │ ├── config.py # 配置 API
│ │ ├── system.py # 系统 API(获取窗口列表等)
│ │ └── preview.py # 预览 API
│ ├── services/ # 业务逻辑
│ ├── database.py # 数据库配置
│ ├── config.py # 应用配置
│ ├── main.py # 应用入口
│ └── generate_types.py # TypeScript 类型生成脚本
├── src/ # 自动化引擎
│ ├── core/ # 核心引擎(分层架构)
│ │ ├── engine.py # 步骤执行协调器(带重试机制)
│ │ ├── location_resolver.py # 位置解析器
│ │ ├── action_executor.py # 操作执行器
│ │ └── window_manager.py # 窗口管理器
│ ├── strategies/ # 识别策略
│ │ ├── visual_strategy.py # 视觉识别(OCR + 图像匹配)
│ │ └── native_strategy.py # 原生控件识别
│ └── utils/ # 工具类
│ ├── debug_visualizer.py # 调试可视化
│ └── grid_helper.py # 网格分割辅助
├── web/ # React 前端
│ ├── src/
│ │ ├── api/ # API 客户端和类型
│ │ │ ├── client.ts # API 客户端
│ │ │ ├── config.ts # 配置 API
│ │ │ ├── constants.ts # API 常量(统一 URL)
│ │ │ └── types.d.ts # 自动生成的 TypeScript 类型
│ │ ├── routes/ # 页面路由
│ │ ├── pages/ # 页面组件
│ │ │ └── ConfigPage.tsx # 全局配置页面
│ │ └── components/ # React 组件
│ │ ├── test-case/ # 测试用例组件
│ │ │ ├── AddStepDialog.tsx # 添加步骤对话框
│ │ │ ├── WindowSoftwareFields.tsx # 软件窗口选择
│ │ │ ├── LocationFields.tsx # 定位字段路由
│ │ │ ├── ActionParamsFields.tsx # 操作参数路由
│ │ │ ├── GridVisualizer.tsx # 网格可视化
│ │ │ ├── location-fields/ # 定位字段组件
│ │ │ └── action-params/ # 操作参数组件
│ │ ├── config/ # 配置组件
│ │ │ └── DebugPanel.tsx # 调试配置面板
│ │ └── ui/ # shadcn/ui 组件
│ └── package.json
├── solidvision/ # 图像识别库(独立包)
│ ├── solidvision/
│ │ ├── aircv/ # 图像匹配(基于 OpenCV)
│ │ ├── orc/ # OCR 识别(基于 PaddleOCR)
│ │ ├── options/ # 配置选项
│ │ └── utils/ # 工具类
│ └── pyproject.toml
├── pyproject.toml # Python 依赖
├── uv.lock # Python 依赖锁定
└── README.md
# 检查代码质量
ruff check .
# 自动修复问题
ruff check --fix .
# 格式化代码
ruff format .修改 backend/models/ 中的 Pydantic 模型后,运行:
uv run python backend/generate_types.pyTypeScript 类型会自动同步到 web/src/api/types.d.ts
cd web
pnpm build构建产物在 web/dist/ 目录
-
Orchestration(协调层) -
AutoEngine- 步骤执行协调
- 重试机制
- 错误处理
-
Resolution(解析层) -
LocationResolver- 位置解析
- 窗口管理
- 坐标转换
-
Execution(执行层) -
ActionExecutor- 操作执行
- 鼠标键盘控制
- 输入处理
-
Infra(基础设施层) -
WindowManager,VisualStrategy,NativeStrategy- 窗口操作
- 识别策略
- 底层调用
- 路由组件 - 根据类型动态渲染子组件
- 功能组件 - 单一职责,可复用
- UI 组件 - shadcn/ui 统一风格
- 自定义 Hook - 状态管理和逻辑复用
- 后端 Pydantic 模型自动生成 TypeScript 类型
- 前后端类型完全一致
- 减少手动维护成本
启动后端服务后,访问 http://localhost:8000/docs 查看完整的 API 文档(Swagger UI)。
GET /api/test-cases/- 获取所有用例GET /api/test-cases/{id}- 获取单个用例POST /api/test-cases/- 创建用例PUT /api/test-cases/{id}- 更新用例DELETE /api/test-cases/{id}- 删除用例
POST /api/execution/run-case/{id}- 执行用例POST /api/execution/run-step/{id}- 执行单步
GET /api/config/- 获取全局配置PUT /api/config/- 更新全局配置POST /api/config/reset- 重置配置
GET /api/system/software-list- 获取软件列表GET /api/system/windows- 获取窗口列表
欢迎提交 Issue 和 Pull Request!
- Python 代码遵循 PEP 8 规范
- 使用 ruff 进行代码检查和格式化
- TypeScript 代码使用 ESLint 检查
- 提交前运行代码质量检查
MIT License