一套给测试用的技能文档 + 脚本生成工具。写个 Markdown spec,直接出 pytest 脚本。
概览
一套给测试用的技能文档 + 脚本生成工具。写个 Markdown spec,直接出 pytest 脚本。 : - ✅ 已实现:写 spec → ./generate.sh spec.md → 直接生成可跑脚本 - 📖 SKILL 文档:给 AI 看的操作手册,在 Cursor Chat 里 @ SKILL.md 使用 - — 生成 requests + pytest 脚本,跑 API 测试 - — 生成 pytest-playwright 脚本,跑 UI测试 - — 生成 pymysql 插入脚本,自动造测试数据 - — 生成 Locust 脚本,跑 HTTP 接口压测 - — 生成 Playwright 截图对比脚本,跑视觉回归测试 spec 是一个 Markdown 文件,开头带 YAML frontmatter。格式长这样: * steps 和 flows 二选一,取决于你要单场景还是多场景。 * api_pytest 中 cases 与 scenarios 至少填一个,可同时存在。 当项目有多个环境(开发 / 测试 / 生产)时,硬编码 base_url 不方便。生成器支持通过 .env 文件管理环境变量。 --env 指定的文件 > .env 默认文件 > spec 中的 base_url > 系统环境变量 如果你已经有 OpenAPI(Swagger)文档,可以用 --import-openapi 参数直接生成测试 spec,不用手动写。
README
测试脚本生成器(skills-专业版)
一套给测试用的技能文档 + 脚本生成工具。写个 Markdown spec,直接出 pytest 脚本。
快速开始
# 1. clone
git clone skills-专业版
cd skills-专业版
# 2. 跑一个内置模板
./generate.sh templates/api_smoke.md
cd output && pytest -v
三步搞定。不用改代码,改改 spec 里的地址和接口就行。
目录结构
skills-专业版/
├── generate.sh # 一键生成脚本入口 ✅
├── codegen/ # 代码生成引擎 ✅
│ ├── run_spec.py # spec → 脚本(支持 4 种 kind)
│ ├── requirements.txt # 依赖声明
│ └── examples/ # spec 示例
├── templates/ # 内置模板(10 个)✅
├── output/ # 生成的脚本输出目录 ✅
├── .cursor/rules/ # Cursor AI 编排规则 ✅
├── testcase-skills/ # 用例生成技能链 📖 SKILL 文档
│ ├── planner/ # 规划:拆解需求、定策略
│ ├── analyzer/ # 分析:提取接口、规则、场景
│ ├── generator/ # 生成:批量产出用例
│ └── reviewer/ # 评审:质量检查
├── api-skills/ # API 测试技能链 📖 SKILL 文档
│ ├── 分析/ # 文档解析、接口分析、意图识别
│ ├── 规划/ # 测试策略规划
│ ├── 执行/ # 用例生成、脚本生成、执行报告
│ └── 自我修复/ # 失败用例自动修复
├── UI-skills/ # UI测试技能链 📖 SKILL 文档
│ ├── 分析/ # UI 元素识别、图片用例描述
│ ├── 规划/ # 测试策略规划
│ ├── 执行/ # Playwright 代码生成、执行报告
│ └── 自我修复/ # 失败用例自动修复
├── data-factory/ # 造数(生成 MySQL 插入脚本)✅
├── defect-analysis/ # 缺陷智能分析 📖 SKILL 文档
├── requirement-modeling/ # 需求建模与任务拆解 📖 SKILL 文档
├── special-testing/ # 专项测试 📖 SKILL 文档 + ✅ 性能测试
├── testcase-data-generator/ # 测试数据生成 📖 SKILL 文档
├── intent-router/ # 意图路由 📖 SKILL 文档
└── bug-reporter/ # Bug 报告 📖 SKILL 文档
标注说明:
- ✅ 已实现:写 spec →
./generate.sh spec.md→ 直接生成可跑脚本 - 📖 SKILL 文档:给 AI 看的操作手册,在 Cursor Chat 里
@ SKILL.md使用
内置模板
| 模板 | 用途 | kind | 生成语言 | 运行方式 |
|---|---|---|---|---|
templates/api_smoke.md |
API 冒烟测试 | api_pytest |
Python + requests | pytest -v |
templates/api_auth.md |
API + Bearer Token | api_pytest |
Python + requests | pytest -v |
templates/api_db_check.md |
API + 数据库对比 | api_pytest |
Python + requests | pytest -v |
templates/api_scenario_register.md |
API 多步场景(注册→登录) | api_pytest |
Python + requests | pytest -v |
templates/ui_login.md |
UI 登录流程 | ui_pytest_playwright |
Python + Playwright | pytest -v |
templates/ui_form.md |
UI 表单填写 | ui_pytest_playwright |
Python + Playwright | pytest -v |
templates/ui_e2e.md |
UI 端到端流程 | ui_pytest_playwright |
Python + Playwright | pytest -v |
templates/ui_login_scenarios.md |
多场景登录 | ui_pytest_playwright |
Python + Playwright | pytest -v |
templates/data_factory.md |
自动生成测试数据 | data_factory |
Python + pymysql | python data_factory.py |
templates/perf_test.md |
HTTP 接口压测 | perf_test |
Python + Locust | locust -f perf_test.py |
templates/visual_regression.md |
UI 视觉回归测试 | visual_regression |
Python + Playwright | pytest visual_regression.py |
目前生成器支持五种 kind:
api_pytest— 生成requests + pytest脚本,跑 API 测试ui_pytest_playwright— 生成pytest-playwright脚本,跑 UI测试data_factory— 生成 pymysql 插入脚本,自动造测试数据perf_test— 生成 Locust 脚本,跑 HTTP 接口压测visual_regression— 生成 Playwright 截图对比脚本,跑视觉回归测试
跑 ./generate.sh 不带参数,会打印完整列表和用法。
自己写 spec
模板不够用?自己写一个。
spec 是一个 Markdown 文件,开头带 YAML frontmatter。格式长这样:
---
kind: api_pytest
base_url: http://127.0.0.1:8080
cases:
- id: TC-001
method: GET
path: /api/users
expect_status: 200
- id: TC-002
method: POST
path: /api/users
json_body:
name: "张三"
email: "[email protected]"
expect_status: 201
---
# 用户接口测试
- TC-001: 获取用户列表
- TC-002: 创建用户
写完存成 .md,直接传给生成器:
./generate.sh my_spec.md
就生成了。
spec 字段说明:
| 字段 | 必填 | 说明 |
|---|---|---|
kind |
是 | 脚本类型:api_pytest 或 ui_pytest_playwright |
base_url |
是 | 接口地址 |
cases |
二选一* | 单步用例列表(api_pytest),每个 case 一条测试 |
scenarios |
二选一* | 多步串联场景(api_pytest),同一函数内顺序请求,支持 capture / {变量} / no_auth |
steps |
是* | UI 操作步骤(ui_pytest_playwright 用),和 steps 二选一 |
flows |
是* | 多场景 UI 流程(ui_pytest_playwright 用),和 steps 二选一 |
* steps 和 flows 二选一,取决于你要单场景还是多场景。
* api_pytest 中 cases 与 scenarios 至少填一个,可同时存在。
case 字段(api_pytest):
| 字段 | 必填 | 说明 |
|---|---|---|
id |
是 | 用例编号 |
method |
是 | HTTP 方法:GET/POST/PUT/DELETE/PATCH |
path |
是 | 接口路径 |
json_body |
否 | POST/PUT 的请求体 |
expect_status |
是 | 期望的状态码 |
step 字段(ui_pytest_playwright):
| 字段 | 必填 | 说明 |
|---|---|---|
action |
是 | 操作类型:goto / fill / click / select_option / press / wait_timeout_ms |
path |
否 | goto 时的页面路径 |
l1_test_id |
否* | 元素定位(test id),和 l1_label / l1_placeholder / l2_css 四选一 |
l1_label |
否* | 元素定位(label) |
l1_placeholder |
否* | 元素定位(placeholder) |
l2_css |
否* | 元素定位(CSS 选择器) |
value |
否 | fill / select_option 的值 |
* 元素定位字段四选一,优先用 l1_test_id。
环境变量管理
当项目有多个环境(开发 / 测试 / 生产)时,硬编码 base_url 不方便。生成器支持通过 .env 文件管理环境变量。
快速开始
# 1. 复制示例文件
cp .env.example .env.staging
# 2. 编辑 .env.staging,填入各环境的地址和认证信息
# 3. 生成脚本时指定环境
./generate.sh my_spec.md --env .env.staging
.env 文件格式
BASE_URL=http://staging.example.com
TEST_USERNAME=admin
TEST_PASSWORD=secret123
UI_BASE_URL=http://staging-ui.example.com
–env 参数
| 参数 | 说明 | 示例 |
|---|---|---|
--env |
指定 .env 文件路径 | ./generate.sh spec.md --env .env.staging |
| 不指定 | 使用 spec 中的 base_url,或环境变量 |
./generate.sh spec.md |
优先级
--env 指定的文件 > .env 默认文件 > spec 中的 base_url > 系统环境变量
多环境示例
# 开发环境
./generate.sh my_spec.md --env .env.development
# 测试环境
./generate.sh my_spec.md --env .env.staging
# 生产环境(只读模式)
./generate.sh my_spec.md --env .env.production
生成的脚本会自动从 .env 文件中读取变量,无需手动修改代码。
OpenAPI 导入
如果你已经有 OpenAPI(Swagger)文档,可以用 --import-openapi 参数直接生成测试 spec,不用手动写。
用法
# 从本地文件导入
./generate.sh --import-openapi openapi.json
# 从 URL 导入
./generate.sh --import-openapi http://localhost:8899/api/docs.json
# 指定输出文件名
./generate.sh --import-openapi openapi.yaml -o my_spec.md
工作流程
- 读取 OpenAPI 文档(支持 JSON 和 YAML 格式)
- 解析所有接口定义(路径、方法、参数、响应)
- 自动生成对应的 spec 文件
- 你可以在此基础上补充断言和边界测试
示例
# 导入后生成 spec
./generate.sh --import-openapi openapi.json -o api_spec.md
# 查看生成的 spec
cat api_spec.md
# 根据生成的 spec 产出 pytest 脚本
./generate.sh api_spec.md
注意事项
- 支持 OpenAPI 3.0 和 Swagger 2.0 格式
- 导入的 spec 只包含基础接口调用,复杂断言需要手动补充
- 建议导入后检查一遍,确认路径和方法正确
依赖
- Python 3.8+
- PyYAML(
pip install PyYAML)
跑 generate.sh 的时候如果缺依赖会自动装,不用管。
生成出来的脚本跑 pytest 需要额外装:
# API 测试
pip install pytest requests allure-pytest
# UI测试
pip install pytest pytest-playwright
playwright install chromium
两条路混着用
路径一:本地生成(不需要 AI)
写 spec → 跑 ./generate.sh → 出脚本。稳定、可版本管理。
./generate.sh templates/api_smoke.md
./generate.sh templates/ui_login.md
cd output && pytest -v
路径二:AI 辅助生成(Cursor / Copilot)
在 Cursor Chat 里 @ 引用 SKILL.md,告诉 AI 你要测什么。
@testcase-skills/generator/SKILL.md @api-skills/执行/01_测试用例生成.md
帮我给 http://localhost:8899 的 /api/users 接口生成测试用例
AI 会读 SKILL.md 里的测试设计原则,然后帮你生成用例和脚本。
混用方式
| 场景 | 用哪条路 |
|---|---|
| 快速验证接口 | 路径一(./generate.sh templates/api_smoke.md) |
| 复杂业务逻辑 | 路径二(AI 读 SKILL.md 后生成) |
| 团队共享规范 | 路径一(spec 文件提交到 Git) |
| UI 自动化 | 路径一(简单流程用 spec)或路径二(复杂交互让 AI 写) |
先跑路径一生成基础脚本,再用路径二让 AI 补充边界 case,两条路不冲突。
Cursor 配置
用 Cursor 打开 skills-专业版 目录,.cursor/rules/ 下的规则会自动生效。AI 会按规则引用各 SKILL.md。
常见问题
Q: 生成出来的脚本跑不通?
A: 先看 base_url 改对了没,再看服务是不是起了。
Q: 怎么加自己的模板?
A: 在 templates/ 下面新建 .md 文件,按 spec 格式写就行。
Q: 能生成其他语言的测试脚本吗? A: 目前只支持 Python。后续计划支持 Java / Go 等语言。
推荐工具
换一个关键词,或者移除筛选条件。
安装
npx skillfish add miyaliunian/aitest-skills