# auto-test **Repository Path**: zswprogress/auto-test ## Basic Information - **Project Name**: auto-test - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-31 - **Last Updated**: 2026-08-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Sentinel 智能测试平台 V0.4 一个以「**自动建立质量信心**」为目标的需求驱动测试平台——不是"AI 自动点页面",而是 AI 知道**该测什么、为什么失败、结果是否可信、哪些用例值得运行**。 输入项目地址、自然语言需求和 OpenAPI JSON,平台生成可审核的测试用例,用真实 Chromium 或 HTTP 执行,并把运行证据聚合成**质量驾驶舱**:能不能发布、最大风险在哪、哪些是产品缺陷、哪些只是环境问题、哪些需求没有可靠覆盖、相比上个版本是变好还是变差、AI 凭什么这么判断。 ## 质量驾驶舱(管理者视角) `/projects/:id/quality-cockpit` 直接回答: - **发布建议**:可发布 / 暂缓 / 需人工确认(如"暂缓。2 条 P0 登录权限场景失败,其中 1 条高度疑似产品缺陷;订单模块覆盖完整,支付模块存在 3 条未验证需求") - **测试意图图谱**:需求 → 业务场景 → 测试用例 → 执行结果 → 缺陷 全链路可追溯 - **趋势**:最近 10 次 vs 前 10 次运行通过率 - **AI 依据**:门禁原因 + 缺陷证据 + 有效覆盖率 + Flaky + 影子就绪度 ## 已实现 - 项目与 Web/API Base URL 安全边界 - 中文需求文本规则解析 - 需求批准与需求到用例的关联 - 白名单测试 DSL 与严格 Schema 校验 - OpenAPI 3.x Operation 提取和基础契约用例生成 - Playwright 页面打开、填写、点击、选择、勾选、按键、滚动、等待、文本/URL/可见性/可用性断言 - API 请求、状态码、JSON Path、JSON Schema、页面与接口一致性断言 - Console 错误与网络失败采集(`ASSERT_CONSOLE_NO_ERROR` / `ASSERT_NETWORK_NO_FAILURE`) - 运行前预检(`QUEUED → PRECHECK → RUNNING` 状态机,失败进入 `BLOCKED`) - 结构化失败分类(定位器/认证/超时/网络/数据/断言/系统/策略),供归因与 AI 恢复使用 - 异步运行记录、步骤耗时、错误分类和失败截图 - React 管理台:概览、需求、用例、接口、覆盖与门禁、运行报告和设置 - 验收标准粒度覆盖率(FULL/PARTIAL/NONE)、需求覆盖矩阵与发布门禁(PASS/WARN/BLOCK) - JUnit XML 与 HTML 报告导出 - 多环境配置、加密 Secret 管理、审计日志 - AI 自动测试工作台:对话、计划生成(SSE 流式)、审批、AI 主导执行、人工干预/接管/审批 - AI 观察改为可交互元素摘要(Accessibility 角色/名称),不向模型发送完整页面文本 - **参数自动生成**:缺少必填参数时按 OpenAPI schema(enum/example/default/format/类型/名称启发)自动生成,敏感字段拒绝生成 - **测试数据变量库**:`{{var:名称}}` 引用项目变量(运行后自动学习 ID 类字段,带 TTL);`{{secret:名称}}` 引用加密密钥;`{{mock:phone/uuid/email/random:N}}` 随机生成 - **数据探测(PROBE_API)**:AI 缺少真实业务 ID 时自动调用只读列表接口提取真实 ID,仅允许 GET/HEAD - **数据准备/清理闭环**:AI 计划可生成 setupSteps/cleanupSteps,写操作自动带清理策略 - JSONPath 支持数组索引(`$.data.list[0].id`) - 复用 `ai-chat` PostgreSQL,使用独立 `auto_test` Schema - 复用 `ai-chat` Redis,通过 BullMQ 派发执行任务 - 复用 `ai-chat` MinIO,使用独立 `auto-test` Bucket 保存失败截图 - PostgreSQL、Redis、MinIO 均保留本地文件/进程内降级模式 ## 环境要求 - Node.js 20 或更高版本 - Chromium(通过 Playwright 安装) ## 启动 ```powershell pnpm run env:sync pnpm run infra:up pnpm install pnpm run playwright:install pnpm run dev ``` 浏览器打开 `http://localhost:5173`。 `env:sync` 会读取相邻 `ai-chat/.env`,只生成本项目本地 `.env`,不会输出密码或提交密钥。共享资源隔离方式: - PostgreSQL:`ai_companion` 数据库中的 `auto_test` Schema - Redis:DB 1,BullMQ Prefix 为 `auto-test` - MinIO:`auto-test` Bucket 基础设施状态: ```powershell pnpm run infra:status ``` 生产式本地启动: ```powershell pnpm run build pnpm start ``` 浏览器打开 `http://localhost:4310`。 构建后可运行真实 API + Chromium 冒烟: ```powershell pnpm run smoke ``` 执行冒烟前需要已有一个运行中的生产服务。 ## 首次体验 1. 创建项目,填写被测系统的 Web Base URL 和 API Base URL。 2. 在“需求中心”导入示例需求。 3. 批准需求后点击“生成用例”。 4. 在“测试用例”打开草稿,检查或修改步骤 JSON,并把状态设为“已批准”。 5. 点击“执行”。 6. 在“运行报告”查看逐步骤结果;浏览器步骤失败时可打开截图。 7. 在“接口契约”粘贴 OpenAPI JSON,可生成基础接口用例。 ## 可识别的中文动作 规则解析器能够从类似文本中产生自动化步骤: ```text [P0] 打开 /login,在“用户名”输入“tester”,点击“登录”,应看到“工作台” ``` 其他描述会生成 `MANUAL_CHECK`,不会由系统擅自判定通过。 ## 参数自动化的三个等级 平台按以下优先级自动处理接口参数,只在最后一级需要人工: 1. **schema 生成**:必填参数缺失时,按 OpenAPI 的 enum → example → default → format → 类型 → 名称启发自动生成值(敏感字段不生成)。 2. **变量库复用**:`{{var:名称}}` 引用项目测试数据变量库(运行结束自动学习 ID 类字段,默认 7 天有效);`{{secret:名称}}` 引用加密密钥,AI 上下文永远只看到占位符;`{{mock:xxx}}` 生成随机数据。 3. **数据探测**:AI 缺少真实业务 ID 时,返回 `PROBE_API` 决策自动调用只读列表接口提取真实 ID(仅 GET/HEAD,受审批策略与 URL 白名单约束)。 仍无法自动获取时才 `WAIT_FOR_HUMAN`。人工可在「项目设置 → 测试数据变量库」查看/维护学习到的数据。 ## AI 能力评测与影子模式 - **AI 测试评测集**:内置 60 个代表性任务(登录/CRUD/列表/权限/异常/业务流程/UI/契约),按固定评分维度(生成合法性 / 测试点多样性 / 断言绑定 / 定位器质量 / 数据安全 / 危险操作防护 / 核心验收标准覆盖)打分,记录 Token 成本与响应时间;失败分类(20 条固定样例)与修复决策(10 条)准确率独立评测。 - **每次修改 Prompt / 更换模型 / 增加 DSL 后运行**:`POST /projects/:id/eval/run`,分数下降自动标记 regression,防止 AI 能力悄悄退化。 - **影子模式**:自动修复与智能选测默认关闭(= 影子),AI 出决策但不影响 CI;记录它会选哪些测试、如何分类失败,与**人工结论**对比(失败分类准确率 ≥80%、选测召回率 ≥90%、修复建议接受率 ≥70%),达标后在项目设置中逐步开放(autoHealEnabled / aiSelectionEnabled)。 ## 置信度驱动的自愈(分级) - **≥85%**:隔离环境试跑自动修复(换数据 / 重登) - **60%–85%**:生成修复建议,**人工确认后**才执行(含定位器修复——可修复定位器,但绝不自动把"应显示支付成功"改成"应显示支付失败") - **<60%**:只输出失败分析,不执行任何自愈 - 重试通过仍标记为**不稳定通过**(PASSED_WITH_RECOVERY),不隐藏 Flaky;断言/业务结果/测试数据相关修复永远人工审批 ## Flaky 测试治理 每条用例统计:最近 20 次通过率、首次失败重跑通过比例、平均/P95 耗时、失败原因分布(数据/环境/缺陷分离)、定位器变更频率、自愈次数。诊断引擎自动区分:真实产品缺陷 / 偶发网络 / 等待条件错误 / 测试数据竞争 / 不稳定定位器 / Flaky。 ## 测试 DSL 支持: - `UI_GOTO` / `UI_FILL` / `UI_CLICK` / `UI_SELECT` / `UI_CHECK` / `UI_PRESS` / `UI_SCROLL` / `UI_WAIT` - `ASSERT_TEXT` / `ASSERT_URL` / `ASSERT_VISIBLE` / `ASSERT_ENABLED` / `WAIT_FOR_TEXT` - `API_REQUEST` / `ASSERT_STATUS` / `ASSERT_JSON_PATH` / `ASSERT_JSON_SCHEMA` / `ASSERT_PAGE_API_CONSISTENCY` / `EXTRACT_VARIABLE` - `ASSERT_CONSOLE_NO_ERROR` / `ASSERT_NETWORK_NO_FAILURE` - `REQUEST_HUMAN` / `CHECKPOINT` / `FINISH_OBJECTIVE` / `MANUAL_CHECK` 步骤中的敏感值使用 `sensitive: true` 标记,执行日志自动脱敏;接口测试通过 `EXTRACT_VARIABLE` + `{{变量名}}` 串联前置数据。 ## 覆盖与门禁 “覆盖与门禁”页面按验收标准粒度计算覆盖率(已被至少一个已批准用例覆盖的验收标准数 / 已批准验收标准总数),并给出发布门禁结论: - `BLOCK`:P0 用例最近运行失败、权限/安全验收标准未覆盖、P0 需求覆盖率不足 100% - `WARN`:P1 用例失败或 P1 覆盖率低于 90% - `PASS`:其余情况 运行详情页可导出 JUnit XML 与 HTML 报告,报告包含步骤结果、失败分类、Console/网络诊断与运行事件。 平台不执行任意 JavaScript、Shell、SQL 或模型生成代码。 ## 安全限制 - 只允许 HTTP/HTTPS Base URL。 - 浏览器和 API 步骤必须与对应 Base URL 同源。 - URL 不得内嵌用户名或密码。 - 日志自动脱敏密码、Token、Authorization、Cookie 和密钥字段。 - 定位器匹配多个元素时失败,不默认点击第一个。 - 人工确认步骤会把运行标记为 `BLOCKED`。 ## 数据目录 - 默认状态保存在 PostgreSQL `auto_test.platform_state`。 - 默认失败截图保存在 MinIO `auto-test/runs/`。 - 当 `STORE_BACKEND=file` 时使用 `data/store.json`。 - 当 `ARTIFACT_BACKEND=local` 时使用 `data/artifacts/`。 以上运行时文件不会提交到 Git。 ## 当前版本边界 V0.2 仍是单进程 API + Worker 版本,但状态、队列和证据已经使用共享基础设施。当前尚未包含用户认证、规范化领域表、独立 Worker 部署、DOCX/PDF 提取、真实大模型 Provider、Secret 密钥中心、Trace/HAR 和 CI 回调。