在 Manus 中运行任何 Skill
一键导入
一键导入
一键在 Manus 中运行任何 Skill
开始使用$pwd:
$ git log --oneline --stat
stars:2,163
forks:212
updated:2026年1月19日 03:15
SKILL.md
| name | e2e |
| description | 执行 E2E 测试用例。 根据测试用例的验证类型(ui/api/database)选择正确的工具执行验证。 |
| user-invocable | true |
执行 e2e/ 目录下的端到端测试用例。
⚠️ 禁止跳过 UI 测试!UI 测试是 E2E 测试的核心,必须使用 MCP Chrome DevTools 执行真实的浏览器验证。
verification.type: ui 的测试步骤都必须执行mcp__chrome-devtools__*)每个 worktree 有独立的 Docker 环境和端口配置!
# 当前工作目录的 deploy/dev 目录
cd <当前worktree根目录>/deploy/dev
# 例如:
# /Users/stone/Works/AIO/AgentsMesh-Worktrees/feature-payment-membership/deploy/dev
# /Users/stone/Works/AIO/AgentsMesh-Worktrees/feature-xxx/deploy/dev
必须先 source 当前 worktree 的 .env 文件获取正确端口:
cd <当前worktree>/deploy/dev
source .env
# 查看关键端口
echo "WEB_PORT: ${WEB_PORT}" # Web/Nginx 端口(用于浏览器和 API)
echo "POSTGRES_PORT: ${POSTGRES_PORT}" # 数据库端口
echo "REDIS_PORT: ${REDIS_PORT}" # Redis 端口
容器名称包含 worktree 目录名,格式为:agentsmesh-<worktree-dir>-<service>-1
# 查看当前环境的容器
docker compose ps
# 示例容器名:
# agentsmesh-feature-payment-membership-postgres-1
# agentsmesh-feature-payment-membership-backend-1
# agentsmesh-feature-payment-membership-web-1
cd <当前worktree>/deploy/dev
docker compose ps # 确认所有服务 Up 且 healthy
# 正确:使用 .env 中的 WEB_PORT
source deploy/dev/.env
URL="http://localhost:${WEB_PORT}/dev-org/settings?scope=organization&tab=billing"
# 错误:硬编码端口
URL="http://localhost/..." # ❌ 可能不是当前环境
URL="http://localhost:80/..." # ❌ 端口可能不对
source deploy/dev/.env
API_BASE="http://localhost:${WEB_PORT}/api/v1"
# 示例
curl -s "${API_BASE}/orgs/dev-org/billing/subscription"
source deploy/dev/.env
# 获取容器名(基于 worktree 目录名)
WORKTREE_DIR=$(basename "$(git rev-parse --show-toplevel)")
POSTGRES_CONTAINER="agentsmesh-${WORKTREE_DIR}-postgres-1"
# 执行 SQL
docker exec ${POSTGRES_CONTAINER} psql -U agentsmesh -d agentsmesh -c "SELECT 1"
| 数据 | 值 |
|---|---|
| 测试用户邮箱 | dev@agentsmesh.local |
| 测试用户密码 | devpass123 |
| 测试组织 slug | dev-org |
| 账单页面路径 | /dev-org/settings?scope=organization&tab=billing |
verification.type 选择正确的工具| 类型 | 说明 | 使用的工具 | 优先级 |
|---|---|---|---|
ui | 浏览器页面验证 | MCP Chrome DevTools | 🔴 最高优先级,禁止跳过 |
api | API 调用验证 | Bash (curl) | 正常优先级 |
database | 数据库查询验证 | Bash (docker exec psql) | 正常优先级 |
❌ 错误做法:
"UI 测试需要浏览器,我先跳过,只执行 API 测试"
"MCP 工具不可用,改用 curl 验证"
✅ 正确做法:
1. 确认 Chrome 浏览器已打开并可通过 MCP 连接
2. 使用 mcp__chrome-devtools__* 工具执行所有 UI 验证
3. 如果 MCP 不可用,报告问题而非跳过测试
verification.type: ui)使用 MCP Chrome DevTools 工具进行浏览器验证。
# 1. 获取端口
source deploy/dev/.env
echo "浏览器访问: http://localhost:${WEB_PORT}"
| 工具 | 用途 |
|---|---|
mcp__chrome-devtools__new_page | 打开新页面 |
mcp__chrome-devtools__navigate_page | 导航到 URL |
mcp__chrome-devtools__take_snapshot | 获取页面 A11Y 快照(推荐) |
mcp__chrome-devtools__take_screenshot | 截图 |
mcp__chrome-devtools__click | 点击元素 |
mcp__chrome-devtools__fill | 填写输入框 |
mcp__chrome-devtools__wait_for | 等待文本出现 |
1. 先获取端口
source deploy/dev/.env
# WEB_PORT=xxx
2. 打开/导航到目标页面(使用正确端口)
mcp__chrome-devtools__new_page(url: "http://localhost:${WEB_PORT}/login")
3. 登录(如需要)
mcp__chrome-devtools__fill(uid: "email-input", value: "dev@agentsmesh.local")
mcp__chrome-devtools__fill(uid: "password-input", value: "devpass123")
mcp__chrome-devtools__click(uid: "login-button")
4. 导航到测试页面
mcp__chrome-devtools__navigate_page(url: "http://localhost:${WEB_PORT}/dev-org/settings?scope=organization&tab=billing")
5. 等待页面加载
mcp__chrome-devtools__wait_for(text: "当前方案")
6. 获取页面快照
mcp__chrome-devtools__take_snapshot()
7. 验证快照中包含预期元素
- 检查快照文本是否包含预期内容
- 检查元素是否存在(按钮、输入框等)
- 检查元素状态(disabled、enabled)
# 测试用例要求
verification:
type: ui
check:
- exists: 'heading "优惠码"'
- contains: "输入优惠码获取套餐时长"
执行步骤:
source deploy/dev/.env → 获取 WEB_PORTmcp__chrome-devtools__navigate_page → 导航到账单页面mcp__chrome-devtools__wait_for → 等待 "优惠码" 文本mcp__chrome-devtools__take_snapshot → 获取快照verification.type: api)使用 curl 进行 API 调用验证。
# 切换到当前 worktree 的 deploy/dev 目录
cd <当前worktree>/deploy/dev
source .env
TOKEN=$(curl -s -X POST "http://localhost:${WEB_PORT}/api/v1/auth/login" \
-H "Content-Type: application/json" \
-d '{"email":"dev@agentsmesh.local","password":"devpass123"}' | jq -r '.token')
echo "Token: ${TOKEN}"
source deploy/dev/.env
# GET 请求
curl -s -X GET "http://localhost:${WEB_PORT}/api/v1/orgs/dev-org/billing/subscription" \
-H "Authorization: Bearer $TOKEN" | jq
# POST 请求
curl -s -X POST "http://localhost:${WEB_PORT}/api/v1/orgs/dev-org/billing/checkout" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"order_type":"subscription","plan_name":"pro","success_url":"http://localhost/success","cancel_url":"http://localhost/cancel"}' | jq
verification.type: database)使用 docker exec psql 执行 SQL 查询。
cd <当前worktree>/deploy/dev
source .env
# 方法1:从 docker compose 获取
POSTGRES_CONTAINER=$(docker compose ps -q postgres)
# 方法2:根据 worktree 目录名构建
WORKTREE_DIR=$(basename "$(git rev-parse --show-toplevel)")
POSTGRES_CONTAINER="agentsmesh-${WORKTREE_DIR}-postgres-1"
source deploy/dev/.env
WORKTREE_DIR=$(basename "$(git rev-parse --show-toplevel)")
docker exec agentsmesh-${WORKTREE_DIR}-postgres-1 psql -U agentsmesh -d agentsmesh -c "
SELECT status, plan_id, seat_count
FROM subscriptions
WHERE organization_id = (SELECT id FROM organizations WHERE slug = 'dev-org');
"
source deploy/dev/.env
WORKTREE_DIR=$(basename "$(git rev-parse --show-toplevel)")
POSTGRES_CONTAINER="agentsmesh-${WORKTREE_DIR}-postgres-1"
# 执行 setup SQL
docker exec ${POSTGRES_CONTAINER} psql -U agentsmesh -d agentsmesh -c "
INSERT INTO promo_codes (code, ...) VALUES ('TESTCODE', ...);
"
# 执行 cleanup SQL
docker exec ${POSTGRES_CONTAINER} psql -U agentsmesh -d agentsmesh -c "
DELETE FROM promo_code_uses WHERE ...;
"
# 切换到当前 worktree 的 dev 环境
cd <当前worktree>/deploy/dev
source .env
# 确认服务运行中
docker compose ps
# 记录关键信息
echo "WEB_PORT: ${WEB_PORT}"
echo "WORKTREE: $(basename "$(git rev-parse --show-toplevel)")"
读取 YAML 文件,解析:
- preconditions: 前置条件
- setup: 初始化数据
- steps: 测试步骤
- cleanup: 清理数据
如果有 setup.sql,先执行数据库初始化。
对每个 step:
1. 读取 action 描述
2. 根据 verification.type 选择工具:
- ui → MCP Chrome DevTools(使用 ${WEB_PORT})
- api → curl(使用 ${WEB_PORT})
- database → docker exec psql(使用正确容器名)
3. 执行操作
4. 验证 expected 结果
5. 记录 PASS/FAIL
执行清理 SQL,恢复测试环境。
=== TC-XXX-001: 测试用例名称 ===
环境: feature-payment-membership (WEB_PORT=8080)
Step 1: [操作描述] ✅ PASS
Step 2: [操作描述] ✅ PASS
Step 3: [操作描述] ❌ FAIL - 期望 "xxx",实际 "yyy"
结果: 2/3 PASS
source deploy/dev/.env && echo "WEB_PORT: ${WEB_PORT}"
docker compose ps
# 查看实际容器名
docker compose ps
🚨 错误做法! UI 测试必须使用 MCP Chrome DevTools 进行真实的浏览器验证。
🚨 绝对不可以! UI 测试是 E2E 测试的核心:
如果 MCP Chrome DevTools 无法连接:
1. 确认 Chrome 浏览器已打开
2. 确认 MCP 服务已配置并运行
3. 尝试 mcp__chrome-devtools__list_pages 检查连接
4. 如仍无法连接,报告问题,不要跳过测试
| 操作 | 命令/工具 |
|---|---|
| 获取端口 | source deploy/dev/.env && echo $WEB_PORT |
| 获取容器名 | docker compose ps |
| 导航页面 | mcp__chrome-devtools__navigate_page |
| 获取快照 | mcp__chrome-devtools__take_snapshot |
| 截图 | mcp__chrome-devtools__take_screenshot |
| 点击 | mcp__chrome-devtools__click |
| 输入 | mcp__chrome-devtools__fill |
| 等待文本 | mcp__chrome-devtools__wait_for |
| API 调用 | curl -s "http://localhost:${WEB_PORT}/api/v1/..." |
| 数据库查询 | docker exec <container> psql -U agentsmesh -d agentsmesh -c "SQL" |
verification.type: ui 的测试必须使用 MCP Chrome DevTools 执行source deploy/dev/.env 获取正确端口${WEB_PORT} 变量verification.type 选择工具将当前分支合并到 GitHub 目标分支(通常是 main)。 自动处理代码提交、创建 PR、监控 CI Checks、处理错误直到合并成功。
在 GitLab(内部)和 GitHub(开源)之间双向同步代码。 自动检测哪边有新提交,fast-forward 场景直接推送,分叉场景走 PR/MR 流程。
创建 Git worktree 用于隔离开发新功能或修复 bug。 自动处理分支创建、worktree 设置、目录切换和开发环境初始化。
将当前分支合并到目标分支(通常是 main)。 自动处理代码提交、创建 MR、监控 Pipeline、处理错误直到合并成功。