剧作家bdd test gen
一个小型服务,通过编排解析器、AI适配器和Playwright控制器来摄取Gherkin特征文件并生成Playwright测试。
此存储库包含:
- 用于上载功能和启动生成作业的Express API
- MCP流式HTTP端点(
/mcp)使用官方SDK实现模型上下文协议(@modelcontextprotocol/sdk) - Gherkin解析器和弹性回退解析器
- AI适配器挂钩(克劳德/浏览器使用)
- 执行浏览器动作并捕获动作跟踪的Playwright控制器
- 在以下情况下发出Playwright测试文件(模拟Playwright代码发生器/记录器输出)的测试编写器
generated/playwright
先决条件
- 已安装Node.js(LTS)(建议使用Node 18+)
- Git
- 互联网访问(用于Playwright浏览器下载和可选的AI API访问)
快速设置
- 安装依赖项
npm安装
- 安装Playwright浏览器(E2E测试所需)
npx剧作家装置——带deps
- 复制示例环境并配置值(可选)
cp.env.example.env
编辑 .env 设置:
- PORT (服务器端口) - AI_PROVIDER (例如。 claude 或 browser-use) - ANTHROPIC_API_KEY / ANTHROPIC_API_URL (如果使用克劳德) - BROWSER_USE_URL (如果使用浏览器使用代理) - DEFAULT_BASE_URL (由确定性翻译器使用) - GEN_OUTPUT_DIR (默认为 generated)
运行应用程序(开发)
启动TypeScript开发服务器(使用 tsx):
npm运行开发
该应用程序在上公开REST端点 http://localhost: (默认值为4000)。
正常运行时(NODE_ENV!==“test”),服务器在上注册MCP流式HTTP传输 /mcp 使用官方的MCP TypeScript SDK。有关详细信息,请参阅下面的PRD和MCP服务器部分。
API(快速参考)
POST /api/features--上传一个小黄瓜.feature文件(表单字段file).退货{ featureId, filename }上传作为MCP资源存储(默认情况下在内存中)——上传流不会将其写入磁盘。GET /api/features--列出已注册的功能资源(返回[{ id, filename, createdAt }, ...]).GET /api/features/:id--返回特征资源(text/plain)的原始Gherkin内容。POST /api/generation/:featureId--为以下标识的特征资源启动生成作业featureId.JSON正文可能包含以下选项{ baseUrl }.退货{ jobId, status }.GET /api/generation/:jobId/status--轮询生成作业状态(queued,running,completed,failed).GET /api/generation/files--生成的Playwright文件列表GEN_OUTPUT_DIR || generated/playwright.GET /api/generation/files/:name--按名称下载生成的Playwright测试文件。
上传笔记
- 上传中间件使用
multer存储器存储,服务器在MCP支持的资源管理器中注册内容。 - 使用返回的
featureId当开始生成作业时。
MCP服务器(流式HTTP)
该项目集成了官方的MCP TypeScript SDK(@modelcontextprotocol/sdk)并在上公开可流式HTTP传输 /mcp.
- 端点:
POST /mcp(流式HTTP初始化和消息处理),GET /mcp/DELETE /mcp用于会话管理交互。 - 会话标头:
Mcp-Session-Id用于会话管理。基于浏览器的客户端必须通过CORS公开此标头(exposedHeaders: ['Mcp-Session-Id']). - 注册资源:a
feature资源模板(feature://{id})由内存资源管理器注册和支持。MCP客户端可以:
- listResources() 和过滤器 feature 资源 - readResource({ uri: 'feature://' }) 检索功能内容
- 工具/提示:服务器可以注册MCP工具和提示(例如未来
generate工具)。考虑使用MCP工具开始生成并将进度流式传输回客户端。
安全/CORS建议:
- 如果您需要基于浏览器的MCP客户端,请启用CORS并公开
Mcp-Session-Id作为回应。 - 流式HTTP传输支持DNS重新绑定保护和允许的主机/源选项——通过配置
src/mcp/server.ts如果需要的话。
运行测试
- 确保安装了Playwright浏览器(E2E测试所需):
npx剧作家装置——带deps
- 运行测试套件(单元+e2e):
npm测试--run
笔记:
- 使用Vitest运行测试。E2E测试涵盖了上传→ 发电流量。
过梁和类型检查
- 运行ESLint(项目使用平面配置
eslint.config.cjs):
npm运行lint
- 仅运行TypeScript类型检查:
npx tsc--无排放
CI建议
- 在CI中,运行:
1. npm ci 1. npx playwright install --with-deps 1. npm test -- --run 1. npm run lint
故障排除
- 如果Playwright在测试中未能启动,请确保浏览器已安装
npx playwright install --with-deps. - 如果你需要纯WebSocket MCP传输,SDK还支持其他传输;请参阅PRD和SDK文档。
关键实施文件
src/mcp/resourceManager.ts--内存中MCP资源注册表(功能资源)src/mcp/server.ts--MCP可流式HTTP接线使用@modelcontextprotocol/sdksrc/routes/featureRoutes.ts--HTTP功能上传/列表/获取;将上传的功能注册为MCP资源src/services/sessionService.ts--编排和生成作业处理src/middleware/upload.ts—multer用于上传的内存存储
备注
- 该项目包含两种解析策略:
@cucumber/gherkin解析器(首选)和基于弹性线路的回退。 - AI适配器被实现为HTTP客户端;使用时必须提供适当的API密钥/URL。
欢迎投稿和反馈。
