移动测试自动化服务器

一个基于Appium的MCP服务器,用于在真实设备上通过BrowserStack进行AI驱动的移动测试自动化,支持设备控制、屏幕分析和测试生成。

  • by sparky77
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 sparky77/appium-mcp-server

使用说明

Appium MCP服务器-维基百科POC

🎯 项目概述

A. 定制模型上下文协议(MCP)服务器 这使得人工智能驱动的移动测试自动化能够对抗 维基百科安卓阿尔法APK 通过BrowserStack应用程序自动化在真实设备上运行。

重要:这是一个 服务器端 项目。MCP配置(claude_desktop_config.json)生活在 客户端,位于Claude Desktop的配置文件夹中。

🚀 快速开始

⚡ 快速回答: 看 START-SERVER.md 获取分步说明!

  1. 安装依赖项: npm install
  2. 设置凭据:复制 .env.example 到 .env 并填写您的BrowserStack详细信息
  3. 添加到Claude桌面配置 (参见 设置.md 或 START-SERVER.md)
  4. 重新启动克劳德桌面
  5. 开始使用工具 在克劳德的谈话中!

🏗️ 建筑

┌─────────────────────┐         stdio          ┌──────────────────────┐
│  Claude Desktop /   │ ◄──────────────────► │  Appium MCP Server   │
│  VS Code Copilot    │                        │  (server.js)         │
│                     │                        │                      │
│  mcp.json or        │                        │  - Device control    │
│  claude_desktop_    │                        │  - Screen analysis   │
│  config.json        │                        │  - Test generation   │
└─────────────────────┘                        └──────────────────────┘
                                                         │
                                                         │ HTTPS
                                                         ▼
                                               ┌──────────────────────┐
                                               │  BrowserStack        │
                                               │  App Automate        │
                                               │  Real Android Device │
                                               │  (Samsung Galaxy S21)│
                                               │  Wikipedia Alpha APK │
                                               └──────────────────────┘

项目结构

appium-mcp-server/
├── src/
│   ├── server.js                    # Main MCP server
│   ├── appium/
│   │   └── session.js              # BrowserStack connection management
│   ├── analysis/
│   │   └── screen.js               # Screen analyzer
│   ├── gestures/
│   │   └── engine.js               # Gesture execution (tap, swipe, scroll)
│   ├── coverage/
│   │   └── analyzer.js             # Coverage gap analysis
│   └── cucumber/
│       ├── generator.js            # Auto-generate Cucumber features
│       └── step-definitions/
│           └── common-steps.js     # Reusable step definitions
├── features/
│   └── wikipedia/                  # Wikipedia POC test scenarios
│       ├── app-launch.feature      # App launch & language selection
│       └── search.feature          # Search functionality (pass + demo failures)
├── scripts/
│   ├── browserstack-api.js         # BrowserStack App Automate REST API client
│   ├── fetch-test-results.js       # CLI: fetch and display test results
│   └── generate-dashboard.js      # Generate HTML test dashboard
├── reports/                        # Test execution reports (gitignored)
├── wdio.conf.js                    # WebdriverIO + Cucumber config
├── claude_desktop_config.example.json
└── package.json

🛠️ MCP工具可用

设备控制工具(需要活动Appium会话)

1. inspect_screen

  • 分析当前移动屏幕
  • 使用选择器列出所有可见元素
  • 自动跟踪测试覆盖率

2. smart_action

  • 自然语言命令: "tap search button", "scroll down"
  • 使用7策略回退链查找元素
  • 跟踪每个动作的覆盖范围

3. 手势

  • 执行特定手势: tap, swipe, scroll, long_press
  • 按描述或XPath定位元素

4. 把手_火把_嘴

  • 处理基于webview的身份验证流
  • NATIVE和WEBVIEW之间的上下文切换

覆盖率分析工具

5. finalize_page

  • 完整的页面覆盖率分析
  • 测试元素与总数、覆盖率、差距分析

6. 分析地图

  • 识别未经测试的元素和缺失的场景
  • 优先建议(高/中/低)

7. 发电机_黄瓜

  • 从屏幕浏览自动生成Cucumber特征文件
  • 已准备好使用WebdriverIO运行

BrowserStack API工具(不需要活动会话)

8. get_test_results

  • 使用通过/失败摘要获取最近的BrowserStack构建
  • 按项目名称筛选,限制结果
  • 查看所有具有状态和公共URL的会话

9. get_build_sessions

  • 获取特定构建的所有会话
  • 每个会话的详细状态信息
  • 快速识别失败的测试

10. get_session_details

  • 获取特定测试会话的详细信息
  • 设备信息、操作系统版本、Appium版本
  • 失败原因和调试URL

11. get_session_logs

  • 获取完整的Appium日志以进行调试
  • 显示确切的错误、尝试的选择器、堆栈跟踪
  • 对于诊断测试失败至关重要

12. get_browserstack_plan

  • 检查BrowserStack帐户限制
  • 查看并行会话使用情况
  • 监视队列状态

🔧 配置

环境变量

创建一个 .env 文件:

BROWSERSTACK_USERNAME=your_username
BROWSERSTACK_ACCESS_KEY=your_access_key
BS_APP_REFERENCE=bs://your_app_hash

Claude桌面配置

增添 %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "appiumMCP": {
      "command": "node",
      "args": ["d:\\Apps\\appium-mcp-server\\src\\server.js"],
      "env": {
        "BROWSERSTACK_USERNAME": "YOUR_BROWSERSTACK_USERNAME",
        "BROWSERSTACK_ACCESS_KEY": "YOUR_BROWSERSTACK_ACCESS_KEY",
        "BS_APP_REFERENCE": "bs://YOUR_APP_HASH"
      }
    }
  }
}

📄 看 claude_desktop_config.example.json 用于复制粘贴就绪模板

VS代码集成

增添 .vscode/mcp.json:

{
  "mcpServers": {
    "appiumMCP": {
      "command": "node",
      "args": ["d:\\Apps\\appium-mcp-server\\src\\server.js"]
    }
  }
}

从以下位置读取凭据 .env 文件自动。


🚀 运行测试

运行维基百科POC测试

npx wdio wdio.conf.js

运行特定标签

# Search tests only
npx wdio wdio.conf.js --cucumberOpts.tags="@search"

# Demo failures (broken tests for MCP fix demonstration)
npx wdio wdio.conf.js --cucumberOpts.tags="@broken"

从BrowserStack获取测试结果

node scripts/fetch-test-results.js

生成HTML仪表板

node scripts/generate-dashboard.js

📊 测试结构

维基百科功能

  • @search -3通过搜索测试(python、javascript、机器学习)
  • @broken -3个故意破坏的测试(演示:MCP识别+修复故障)
  • @app-launch -应用程序启动和语言选择

BrowserStack配置

  • 设备:三星Galaxy S21
  • 操作系统:安卓12.0
  • 项目:MCP测试
  • 构建:内部版本1.0

🔍 故障排除

MCP服务器未在Claude桌面中显示?

  1. 验证配置文件路径和JSON语法(无尾随逗号)
  2. 使用双反睫毛 \\ 在Windows路径中
  3. 完全重新启动Claude Desktop(检查任务管理器)
  4. 检查日志: %APPDATA%\Claude\logs\

BrowserStack连接问题?

  1. 验证中的凭据 .env 或配置JSON
  2. 检查应用程序是否已上传: BS_APP_REFERENCE 必须与上传的APK哈希匹配
  3. 确认BrowserStack应用程序自动化计划已激活

手动测试服务器

node src/server.js
# Should output: "Appium MCP server with coverage analysis running"

📦 依赖项

  • @modelcontextprotocol/sdk -MCP服务器框架
  • webdriverio -Appium自动化
  • @wdio/cucumber-framework -Cucumber-BDD集成
  • @wdio/allure-reporter -诱惑力测试报告
  • @wdio/junit-reporter -JUnit XML报告

为Appium MCP POC演示而构建