# automated_testing **Repository Path**: jy-even/automated_testing ## Basic Information - **Project Name**: automated_testing - **Description**: HIS自动化测试框架 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-08-06 - **Last Updated**: 2026-09-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🏥 HIS 自动化测试平台
企业级医疗信息系统自动化测试解决方案
特性 • 快速开始 • 安装 • 使用 • 配置 • 结构 • 贡献
--- ## 📋 目录 - [项目概述](#项目概述) - [功能特性](#功能特性) - [技术架构](#技术架构) - [快速开始](#快速开始) - [安装指南](#安装指南) - [环境要求](#环境要求) - [一键安装](#一键安装) - [手动安装](#手动安装) - [使用方法](#使用方法) - [启动服务](#启动服务) - [访问系统](#访问系统) - [执行测试](#执行测试) - [配置说明](#配置说明) - [主配置文件](#主配置文件) - [数据库配置](#数据库配置) - [AI服务配置](#ai服务配置) - [安全配置](#安全配置) - [项目结构](#项目结构) - [测试指南](#测试指南) - [运行所有测试](#运行所有测试) - [按类型运行](#按类型运行) - [独立测试套件](#独立测试套件) - [API文档](#api文档) - [开发指南](#开发指南) - [代码规范](#代码规范) - [调试模式](#调试模式) - [日志系统](#日志系统) - [部署指南](#部署指南) - [常见问题](#常见问题) - [更新日志](#更新日志) - [贡献指南](#贡献指南) - [许可证](#许可证) - [联系方式](#联系方式) --- ## 📖 项目概述 **HIS 自动化测试平台** 是一个专为企业级医疗信息系统(Hospital Information System, HIS)设计的自动化测试平台。该平台集成了先进的 AI 技术、多浏览器支持、全面的测试管理功能,旨在提供高效、可靠、智能的自动化测试解决方案。 ### 核心价值 - **🤖 AI 驱动**: 集成多种大语言模型(讯飞星火、阿里云百练、DeepSeek 等),实现智能测试用例生成、UI 元素识别、错误诊断等功能 - **🔄 Playwright 引擎**: 基于 Playwright 1.52+ 的现代浏览器自动化引擎,支持 Chromium、Firefox、WebKit - **📊 全流程覆盖**: 从需求分析、测试用例生成、脚本录制、执行监控到报告生成,提供完整的测试生命周期管理 - **🔒 企业级安全**: 采用 AES-256-GCM 加密、HMAC 签名验证、JWT 认证等多层安全机制,保障数据安全 - **⚡ 高性能**: 基于内存预加载、热更新、异步处理等技术,确保系统响应迅速、运行稳定 - **🎯 易于使用**: 提供直观的 Web 界面、树形配置管理、实时日志监控等,降低使用门槛 - **📚 智能知识库**: 基于向量数据库的文档智能问答系统,支持语义搜索和 RAG 增强 ### 版本信息 | 组件 | 版本 | 说明 | |------|------|------| | 后端 | FastAPI app v1.0.0(见 `his_platform/backend/app/main.py`) | 功能版本见[更新日志](#更新日志) | | 前端 | v2.6.4(见 `his_platform/frontend/package.json`) | - | | Python | >=3.9(`pyproject.toml` 声明 `requires-python = ">=3.13"`,CI 混用 3.10/3.13) | - | | Node.js | >=16.0.0 | 前端构建 | --- ## ✨ 功能特性 ### 🔧 核心功能 #### 1. 智能测试引擎 - **Playwright 引擎**: Playwright 1.52+ 现代浏览器自动化引擎 - **多浏览器兼容**: Chrome、Firefox、WebKit 全平台支持 - **智能元素定位**: 支持 XPath、CSS 选择器、AI 视觉识别等多种定位方式 - **自动等待机制**: 智能、显式、隐式等待策略,提升脚本稳定性 #### 2. AI 智能化模块 - **测试用例生成**: 基于 LLM 的需求分析和测试用例自动生成 - **UI 自动化测试**: AI 驱动的页面元素识别和操作序列生成 - **智能错误诊断**: 自动分析失败原因并提供修复建议 - **代码优化建议**: AI 辅助的脚本性能优化和最佳实践推荐 - **多模型支持**: 讯飞星火、阿里云百练、DeepSeek、公司 Dify 等多种 AI 提供商 #### 3. 配置管理中心 - **统一配置存储**: SystemConfigManager (数据库) 优先 + YAML 降级的双轨配置机制 - **可视化编辑器**: 树形结构的配置浏览和编辑界面 - **实时同步**: WebSocket 推送配置变更,毫秒级生效 - **版本控制**: 配置变更历史记录和回滚能力 - **加密存储**: 敏感配置项采用 AES-256-GCM 加密存储 - **智能加载**: 启动时自动检测最优配置源,支持端口范围验证和格式兼容 #### 4. 测试管理与执行 - **项目管理**: 多项目、多环境的测试组织方式 - **用例管理**: YAML 格式的测试用例编写和管理 - **批量执行**: 支持并发执行、定时任务、CI/CD 集成 - **实时监控**: WebSocket 实时推送执行进度和结果 - **报告生成**: Allure HTML 报告、PDF/Excel 导出 #### 5. 用户与权限系统 - **角色权限**: 管理员、测试员、普通用户三级权限体系 - **JWT 认证**: 安全的用户认证和会话管理 - **操作审计**: 完整的操作日志记录和追溯能力 #### 6. 文档智能问答系统 (新增) - **知识库管理**: 支持 `documents/` 目录下的子文件夹作为独立知识库 - **文档向量化**: 自动将文档转换为向量表示,支持批量处理 - **智能检索**: 基于嵌入模型的语义搜索,支持自然语言查询 - **RAG 增强**: 检索增强生成,提升 AI 回答质量和准确性 - **Qdrant 集成**: 高性能向量数据库用于文档存储和检索 - **并发控制**: 支持多文档同时处理,防止重复操作 #### 7. 高级录制器 (新增) - **可视化录制**: 无需编码的测试脚本录制界面 - **CDP 协议通信**: 基于 Chrome DevTools Protocol 的实时操作反馈(`/api/cdp-http/*`) - **元素智能识别**: 自动识别页面元素并生成操作步骤 - **脚本导出**: 支持导出为多种测试框架格式 ### 🛠️ 高级特性 #### 性能优化 - ✅ 内存预加载:配置数据预加载到内存,响应时间 < 10ms - ✅ 热更新机制:配置变更即时生效,无需重启服务 - ✅ 异步处理:基于 asyncio 的全异步架构 - ✅ 连接池管理:数据库连接池优化,支持高并发 - ✅ 配置缓存:SystemConfigManager 缓存机制,减少数据库查询 #### 安全防护 - ✅ 加密传输:HTTPS + AES-256-GCM 端到端加密 - ✅ 签名验证:HMAC-SHA256 请求签名防篡改 - ✅ 密钥轮换:自动化的加密密钥轮换机制 - ✅ SQL 注入防护:参数化查询 + ORM 安全层 - ✅ XSS 防护:输入过滤 + 输出编码 - ✅ 路由级鉴权:细粒度的 API 访问控制 #### 可观测性 - ✅ 结构化日志:分级日志系统,支持敏感信息脱敏 - ✅ 性能监控:API 响应时间、资源使用率实时监控 - ✅ 错误追踪:完整的异常堆栈和上下文信息 - ✅ 审计日志:用户操作记录和安全事件追踪 - ✅ 启动性能指标:配置加载耗时统计和性能优化建议 --- ## 🏗️ 技术架构 ### 系统架构图 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 前端展示层 │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ React 19 │ │ Ant Design 5 │ │ CodeMirror │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ API 网关层 │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ FastAPI │ │ JWT Auth │ │ Rate Limit │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 业务逻辑层 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │测试引擎 │ │AI 服务 │ │配置管理 │ │用户管理 │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │文档问答 │ │向量化服务 │ │高级录制 │ │ │ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ 数据持久层 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ SQLite │ │SQL Server│ │ Qdrant │ │ YAML │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` ### 技术栈详情 | 层级 | 技术 | 说明 | |------|------|------| | **前端框架** | React 19.x | 基于 Hooks 的函数式组件开发 | | **UI 库** | Ant Design 5.29 | 企业级 UI 组件库 | | **状态管理** | React Context + Hooks | 轻量级状态管理方案 | | **路由** | React Router DOM 7.12 | 客户端路由 | | **代码编辑** | CodeMirror 5.65 / Tiptap 3.22 | YAML/富文本编辑 | | **后端框架** | FastAPI 0.115 | 高性能异步 Web 框架 | | **ORM** | SQLAlchemy 2.0 | Python SQL 工具包 | | **ASGI 服务器** | Uvicorn 0.34 | 高性能 ASGI 实现 | | **测试引擎** | Playwright 1.52+ | 浏览器自动化引擎 | | **数据库** | SQLite / SQL Server | 本地 + 业务数据库 | | **向量库** | Qdrant 1.7+ (可选) | 文档向量和语义搜索 | | **AI 集成** | OpenAI SDK / LangChain | 多模型统一调用接口 | | **加密** | cryptography 42.0 | AES-256-GCM + PBKDF2 | | **配置管理** | SystemConfigManager | 数据库优先的配置管理系统 | --- ## 🚀 快速开始 ### 最简启动(3 步上手) ```bash # 1. 克隆项目 git clone https://github.com/your-org/his-automated-testing.git cd his-automated-testing # 2. 安装依赖 python setup.py all # 3. 启动服务(主入口,详见下方“启动服务”) python launcher.py --dev ``` 启动成功后: - **前端地址**: http://localhost:3000 - **后端 API**: http://localhost:8000 - **默认账号**: `admin` / `admin123` - **API 文档**: http://localhost:8000/docs --- ## 📦 安装指南 ### 环境要求 #### 必需环境 | 环境 | 最低版本 | 推荐版本 | 用途 | |------|----------|----------|------| | Python | 3.9+ | 3.11+ | 后端运行时 | | Node.js | 16.0+ | 18 LTS | 前端构建工具 | | npm | 8.0+ | 10+ | 包管理器 | | Chrome | 最新版 | 最新版 | 浏览器自动化 | | Git | 2.0+ | 最新版 | 版本控制 | #### 可选环境 | 环境 | 用途 | 安装说明 | |------|------|----------| | Redis | 缓存/消息队列 | 可选,用于大规模部署 | | PostgreSQL | 替代 SQLite | 可选,用于生产环境 | | Qdrant | 向量数据库 | 用于文档智能问答功能 | #### 操作系统支持 - ✅ **macOS** 10.15+ (完全支持) - ✅ **Ubuntu** 20.04+ (完全支持) - ✅ **Windows** 10/11 (基本支持,部分功能受限) - ✅ **CentOS** 7+ (服务器部署) ### 一键安装 ```bash # 方式一:下载并安装所有依赖(需要联网) python setup.py all # 方式二:仅下载依赖包(离线准备) python setup.py download # 方式三:离线安装(从本地依赖目录安装) python setup.py install --offline # 方式四:自动确认所有提示 python setup.py all --yes ``` ### 手动安装 #### 1. Python 环境 ```bash # 创建虚拟环境(推荐) python -m venv .venv source .venv/bin/activate # Linux/macOS # 或 .venv\Scripts\activate # Windows # 升级 pip pip install --upgrade pip # 安装 Python 依赖 pip install -r requirements.txt # 如果使用 UV 包管理器(更快) uv pip install -r requirements.txt ``` #### 2. Node.js 环境 ```bash # 进入前端目录 cd his_platform/frontend # 安装依赖 npm install # 或使用 pnpm(更快) pnpm install # 返回项目根目录 cd ../.. ``` #### 3. 浏览器驱动同步 ```bash # 本项目使用 Playwright 管理浏览器驱动,无需手动同步 ChromeDriver # 若需预下载浏览器,可执行: python -m playwright install chromium ``` #### 4. 初始化数据库 ```bash # 执行数据库初始化脚本(首次启动会自动执行) python his_platform/backend/scripts/init_database.py ``` #### 5. 可选:安装 Qdrant 向量数据库 ```bash # 启动 Qdrant 服务(可选,用于 AI 知识库功能) python tools/qdrant/start_qdrant.py ``` ### 验证安装 ```bash # 检查 Python 依赖 python -c "import fastapi; print(f'FastAPI: {fastapi.__version__}')" python -c "import playwright; print('Playwright: OK')" # 检查 Node.js 依赖 cd his_platform/frontend && npm list --depth=0 # 运行健康检查测试 pytest specialized_tests/test_types/unit/ -v --tb=short ``` --- ## 💻 使用方法 ### 启动服务 > 主启动器为 `launcher.py`(`start_dev.py` 为旧版启动脚本,已不推荐使用)。 #### 开发模式(推荐) ```bash # 启动完整服务(前端 + 后端,开发模式 Vite HMR) python launcher.py --dev # 仅启动后端 python launcher.py --backend-only # 仅启动前端 python launcher.py --frontend-only ``` **启动选项说明**: | 参数 | 说明 | 示例 | |------|------|------| | `--dev` | 开发模式(Vite HMR 热重载) | `python launcher.py --dev` | | `--backend-only` | 仅启动后端服务 | `python launcher.py --backend-only` | | `--frontend-only` | 仅启动前端服务 | `python launcher.py --frontend-only` | | `--no-browser` | 禁用自动打开浏览器 | `python launcher.py --no-browser` | | `--monitor` | 启用实时资源监控 | `python launcher.py --monitor` | | `--rebuild` | 强制重新构建前端 | `python launcher.py --rebuild` | | `--verbose` | 详细/调试输出 | `python launcher.py --verbose` | | `--no-deps-check` | 跳过依赖完整性检查(CI 环境) | `python launcher.py --no-deps-check` | **启动输出示例**: ``` [INFO] 🔍 环境检测完成: development | 配置来源: system_config_table | 后端:8000 前端:3000 | 耗时: 15.23ms [INFO] ✅ 后端服务启动成功: http://localhost:8000 [INFO] ✅ 前端服务启动成功: http://localhost:3000 [INFO] 🎉 所有服务已就绪! ``` #### 生产模式 ```bash # 后台运行后端 nohup uvicorn his_platform.backend.app.main:app \ --host 0.0.0.0 --port 8000 \ --workers 4 \ > logs/backend.log 2>&1 & # 构建并启动前端 cd his_platform/frontend npm run build npm start -- -p 3000 -s build ``` ### 访问系统 启动成功后,通过浏览器访问: | 服务 | 地址 | 说明 | |------|------|------| | **前端界面** | http://localhost:3000 | Web 管理界面 | | **API 文档** | http://localhost:8000/docs | Swagger UI 交互式文档 | | **ReDoc 文档** | http://localhost:8000/redoc | ReDoc 格式 API 文档 | | **健康检查** | http://localhost:8000/health | 服务健康状态(返回 `{"status": "healthy"}`) | ### 默认登录 - **用户名**: `admin` - **密码**: `admin123` - **角色**: 系统管理员 ⚠️ **安全提示**: 请在生产环境中立即修改默认密码! ### 主要功能模块 #### 1. 🎯 Dashboard(仪表盘) 访问路径:`/dashboard` - 系统概览和关键指标 - 最近测试执行情况 - 待办任务和通知 #### 2. 🧪 测试管理 - **场景测试**: `/scenario-test` - 场景化测试用例管理 - **API 测试**: `/api-test` - 接口测试和调试 - **AI 智能测试**: `/ai-smart-test` - AI 驱动的智能测试 - **AI 测试中心**: `/ai-ui-test-center` - AI UI 自动化测试中心 - **高级录制器**: `/advanced-recorder` - 可视化脚本录制(CDP 协议,需登录后使用) #### 3. 📄 文档中心 - **文档库**: `/document-library` - 测试文档管理 - **文档智能问答**: `/document-qa-workbench` - 基于知识库的 AI 问答系统(新增) - **文档分析**: `/doc-analysis` - AI 文档分析 - **知识库**: `/test-knowledge` - 测试知识积累 #### 4. ⚙️ 系统配置 - **全局配置**: `/global-config` - 系统参数配置(树形编辑器) - **项目管理**: `/project-config` - 多项目环境管理 - **菜单管理**: `/menu-management` - 自定义菜单 - **AI 配置管理**: `/ai-config-management` - AI 提供商和模型配置 #### 5. 👥 用户管理 - **用户管理**: `/user-management` - 用户账号管理 - **权限管理**: `/permission-manage` - 角色和权限分配 #### 6. 📊 报告中心 - **Allure 报告**: `/allure-reports` - 可视化测试报告 - **API 报告**: `/api-reports` - 接口测试统计 - **截图管理**: `/screenshots` - 失败截图查看 ### 执行测试 #### 通过 Web 界面 1. 登录系统 2. 进入"场景测试"或"API 测试"模块 3. 选择或创建测试用例 4. 点击"执行"按钮 5. 实时查看执行进度和结果 #### 通过命令行 ```bash # 运行所有测试 python specialized_tests/run_all_tests.py # 运行特定类型的测试 pytest specialized_tests/test_types/unit/ -v # 单元测试 pytest specialized_tests/test_types/api/ -v # API 测试 pytest specialized_tests/test_types/e2e/ -v # E2E 测试 pytest specialized_tests/test_types/integration/ -v # 集成测试 # 运行独立测试套件 python specialized_tests/interface/interface_test_suite.py # 运行带覆盖率报告的测试 pytest --cov=his_platform --cov-report=html ``` --- ## ⚙️ 配置说明 ### 配置来源(唯一数据源) **位置**: 平台本地数据库的 `system_config` 表(AES-256-GCM 加密) > ⚠️ **2026-09-13 起 `config/settings.yaml` 已按设计删除**(连同 `.env.example`、 > 前端 `SyncYamlModal.jsx`)。配置体系由 YAML 改为 **DB 单源**,**不再有 YAML 降级方案**。 > 详见 `docs/SYSTEM_CONFIG_GUIDE.md`。 **配置加载策略(单数据源,无降级)**: 1️⃣ **SystemConfigManager**(`system_config` 表,AES-256-GCM 加密)— **唯一数据源** 2️⃣ ❌ **失败** — 记录日志并明确报错(不再回退到 YAML) **配置基线**:`seed_system_config_baseline.sql`,由 `his_platform/backend/scripts/init_database.py` 的 `apply_config_baseline_migration()` 在启动初始化时应用。 **设计原则**: - 所有配置必须来自 `system_config` 表 - 禁止使用硬编码默认值,避免配置漂移 - 配置缺失时必须明确报错,便于快速定位问题 - 端口必须通过范围验证 (1-65535) #### 配置项结构 以下是配置项的结构示例(**实际存储在 `system_config` 表中,不再是磁盘上的 YAML 文件**): ```yaml # ==================== 服务接口配置 ==================== Service_interface: backend_interface: 'localhost:8000' # 后端服务地址(支持格式:host:port 或纯 port) frontend_interface: 'localhost:3000' # 前端服务地址 # ==================== 测试环境配置 ==================== testServer: description: 测试环境配置 extranet_url: http://your-server:9090 # 外网地址 hospital_url: http://192.168.0.217:8180/webhis/ # HIS 地址 intranet_url: http://192.168.0.106:8180/webhis/ # 内网地址 test_account: your_account # 测试账号 test_password: your_password # 测试密码 test_role: 门诊收费处 # 测试角色 test_jg_name: 金渠卫生院 # 机构名称 test_jgid: "247" # 机构ID # ==================== AI 服务配置 ==================== ai_server: default_AI_service_provider: Company_Internal_dify # 默认 AI 提供商 default_model: Qwen3-32B-A6000 # 默认模型 providers: # 多提供商配置 Company_Internal_dify: provider_name: 公司Dify base_url: http://192.168.0.8:9001/v1/chat-messages models: Qwen3-32B-A6000: api_key: your-api-key is_default: true xunfei: provider_name: 讯飞星火 base_url: https://spark-api-open.xf-yun.com/x2 # ... 更多配置 aliyun: provider_name: 阿里云百练 base_url: https://dashscope.aliyuncs.com/compatible-mode/v1 # ... 更多配置 # ==================== 数据库配置 ==================== database_config: db_type: sqlserver # 数据库类型 database: YDHIS # 数据库名称 host: 192.168.0.100 # 数据库主机 port: 1433 # 端口 user: sa # 用户名 password: your_password # 密码 pool_size: 10 # 连接池大小 max_overflow: 5 # 最大溢出连接数 # ==================== 引擎配置 ==================== engineType: default_engine: playwright # 默认引擎: playwright # ==================== 安全配置 ==================== security_config: encryption_password: your_secure_password encryption_salt: your_secure_salt key_management: enabled: true rotation: auto_rotate: true encryption_key_ttl_days: 30 # 密钥轮换周期(天) # ==================== 日志配置 ==================== logging: level: INFO # 日志级别: DEBUG/INFO/WARNING/ERROR file: max_size_mb: 50 # 单个日志文件最大大小 backup_count: 5 # 保留备份数量 retention_days: 30 # 日志保留天数 sensitive_filter: enabled: true # 启用敏感信息过滤 ``` #### 配置格式兼容性 系统支持多种端口配置格式: | 格式 | 示例 | 说明 | |------|------|------| | 标准 `host:port` | `localhost:8000` | 推荐格式 | | 纯数字 | `8000` | 仅端口号 | | 带空格 | ` localhost : 8000 ` | 自动去除空格 | **错误处理示例**: ``` 配置加载失败!无法从 system_config 表获取有效端口配置。 错误详情 (1个): 1. SCM配置项为空: backend_interface 或 frontend_interface 缺失 解决方案: 1. 确保 system_config 表中存在 Service_interface.backend_interface 和 frontend_interface 配置项 2. 或启动一次完整初始化: python launcher.py --dev 3. 检查数据库是否损坏: sqlite3 his_platform/backend/data_storage/platform_db.db 'PRAGMA integrity_check;' ``` ### 数据库配置 平台使用**双数据库架构**: #### 1. 平台本地数据库 (SQLite) **用途**: 存储用户、权限、配置、测试元数据等 **位置**: `his_platform/backend/data_storage/platform_db.db`(由 `SQLiteDatabase` 类自动计算,见 `app/utils/persistence/sqlite_database.py`;同目录的 `his_platform.db`、`agent_templates.db` 为遗留文件,勿混淆) **配置**: ```yaml user_database_config: db_type: sqlite database_path: his_platform/backend/data_storage/platform_db.db journal_mode: WAL # WAL 模式提升并发性能 synchronous: NORMAL # 同步模式 auto_vacuum: true # 自动清理 ``` **主要表**: | 表名 | 用途 | |------|------| | `users` | 用户账号信息 | | `roles` | 角色定义 | | `permissions` | 权限项 | | `secure_config_keys` | 加密配置项 | | `system_config` | 系统配置(AES-256 加密) | | `test_projects` | 测试项目 | | `test_cases` | 测试用例 | | `conversations` | AI 对话记录 | | `conversation_messages` | 对话消息详情 | #### 2. 业务数据库 (SQL Server) **用途**: 存储 HIS 业务数据、测试数据等 **配置**: ```yaml database_config: db_type: sqlserver host: 192.168.0.100 port: 1433 database: YDHIS user: sa password: your_password ``` ### AI 服务配置 平台支持**多 AI 提供商**,可灵活切换: #### 支持的提供商 | 提供商 | 模型 | 适用场景 | 特点 | |--------|------|----------|------| | **公司 Dify** | Qwen3-32B-A6000 | 通用场景(默认) | 内网访问,低延迟 | | **讯飞星火** | x1 (高级) / lite (轻量) | 中文场景 | 中文理解能力强 | | **阿里云百练** | qwen3.5 系列 | 长文本/复杂推理 | 上下文窗口大 | | **DeepSeek** | DeepSeek-V3.2 | 代码生成 | 编程能力强 | | **scent 超算** | Qwen3-30B | 高性能计算 | 算力强大 | #### 配置示例 ```yaml ai_server: default_AI_service_provider: xunfei # 切换默认提供商 providers: xunfei: provider_name: 讯飞星火 auth_type: mixed # 认证类型: api_key/mixed base_url: https://spark-api-open.xf-yun.com/x2 websocket_config: APPID: your_app_id APISecret: your_api_secret APIKey: your_api_key models: x1: model_id: x1 description: 高级版模型 is_default: true ``` ### 安全配置 #### 加密机制 平台采用**多层加密体系**: ``` 请求流程: 客户端 → HMAC签名 → AES加密 → HTTPS传输 → 服务端验证解密 加密算法: - 对称加密: AES-256-GCM (数据加密) - 密钥派生: PBKDF2-HMAC-SHA256 (密钥 derivation) - 签名验证: HMAC-SHA256 (防篡改) - 密码哈希: bcrypt (密码存储) ``` #### 密钥管理 ```yaml security_config: encryption_password: your_master_password # 主密码 encryption_salt: your_unique_salt # 盐值 key_management: enabled: true rotation: auto_rotate: true # 自动轮换 encryption_key_ttl_days: 30 # 密钥有效期 max_key_versions: 3 # 保留历史密钥数 key_info: algorithm: AES-256-GCM # 加密算法 signature_algorithm: HMAC-SHA256 # 签名算法 storage: encrypted # 存储方式: encrypted key_file_permissions: "0600" # 文件权限 ``` #### 环境变量(可选) 虽然主要配置在 YAML 中,但以下环境变量可用于特殊场景: | 变量名 | 用途 | 示例 | |--------|------|------| | `APP_MASTER_KEY` | 应用主密钥(最高优先级) | `base64 encoded key` | | `PYTHONPATH` | Python 模块搜索路径 | `/path/to/project` | | `NODE_ENV` | Node.js 运行环境 | `development/production` | --- ## 📁 项目结构 ``` automated_testing/ ├── 📋 项目根目录文件 │ ├── AGENTS.md # AI Agent 开发指南 │ ├── main.py # 占位入口(实际启动走 launcher.py) │ ├── launcher.py # ★ 主启动器(开发/生产模式) │ ├── start_dev.py # 旧版启动脚本(其头部提示已不推荐使用) │ ├── setup.py # 一键安装脚本 │ ├── requirements.txt # Python 依赖 │ ├── pyproject.toml # 项目元数据 + flake8/black/pylint 配置 │ └── README.md # 项目文档(本文件) │ ├── ⚙️ config/ # 配置服务代码包(settings.yaml 已于 2026-09-13 删除) │ ├── unified_config_service.py # 统一配置服务(唯一数据源:system_config 表) │ ├── sources/ # 配置数据源(yaml_source / db_source) │ ├── functional_modules.yaml # 功能模块定义 │ ├── module_dictionary.yaml # 模块字典 │ └── security/ # 安全相关配置 │ └── key_management_service.py │ ├── 🎨 his_platform/ # 主应用目录 │ ├── backend/ # 后端服务 (FastAPI) │ │ ├── app/ │ │ │ ├── main.py # FastAPI 应用入口(路由经 bootstrap/routers 分发注册) │ │ │ ├── bootstrap/ # 路由域注册器(按功能域批量 include_router) │ │ │ ├── routes/ # API 路由 │ │ │ │ ├── ai_services/ # AI 服务接口(含公共路由和私有路由) │ │ │ │ ├── knowledge/ # 知识库接口 │ │ │ │ ├── config_service/ # 配置管理接口 │ │ │ │ ├── storage_service/ # 文档服务、知识库和向量化路由 │ │ │ │ └── recording/ # 高级录制器路由(CDP,需认证) │ │ │ ├── services/ # 业务逻辑服务 │ │ │ ├── repositories/ # 数据访问层 │ │ │ ├── utils/ # 工具类 │ │ │ │ ├── logging/ # 日志系统(配置表驱动,敏感信息脱敏) │ │ │ │ │ └── logger.py # 日志配置和实现 │ │ │ │ ├── security/ # 安全工具 │ │ │ │ ├── ai_providers/ # AI 提供商适配 │ │ │ │ ├── structured_config.py # SystemConfigManager 配置管理 │ │ │ │ └── config_accessor.py # 配置访问器 │ │ │ ├── models/ # 数据模型 │ │ │ └── agent/ # AI Agent(planner/executor/reflector) │ │ ├── tests/ # 后端系统测试(pytest) │ │ ├── scripts/ # 维护脚本 │ │ │ └── init_database.py # 数据库初始化(单入口,幂等性) │ │ └── data_storage/ # 数据存储目录 │ │ └── platform_db.db # SQLite 主数据库(WAL 模式) │ │ │ └── frontend/ # 前端应用 (React) │ ├── src/ │ │ ├── pages/ # 页面组件 │ │ │ ├── GlobalConfig/ # 全局配置页面 │ │ │ ├── AITestCenter/ # AI 测试中心 │ │ │ ├── DocumentQaWorkbench.js # 文档智能问答(新增) │ │ │ ├── AIConfigManagement.js # AI 配置管理 │ │ │ └── ... │ │ ├── components/ # 公共组件 │ │ ├── services/ # API 服务层 │ │ │ └── vectorization-api.js # 向量化 API 服务 │ │ ├── hooks/ # 自定义 Hooks │ │ └── App.js # 应用入口 │ ├── package.json # 前端依赖 │ └── public/ # 静态资源 │ ├── 🧪 specialized_tests/ # 专业测试套件(pytest) │ ├── run_all_tests.py # 测试运行器 │ ├── pytest.ini # pytest 配置(asyncio_mode=auto) │ ├── conftest.py # 全局 fixtures + sys.path 注入 │ └── test_types/ │ ├── unit/ # 单元测试(内存模拟,无外部依赖) │ ├── integration/ # 集成测试 │ ├── api/ # API 测试(需后端运行) │ ├── e2e/ # E2E 测试(Playwright,需完整服务) │ ├── auth/ # 认证测试 │ ├── framework/ # 框架基础测试 │ ├── network/ # 网络/端口测试 │ ├── recorder/ # 录制器测试 │ └── websocket/ # WebSocket 测试 │ ├── api_test/ # 独立 API 测试子项目 │ ├── interface/ # 大型接口测试套件(interface_test_suite.py) │ └── utils/ # 共享工具(API 客户端、数据库工具等) │ ├── 🔧 tools/ # 工具脚本 │ ├── cleanup/ # 环境清理工具 │ │ ├── cleanup_environment.py │ │ └── cleanup_metadata.py │ ├── qdrant/ # Qdrant 管理 │ │ ├── start_qdrant.py │ │ └── stop_qdrant.py │ └── setup/ # 安装工具 │ └── download_embedding_model.py │ ├── 🧪 tests/ # 手动测试脚本 │ └── manual/ │ ├── test_ai_integration_e2e.py │ └── test_ai_security_fixes.py │ ├── 📚 docs/ # 项目文档 │ ├── API_DOCUMENTATION.md │ ├── SECURE_CONFIG_DESIGN.md │ └── TOOLS_CLASSIFICATION.md │ ├── 📚 Tutorial_document/ # 教程文档 ├── 📚 ModelPrompts/ # AI Prompt 模板 ├── 📚 ModelSkils/ # AI Skill 定义 │ ├── 🗄️ V2/ # V2 版本遗留代码(已弃用 Selenium 框架) │ ├── 🌐 documents/ # 文档存储目录(知识库根目录) │ ├── knowledge_base_1/ # 知识库 1 │ ├── knowledge_base_2/ # 知识库 2 │ └── ... │ ├── 🌐 playwright_driver/ # Playwright 浏览器驱动(chromium 等) ├── 🌐 cicd/ # CI/CD 配置 │ └── 📊 logs/ # 日志目录 ├── backend_YYYYMMDD.log # 后端日志 └── frontend_YYYYMMDD.log # 前端日志 ``` --- ## 🧪 测试指南 ### 运行所有测试(推荐) ```bash python specialized_tests/run_all_tests.py ``` 这将运行完整的测试套件,包括: - 单元测试 - API 接口测试 - E2E 端到端测试 - 集成测试 ### 后端系统测试(新增) ```bash # 运行所有后端系统测试 pytest his_platform/backend/tests/ -v --tb=short # 按模块运行 pytest his_platform/backend/tests/test_system_config.py -v # 系统配置 pytest his_platform/backend/tests/test_system_health.py -v # 健康检查 pytest his_platform/backend/tests/test_system_data.py -v # 数据层 pytest his_platform/backend/tests/test_system_auth.py -v # 认证授权 pytest his_platform/backend/tests/test_system_api.py -v # API 接口 pytest his_platform/backend/tests/test_system_security.py -v # 安全防护 ``` ### 性能与并发测试(新增) ```bash # 性能基准测试 pytest his_platform/backend/tests/test_benchmark_suite.py -v # 并发场景测试 pytest his_platform/backend/tests/test_concurrency_scenarios.py -v # WebSocket 扩展测试 pytest his_platform/backend/tests/test_websocket_extended.py -v ``` ### 前端测试(新增) ```bash # 组件测试 (Vitest) cd his_platform/frontend && npx vitest run # E2E 测试 (Cypress) cd his_platform/frontend && npx cypress run ``` ### 按类型运行 #### 单元测试 ```bash # 运行所有单元测试 pytest specialized_tests/test_types/unit/ -v # 运行特定测试文件 pytest specialized_tests/test_types/unit/test_config_adapter.py -v # 运行带详细输出的测试 pytest specialized_tests/test_types/unit/ -v -s # CI 命令(排除特定测试) pytest specialized_tests/test_types/unit/ specialized_tests/test_types/integration/ \ --ignore=test_types/unit/backend/test_llm_document_processor.py \ --ignore=test_types/unit/test_file_validation.py -x ``` #### API 测试 ```bash # 运行 API 测试 pytest specialized_tests/test_types/api/ -v # 运行特定 API 测试 pytest specialized_tests/test_types/api/test_health_check.py -v ``` #### E2E 测试 ```bash # 运行 E2E 测试(需要启动服务) pytest specialized_tests/test_types/e2e/ -v # 运行特定的 E2E 测试 pytest specialized_tests/test_types/e2e/test_login_flow.py -v ``` #### 集成测试 ```bash # 运行集成测试 pytest specialized_tests/test_types/integration/ -v ``` ### 独立测试套件 ```bash # 接口测试套件 python specialized_tests/interface/interface_test_suite.py # 后端系统测试(含安全/性能/并发/WebSocket) pytest his_platform/backend/tests/ -v --tb=short ``` ### 测试选项 ```bash # 显示进度条 pytest -v # 只运行失败的测试 pytest --lf # 并行运行(需要 pytest-xdist) pytest -n auto # 生成覆盖率报告 pytest --cov=his_platform --cov-report=html --cov-report=term # 生成 Allure 报告 pytest --alluredir=allure-results allure serve allure-results # 运行特定标记的测试 pytest -m "slow" # 运行标记为 slow 的测试 pytest -m "not slow" # 排除 slow 测试 ``` ### 测试数据管理 测试完成后清理环境: ```bash # 清理测试环境 python tools/cleanup/cleanup_test_environment.py # 清理元数据和向量数据 python tools/cleanup/cleanup_metadata.py # 全面清理(慎用!) python tools/cleanup/cleanup_environment.py ``` --- ## 📚 API 文档 ### 在线文档 启动服务后访问: - **Swagger UI**: http://localhost:8000/docs - **ReDoc**: http://localhost:8000/redoc > ⚠️ 下表为常用端点速查,**完整端点列表以 http://localhost:8000/docs 为准**(路由按功能域在 `app/bootstrap/routers/` 中注册)。 ### 核心 API 端点 #### 认证接口(`prefix="/auth"`) | 方法 | 端点 | 说明 | 认证 | |------|------|------|------| | POST | `/auth/login` | 用户登录 | 无需 | | POST | `/auth/logout` | 用户登出 | 需要 | | POST | `/auth/refresh` | 刷新 Token | 无需 | | GET | `/auth/me` | 获取当前用户信息 | 需要 | #### 配置管理接口(`prefix="/settings"`,需认证) | 方法 | 端点 | 说明 | 认证 | |------|------|------|------| | GET | `/settings/global-config` | 获取全局配置 | 需要 | | PUT | `/settings/global-config` | 更新全局配置 | 需要 | | POST | `/settings/sync` | 同步配置到 YAML | 需要 | | GET | `/settings/config-tree` | 获取配置树结构 | 需要 | #### 测试执行接口(`/tasks`、`/cases` 等,需认证) | 方法 | 端点 | 说明 | 认证 | |------|------|------|------| | POST | `/tasks/execute` | 执行测试 | 需要 | | GET | `/tasks/{id}/result` | 获取测试结果 | 需要 | | GET | `/tasks/history` | 获取执行历史 | 需要 | | WebSocket | `/ws/...` | 实时执行进度(见 /docs) | 需要 | #### AI 服务接口(`prefix="/ai"`;`ai_public_router` 公共端点无需认证,其余需认证) | 方法 | 端点 | 说明 | 认证 | |------|------|------|------| | GET | `/ai/providers` | 获取可用 AI 提供商列表 | 公共/无需 | | POST | `/ai/chat` | AI 对话 | 需要 | | POST | `/ai/generate-testcase` | 生成测试用例 | 需要 | | POST | `/ai/analyze-ui` | 分析 UI 元素 | 需要 | #### 文档和向量化接口(新增) | 方法 | 端点 | 说明 | 认证 | |------|------|------|------| | GET | `/documents` | 获取文档列表 | 需要 | | GET | `/documents/stats` | 获取文档统计信息 | 需要 | | POST | `/documents/{doc_id}/build-index` | 触发文档向量化 | 需要 | | GET | `/documents/{doc_id}/index-status` | 获取向量化状态 | 需要 | | GET | `/knowledge-bases` | 获取知识库列表 | 需要 | #### 高级录制器接口(CDP over HTTP,`prefix="/api"`,需认证) | 方法 | 端点 | 说明 | 认证 | |------|------|------|------| | GET | `/api/cdp-http/status` | 录制器/CDP 状态 | 需要 | | POST | `/api/cdp-http/start` | 启动录制 | 需要 | | POST | `/api/cdp-http/click` | 模拟点击 | 需要 | | POST | `/api/cdp-http/navigate` | 页面导航 | 需要 | ### 使用示例 #### 登录获取 Token ```bash curl -X POST http://localhost:8000/auth/login \ -H "Content-Type: application/json" \ -d '{"username": "admin", "password": "admin123"}' ``` 响应: ```json { "access_token": "eyJhbGciOiJIUzI1NiIs...", "token_type": "bearer", "expires_in": 28800, "user": { "username": "admin", "role": "admin" } } ``` #### 使用 Token 访问受保护接口 ```bash curl -X GET http://localhost:8000/settings/global-config \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." ``` #### 调用 AI 接口(无需认证) ```bash curl -X GET http://localhost:8000/ai/providers ``` 响应: ```json { "providers": ["openai", "xunfei", "aliyun"] } ``` --- ## 👨💻 开发指南 ### 代码规范 #### Python 代码规范 ```bash # 代码格式化 black his_platform/ tools/ specialized_tests/ # 导入排序 isort his_platform/ tools/ specialized_tests/ # 代码检查 flake8 his_platform/ --max-line-length=120 # 类型检查 mypy his_platform/ ``` #### JavaScript 代码规范 ```bash cd his_platform/frontend # ESLint 检查 npm run lint # 自动修复 npm run lint:fix # Prettier 格式化 npm run format # 检查格式 npm run format:check ``` ### 调试模式 #### 启动 Debug 模式 ```bash # launcher.py 使用 --verbose 输出详细日志(含 SQL/请求响应日志) python launcher.py --verbose ``` 详细输出模式将启用: - 详细 DEBUG 级别日志 - SQL 查询日志 - 请求/响应完整日志 #### VSCode 调试配置 创建 `.vscode/launch.json`: ```json { "version": "0.2.0", "configurations": [ { "name": "FastAPI Debug", "type": "python", "request": "launch", "module": "uvicorn", "args": [ "his_platform.backend.app.main:app", "--host", "localhost", "--port", "8000", "--reload" ], "cwd": "${workspaceFolder}", "env": { "PYTHONPATH": "${workspaceFolder}" } }, { "name": "Start Launcher Debug", "type": "python", "request": "launch", "program": "launcher.py", "args": ["--verbose"], "console": "integratedTerminal", "cwd": "${workspaceFolder}" } ] } ``` ### 日志系统 #### 日志配置(优化后) 日志系统采用**配置表驱动**设计,不再依赖外部文件进行初始配置: **核心特性**: - ✅ 启动时无冗余配置文件查找操作 - ✅ 配置表设置与日志需求自动协调 - ✅ 日志配置正确初始化(使用配置表值) - ✅ 清晰的配置分离(日志配置 vs 应用设置) - ✅ 性能指标:启动时间和资源利用率测量 - ✅ 向后兼容现有日志实践 #### 日志配置示例 ```yaml logging: level: INFO # 全局日志级别 console_level: INFO # 控制台输出级别 file_level: INFO # 文件输出级别 format: "[%(asctime)s] %(levelname)s - %(name)s - %(message)s" file: max_size_mb: 50 # 单个文件最大 50MB backup_count: 5 # 保留 5 个备份 retention_days: 30 # 保留 30 天 ``` #### 日志文件位置 ``` logs/ ├── backend_YYYYMMDD.log # 后端日志 ├── frontend_YYYYMMDD.log # 前端日志 └── test_YYYYMMDD.log # 测试日志 ``` #### 敏感信息过滤 系统自动过滤以下敏感字段: - `password`, `password_hash` - `api_key`, `api_secret` - `token`, `secret` - `private_key` 示例日志输出: ``` [2026-05-11 10:30:45] INFO - app.routes.authentication - User admin logged in successfully [2026-05-11 10:30:46] WARNING - app.utils.security - Invalid token provided [2026-05-11 10:30:47] INFO - 🔍 环境检测完成: development | 配置来源: system_config_table | 后端:8000 前端:3000 | 耗时: 15.23ms ``` #### 启动性能指标 启动时会输出配置加载性能指标: ``` [INFO] 🔍 环境检测完成: development | 配置来源: system_config_table | 后端:8000 前端:3000 | 耗时: 15.23ms ``` 字段说明: - `environment`: 当前运行环境(development/production) - `config_source`: 配置来源(system_config_table/settings_yaml/mixed_scm_yaml) - `backend_port`: 后端服务端口 - `frontend_port`: 前端服务端口 - `elapsed_ms`: 配置加载耗时(毫秒) --- ## 🚢 部署指南 ### 开发环境部署 参考 [快速开始](#快速开始) 部分。 ### 生产环境部署 #### 1. 系统要求 - **CPU**: 4 核+ - **内存**: 8 GB+ - **磁盘**: 50 GB SSD - **网络**: 稳定的内网连接 #### 2. 环境准备 ```bash # 创建专用用户 sudo useradd -m -s /bin/bash his_tester sudo su - his_tester # 克隆代码 git clone