AISquare-Studio-QA
用自然语言写测试步骤,AI 自动生成 Playwright 测试代码并提交到仓库
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用自然语言写测试步骤,AI 自动生成 Playwright 测试代码并提交到仓库
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:AISquare Studio 组织标识
想象这样一个场景:你在代码审查中收到了一个 PR,PR 描述里写着"这次改动了登录流程,修复了密码重置的 bug"。传统做法是:人工理解改动、手写 Playwright 测试用例、运行验证、提交代码。整个过程可能耗费 30 分钟到 1 小时。
AISquare Studio AutoQA 正在试图彻底消灭这个时间成本。它让开发者只需要在 PR 描述里写"自然语言测试步骤",AI 就会自动生成、运行并提交 Playwright 测试代码到你的仓库。
软件开发中,测试覆盖率是代码质量的基石。但在实际项目中,测试用例编写往往成为瓶颈:开发人员更愿意写功能代码而非测试代码,测试用例编写本身枯燥且容易出错,当项目迭代频繁时,维护大量测试用例的成本急剧上升。
更棘手的是跨仓库协作场景。当你维护一个前端组件库,被多个下游项目依赖时,每次发布都需要在每个依赖项目中运行回归测试。传统的做法是人工跑测试或维护一套通用测试套件,但组件库更新频繁,测试用例维护成本极高。
AISquare Studio AutoQA 的出现正是为了解决这个痛点。它由 AISquare Studio 团队开发,最初设计用于他们自己的前端组件库测试场景,如今已演化为一个通用的 GitHub Action 框架,任何人都可以在自己的项目中接入使用。
这个问题的本质是:如何让 LLM 准确理解"在首页点击登录按钮 → 输入邮箱 → 输入密码 → 点击提交 → 验证跳转"这类自然语言步骤,并生成可靠的 Playwright 代码?
AutoQA 的解决方案分为四层:
第一层:意图理解(Intent Parsing)
AutoQA 在 PR 描述中解析特定的 fenced 代码块格式:
flow_name: user_login_success
tier: A
area: auth
这个格式设计得非常聪明——tier 字段(A/B/C)对应测试优先级(核心流程/重要功能/边缘场景),area 字段对应测试目录结构,让生成后的测试文件自然地组织成 tests/autoqa/A/auth/test_user_login_success.py 的树形结构。
第二层:多智能体编排(CrewAI Multi-Agent)
AutoQA 内部使用 CrewAI 框架实现了一个双 Agent 协作系统:
Planner Agent(规划 Agent):扮演高级 SDET(Software Development Engineer in Test),接收自然语言步骤,生成 Playwright Python 测试代码。它能理解 Web 交互语义,知道"点击按钮"对应 page.click(),"输入文字"对应 page.fill()。
Executor Agent(执行 Agent):负责运行生成的代码,捕获错误,分析失败原因,并在发现选择器失效时主动请求 Planner Agent 重新生成。
两个 Agent 通过 Crew(编队)机制协同工作,由 LLM(默认 GPT-4.1,可配置)驱动,timeout 设为 5 分钟,最大重试 3 次。
第三层:智能选择器发现(DOMInspectorTool)
这是整个系统最关键的技术创新。传统 AI 测试生成工具的问题是:生成的代码可能因为选择器(selector)失效而失败——页面上 #login-form > div:nth-child(2) > input 这样的选择器极其脆弱,UI 改一下就挂了。
AutoQA 的 DOMInspectorTool 解决方法是:在真实浏览器中访问目标页面,通过 Playwright 实时抓取 DOM 树,智能评估每个交互元素的最佳选择器。 选择器优先级为:
data-testid(优先级最高,最稳定)data-testidnamearia-label这意味着 Planner Agent 不是凭空生成选择器,而是基于真实页面结构选择最优方案。生成的测试代码鲁棒性大幅提升。
第四层:AST 安全验证
AI 生成的代码直接执行存在巨大安全风险——可能包含恶意 import(os、subprocess)、文件写入操作、甚至网络请求。AutoQA 在代码执行前会通过 Python AST(抽象语法树)分析验证代码安全性,确保测试代码只能操作 Playwright 提供的浏览器环境。
AutoQA 采用**组合 GitHub Action(Composite Action)**架构,这是整个框架最精妙的设计:
目标仓库 workflow
│
▼
uses: AISquare-Studio/AISquare-Studio-QA@v1
│
├── actions/checkout@v6 (拉取自己的仓库代码)
├── actions/setup-python@v6 (安装 Python 3.11)
├── pip install requirements.txt
├── playwright install chromium
└── python action_runner.py (在目标仓库 workspace 执行)
GitHub Actions 的组合 Action 机制允许 action.yml 中调用其他 Action,并在调用方仓库的 workspace 中执行脚本。这意味着 AutoQA 可以在任何目标仓库中运行,测试代码会直接 commit 到目标仓库的 tests/autoqa/ 目录。
跨仓库写入通过 GitHub REST API 完成,配合 GITHUB_TOKEN(自动从 secrets 注入)实现:在目标仓库创建分支 → 提交生成的测试文件 → 创建 PR 或直接 push 到 main → 在原 PR 下发布带截图的测试报告。
从源码结构来看,AutoQA 的代码组织非常清晰:
src/
├── autoqa/ # 核心业务逻辑
│ ├── parser.py # PR 描述解析(AutoQAParser)
│ ├── action_runner.py # GitHub Action 主入口
│ ├── gap_driven_generator.py # 基于测试gap的生成器
│ └── criteria_generator.py # 测试标准生成器
├── agents/ # CrewAI Agent 封装
│ ├── planner_agent.py # 规划 Agent
│ └── executor_agent.py # 执行 Agent
├── crews/ # CrewAI 编队配置
│ └── qa_crew.py # QA Crew 主编排
├── tools/ # Playwright 工具集
│ ├── dom_inspector.py # DOM 选择器发现
│ └── playwright_executor.py # 浏览器执行工具
├── execution/ # 执行流程编排
│ ├── iterative_orchestrator.py # 迭代式执行
│ └── retry_handler.py # 重试策略
└── templates/ # 测试代码模板
工程实践方面:
.env 环境变量分离代码质量评分:82/100(模块化良好,测试覆盖率完整,但缺少类型检查 CI)
路径一:GitHub Action(全自动化,适合 CI/CD)
在目标仓库的 .github/workflows/autoqa.yml 中添加:
name: AutoQA
on: [pull_request]
jobs:
autoqa:
runs-on: ubuntu-latest
steps:
- uses: AISquare-Studio/AISquare-Studio-QA@v1
with:
openai-api-key: ${{ secrets.OPENAI_API_KEY }}
staging-url: https://staging.example.com
触发时机:PR 创建或更新时自动运行,无需人工介入。
路径二:本地 CLI(快速验证,适合开发调试)
git clone https://github.com/AISquare-Studio/AISquare-Studio-QA.git
cd AISquare-Studio-QA
cp env.template .env
# 编辑 .env 填入 OPENAI_API_KEY 和 STAGING_URL
git clone https://github.com/your-org/your-project.git target
pip install -r requirements.txt
playwright install chromium
python qa_runner.py
生成的测试报告保存在 reports/html/ 和 reports/json/ 目录。
没有任何工具是银弹,AutoQA 同样存在明显局限:
1. API 成本与可用性依赖
AutoQA 每次生成测试都需要调用 GPT-4 API,涉及多次 LLM 调用。在 Active Execution 模式下,每个测试步骤可能触发多次 API 调用。对于高频 PR 场景,API 成本不可忽视。
2. 选择器鲁棒性悖论
虽然 DOMInspectorTool 提升了选择器质量,但如果被测页面本身没有 data-testid 属性,Agent 退化为基于 aria-label、placeholder 或 text 的 fallback 选择器,这类选择器在复杂 SPA(单页应用)中仍可能不稳定。
3. AST 安全验证的边界
AST 分析只能检测静态的 import 和函数调用,无法防止通过字符串拼接构造的恶意代码(如 getattr(__import__('os'), 'system')('rm -rf'))。项目文档中标注"Sandboxed execution environment",但 Playwright 本身的浏览器沙箱并非 Python 安全边界。
4. 非 Web 场景覆盖不足
作为 Playwright 驱动的工具,AutoQA 天然只适用于 Web UI 测试场景。对于纯 API 测试、命令行工具测试、微服务集成测试等场景,目前无法覆盖。
5. 需 Staging 环境
工具依赖真实的 staging URL 运行测试,无法用于生产环境直接测试。团队需要维护一套可访问的 staging 环境。
AutoQA 代表了一个新兴趋势:LLM + 多智能体 + 浏览器自动化的深度融合。传统测试工具(Selenium、Playwright)解决的是"如何运行测试",而 AutoQA 解决的是"测试用例从哪里来"。
从 GitHub 数据看(167 stars,9 open issues,2025-08 创建),AutoQA 处于活跃开发期(最近推送:2026-07-20),增长曲线呈稳定上升态势。在 GitHub Actions 生态中,类似的"AI 驱动测试生成"工具还包括 Codegen for Testing 等,但 AutoQA 的 CrewAI 多智能体架构和 AST 安全验证在同类方案中独树一帜。
未来,随着 GPT-4o 等多模态模型的成熟,AI 生成测试的方向可能会从"自然语言 → 代码"扩展到"截图/视频 → 代码",进一步降低编写测试用例的门槛。AISquare Studio 团队在 roadmap 中也已规划了更多 Agent 类型和自动化标准的引入,值得持续关注。