Skip to main content

ai-test-runner

调度 AI 测试流水线,从 PRD Markdown 文件、PRD Markdown 内容或已有 delivery-name 开始,按需串联 prd-to-xmind-testcases、testcase-to-playwright-dsl、dsl-selector-enrichment、playwright-dsl-to-spec 和 playwright-cli。适用于完整执行 PRD 到 Playwright 测试、指定 only/resume 阶段、从已有测试用例/DSL/spec 继续、执行 selector enrichment 或运行 Playwright 的场景。

Jump to install

Source facts

Repository
Fhui/AI-TEST
Last source activity
May 6, 2026 at 07:28
Detected SKILL.md language
Chinese
Stars
1
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
3 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
ai-test-runner
description
调度 AI 测试流水线,从 PRD Markdown 文件、PRD Markdown 内容或已有 delivery-name 开始,按需串联 prd-to-xmind-testcases、testcase-to-playwright-dsl、dsl-selector-enrichment、playwright-dsl-to-spec 和 playwright-cli。适用于完整执行 PRD 到 Playwright 测试、指定 only/resume 阶段、从已有测试用例/DSL/spec 继续、执行 selector enrichment 或运行 Playwright 的场景。
# AI 测试流水线调度器 ## 职责范围 仅把本 skill 作为调度器使用。不要重复实现 PRD 分析、测试用例生成、DSL 生成、Selector 补全、Spec 生成或 Playwright 执行逻辑。 各阶段必须委托给已有 skill: - Stage 1: `prd-to-xmind-testcases` - Stage 2: `testcase-to-playwright-dsl` - Stage 4: `dsl-selector-enrichment` - Stage 3: `playwright-dsl-to-spec` - Stage 5: `playwright-cli` - Stage 6: `playwright-result-report` 统一阶段定义: | Stage | Alias | 中文名称 | |------|------|----------| | 1 | prd | PRD 转测试用例 | | 2 | dsl | 测试用例转 DSL | | 4 | enrich | Selector 补全 | | 3 | spec | DSL 转 Playwright Spec | | 5 | run | 执行 Playwright | | 6 | report | 生成测试报告 | 默认完整执行顺序: ```text 1 -> 2 -> 4 -> 3 -> 5 -> 6 ``` 如果用户明确不需要 Selector 补全: ```text 1 -> 2 -> 3 -> 5 -> 6 ``` ## 前置检查 1. 确认项目根目录是当前包含 `.codex` 的目录。 2. 执行任何工作前,先解析用户要求的阶段列表。 3. 如果从 Stage 2 或更后阶段开始,先解析 `delivery-name`。 4. 每个阶段执行前检查必要的上游产物。 5. 缺少必要输入时必须停止并询问用户。不要猜测。 需要稳定检查时,优先使用辅助脚本: ```bash python3 .codex/skills/ai-test-runner/scripts/run_pipeline.py \ --stages 1,2,4,3,5,6 \ --delivery <delivery-name> \ --base-url <url> ``` 脚本负责校验阶段顺序、项目根目录、`delivery-name`、baseURL 要求、上游产物和覆盖风险,并输出调度计划;它不实现已有 skill 的转换逻辑。 如果需要生成流水线调度报告,传入 `--write-report`: ```bash python3 .codex/skills/ai-test-runner/scripts/run_pipeline.py \ --delivery <delivery-name> \ --stages 2,4,3,5 \ --selector-mode dry \ --write-report ``` ## 输入 支持以下任一输入: - PRD Markdown 文件路径,例如 `./prd/login-flow.md` - 用户直接提供的 PRD Markdown 内容 - 已存在的 `delivery-name`,用于恢复执行或从中间阶段开始 当 Stage 1 从 PRD 开始执行时,由 `prd-to-xmind-testcases` 决定 `delivery-name`。Stage 1 完成后,再根据生成的 `testcase/xmind-testcases.md` 识别交付目录。 当从 Stage 2 或更后阶段开始时,必须要求用户提供 `delivery-name`,除非能从所需上游产物自动推断出唯一候选交付目录。如果存在多个候选目录,必须停止并要求用户指定 `delivery-name`。 ## 阶段选择 支持精确阶段表达: ```text only 1 only 2 only 3 only 4 only 5 only 6 only prd only dsl only enrich only spec only run only report 1 1,2 1,2,3 1,2,4,3 1,2,4,3,5 1,2,4,3,5,6 prd,dsl,enrich,spec,run,report PRD转测试用例,测试用例转DSL,Selector补全,生成Spec,执行Playwright,生成测试报告 1,dsl,enrich,5,report resume from 2 resume from 3 resume from 4 resume from 5 resume from 6 resume from spec resume from enrich resume from report ``` 支持自然语言映射: - `只生成测试用例` -> `only 1` - `生成测试用例和 DSL` -> `1,2` - `只把 DSL 转 spec` -> `only 3` - `只执行 Playwright` -> `only 5` - `只生成报告` -> `only report` - `从已有 DSL 开始执行` -> `resume from 3` - `从已有 spec 开始执行` -> `resume from 5` - `生成报告` -> `report` - `执行测试` -> `run` - `补全selector` -> `enrich` - `生成dsl` -> `dsl` - `生成spec` -> `spec` - `PRD解析` -> `prd` 对于 `resume from N`,使用从 `N` 开始的默认完整顺序: - `resume from 2` 或 `resume from dsl` -> `2,4,3,5,6` - `resume from 4` 或 `resume from enrich` -> `4,3,5,6` - `resume from 3` 或 `resume from spec` -> `3,5,6` - `resume from 5` 或 `resume from run` -> `5,6` - `resume from 6` 或 `resume from report` -> `6` 如果用户禁用 Selector 补全,则从完整流程或恢复流程中移除 Stage 4。 ## baseURL 规则 如果 Stage 4 以 `probe` 模式运行,或需要执行 Stage 5,但用户没有提供 `baseURL`,必须停止并询问 `baseURL`。 不要猜测 `baseURL`。没有 `baseURL` 时,不要继续执行 Playwright。生成调度计划或 pipeline-run-report 时,可以把 Stage 5 标记为 `blocked`,但不能运行 Playwright。 Stage 1、Stage 2、Stage 3,以及 Stage 4 的 `dry` 模式不需要 `baseURL`。 `--selector-mode` 未显式指定时,只在阶段正好为完整链路 `1 -> 2 -> 4 -> 3 -> 5 -> 6` 且提供 `baseURL` 时,自动使用 `probe`。其他阶段组合一律默认 `dry`。 ## 中间产物检查 每个阶段执行前,检查必要输入是否存在: - Stage 2 需要 `./<delivery-name>/testcase/xmind-testcases.md` - Stage 3 需要 `./<delivery-name>/ui-dsl/ui-test.dsl.yaml` - 只有当 `./<delivery-name>/ui-dsl/ui-test.enriched.dsl.yaml` 存在,且用户明确要求使用 enriched DSL 时,Stage 3 才能使用 enriched DSL - Stage 4 需要 `./<delivery-name>/ui-dsl/ui-test.dsl.yaml` - Stage 5 至少需要一个 `./<delivery-name>/playwright/tests/*.spec.ts` - Stage 6 需要 `./<delivery-name>/playwright/results.json` 如果产物缺失,必须停止,并说明应该先执行哪个阶段。 不要覆盖已有产物,除非用户明确允许覆盖。已有产物包括: - Stage 1: `./<delivery-name>/testcase/xmind-testcases.md` - Stage 2: `./<delivery-name>/ui-dsl/ui-test.dsl.yaml` - Stage 4: `./<delivery-name>/ui-dsl/ui-test.enriched.dsl.yaml`, `selector-enrichment-report.md`, `unresolved-selectors.md` - Stage 3: `./<delivery-name>/playwright/tests/*.spec.ts` - Stage 5: `./<delivery-name>/playwright/results.json` - Stage 6: `./<delivery-name>/reports/ui-test-report.md` Stage 4 为 `dry` 模式时,允许覆盖 `selector-enrichment-report.md` 和 `unresolved-selectors.md`,不要因为这两个报告已存在而阻断。`ui-test.enriched.dsl.yaml` 仍按普通输出产物处理。 ## Pipeline 报告 `ai-test-runner` 负责生成 `pipeline-run-report.md`,用于记录流水线阶段、前置检查、调度命令和产物索引。 默认报告路径: ```text ./<delivery-name>/reports/pipeline-run-report.md ``` 如果用户通过 `--report-path` 指定路径,使用用户指定路径。 如果当前从 Stage 1 开始,且 `delivery-name` 尚未生成,不要强行写报告;只在控制台提示: ```text Stage 1 完成后才能确定 delivery-name 并生成 pipeline-run-report.md ``` 报告必须包含: - 基本信息:项目根目录、delivery-name、执行阶段、selector mode、是否使用 enriched DSL、baseURL 是否提供、是否 overwrite - 阶段计划:Stage、Alias、中文、状态、输入、输出 - 前置检查结果:`.codex`、delivery-name、上游产物、输出产物、overwrite、Stage 5 baseURL 或 Playwright 配置 - 调度命令 - 产物索引 - 下一步建议 状态只使用: ```text pending ready skipped blocked failed ``` 注意区分报告职责: - `ai-test-runner` 只生成 `pipeline-run-report.md`,记录流水线调度计划、检查结果、命令和产物路径。 - `playwright-result-report` 负责生成 `ui-test-report.md`,用于分析 Playwright 执行结果、失败用例、截图、trace 和 selector 问题。 两者不能混淆。不要生成 `ui-test-report.md`,不要解析 `playwright/results.json`,不要分析失败用例。 ## 阶段调度 ### Stage 1:PRD 转测试用例 使用 `prd-to-xmind-testcases`。 输入: - PRD Markdown 文件路径,或 - PRD Markdown 内容 输出: ```text ./<delivery-name>/testcase/xmind-testcases.md ``` 完成后输出: ```text [✓] Stage 1 PRD 转测试用例完成 ``` ### Stage 2:测试用例转 UI DSL 使用 `testcase-to-playwright-dsl`。 输入: ```text ./<delivery-name>/testcase/xmind-testcases.md ``` 输出: ```text ./<delivery-name>/ui-dsl/ui-test.dsl.yaml ``` 完成后输出: ```text [✓] Stage 2 测试用例转 DSL 完成 ``` ### Stage 4:Selector 补全 使用 `dsl-selector-enrichment`。 默认模式为 `dry`。只有当用户显式要求 probe,或调度完整链路 `1 -> 2 -> 4 -> 3 -> 5 -> 6` 且提供 `baseURL` 时,才使用 `probe` 模式,并且必须要求 `baseURL`。 输入: ```text ./<delivery-name>/ui-dsl/ui-test.dsl.yaml ``` 输出: ```text ./<delivery-name>/ui-dsl/ui-test.enriched.dsl.yaml ./<delivery-name>/ui-dsl/selector-enrichment-report.md ./<delivery-name>/ui-dsl/unresolved-selectors.md ``` 完成后输出: ```text [✓] Stage 4 Selector 补全完成 ``` ### Stage 3:UI DSL 转 Playwright Spec 使用 `playwright-dsl-to-spec`。 输入: ```text ./<delivery-name>/ui-dsl/ui-test.dsl.yaml ``` 如果 `ui-test.enriched.dsl.yaml` 存在,且用户明确要求使用 enriched,则将它作为 Stage 3 输入。 如果阶段列表包含 Stage 4,且 Stage 4 位于 Stage 3 之前,并且 `ui-test.enriched.dsl.yaml` 已存在,Stage 3 默认使用 enriched DSL。只有当用户显式禁用 enriched DSL 时,才使用原始 `ui-test.dsl.yaml`。 输出: ```text ./<delivery-name>/playwright/tests/*.spec.ts ``` 完成后输出: ```text [✓] Stage 3 DSL 转 Playwright Spec 完成 ``` ### Stage 5:执行 Playwright 使用 `playwright-cli` 的指导,并执行: ```bash PLAYWRIGHT_HTML_OPEN=never PLAYWRIGHT_JSON_OUTPUT_NAME=./<delivery-name>/playwright/results.json npx playwright test ./<delivery-name>/playwright/tests --reporter=json ``` 执行本阶段前必须要求 `baseURL`。如果项目通过环境变量读取 baseURL,应保持一致传入,例如: ```bash BASE_URL=<baseURL> PLAYWRIGHT_HTML_OPEN=never PLAYWRIGHT_JSON_OUTPUT_NAME=./<delivery-name>/playwright/results.json npx playwright test ./<delivery-name>/playwright/tests --reporter=json ``` Stage 5 必须固定启用 Playwright JSON reporter,并固定输出到 `./<delivery-name>/playwright/results.json`,供 `playwright-result-report` 读取。 完成后输出: ```text [✓] Stage 5 Playwright 执行完成 ``` ### Stage 6:生成测试报告 使用 `playwright-result-report`。 输入: ```text ./<delivery-name>/playwright/results.json ``` 输出: ```text ./<delivery-name>/reports/ui-test-report.md ``` `ai-test-runner` 只负责在调度计划和 pipeline-run-report 中记录 Stage 6 的建议命令与产物路径,不直接生成 `ui-test-report.md`,不解析 Playwright `results.json`。 完成后输出: ```text [✓] Stage 6 测试报告生成完成 ``` ## 状态输出 每个阶段完成后,输出对应状态: ```text [✓] Stage 1 PRD 转测试用例完成 [✓] Stage 2 测试用例转 DSL 完成 [✓] Stage 4 Selector 补全完成 [✓] Stage 3 DSL 转 Playwright Spec 完成 [✓] Stage 5 Playwright 执行完成 [✓] Stage 6 测试报告生成完成 ``` 跳过某阶段时,输出: ```text [-] Stage X 已跳过,原因 <reason> ``` 某阶段失败时,输出: ```text [✗] Stage X 失败,原因 <reason> ``` 对话输出保持简短。除非用户明确要求查看内容,否则不要在对话中粘贴生成的测试用例、DSL 或 spec 全文。 禁止事项: - `ai-test-runner` 自身不要生成 `ui-test-report.md` - 不要解析 Playwright `results.json` - 不要分析失败用例 - 不要修改其他 skill - 不要执行 `npx playwright test` - 不要把 `ai-test-runner` 变成业务转换器
View on GitHub