Gherkin测试生成器

一个将Gherkin特性文件解析并生成Playwright测试的服务,集成了AI适配器和Playwright控制器。

  • by Tyler-R-Kendrick
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 tyler-r-kendrick/playwright-bdd-test-gen

使用说明

剧作家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访问)

快速设置

  1. 安装依赖项

    npm安装

  2. 安装Playwright浏览器(E2E测试所需)

    npx剧作家装置——带deps

  3. 复制示例环境并配置值(可选)

    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:<PORT> (默认值为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://<id>' }) 检索功能内容
  • 工具/提示:服务器可以注册MCP工具和提示(例如未来 generate 工具)。考虑使用MCP工具开始生成并将进度流式传输回客户端。

安全/CORS建议:

  • 如果您需要基于浏览器的MCP客户端,请启用CORS并公开 Mcp-Session-Id 作为回应。
  • 流式HTTP传输支持DNS重新绑定保护和允许的主机/源选项——通过配置 src/mcp/server.ts 如果需要的话。

运行测试

  1. 确保安装了Playwright浏览器(E2E测试所需):

    npx剧作家装置——带deps

  2. 运行测试套件(单元+e2e):

    npm测试--run

笔记:

  • 使用Vitest运行测试。E2E测试涵盖了上传→ 发电流量。

过梁和类型检查

  • 运行ESLint(项目使用平面配置 eslint.config.cjs):

    npm运行lint

  • 仅运行TypeScript类型检查:

    npx tsc--无排放

CI建议

  • 在CI中,运行:
    1. npm ci
    2. npx playwright install --with-deps
    3. npm test -- --run
    4. 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/sdk
  • src/routes/featureRoutes.ts --HTTP功能上传/列表/获取;将上传的功能注册为MCP资源
  • src/services/sessionService.ts --编排和生成作业处理
  • src/middleware/upload.ts — multer 用于上传的内存存储

备注

  • 该项目包含两种解析策略: @cucumber/gherkin 解析器(首选)和基于弹性线路的回退。
  • AI适配器被实现为HTTP客户端;使用时必须提供适当的API密钥/URL。

欢迎投稿和反馈。