自动化测试生成工具

AutotestGen MCP是一个将Testiny中的手动测试用例转换为可执行的自动化测试的工具,支持通过Anthropic生成测试代码并运行于Appium/XCUITest(iOS)。

  • by Arm63
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 arm63/mcp-server-automation

使用说明

AutotestGen MCP——测试→ AI → 自动测试(MVP)

将手动测试用例从Testiny转换为可执行的自动化测试的最小管道,由Anthropic生成,可与Appium/XCUITest(iOS)一起运行。

流动

  • Testiny存储手动测试用例
  • API端点通过获取案例 TESTINY_* 信任状
  • 人类学(CLAUDE_*)从提示符生成测试代码
  • 脚本保存在 output/generated/<target>/...
  • 可选:立即运行(Appium/Pytest)

需求

  • Node.js 18+
  • Python 3.13+
  • Xcode+iOS真实设备配置(适用于Appium iOS)
  • Appium v2(我们通过以下方式使用本地、项目范围的安装 npx)

环境

创建 .env 与:

  • 睾丸

    • TESTINY_API_URL (例如。, https://api.testiny.io/v1)
    • TESTINY_API_KEY
    • TESTINY_PROJECT_ID (可选但推荐)
  • Anthropic

    • CLAUDE_API_KEY
    • CLAUDE_MODEL (可选,默认 claude-3-haiku-20240307)
  • 服务器

    • PORT (可选,默认 3000)

安装并运行MCP服务器

npm install
npm run dev
# Server: http://localhost:3000 (health: GET /)

从Testiny生成测试

端点: GET /api/test-cases/:id/generate

查询参数:

  • target: pytest-appium-ios (默认)| appium-js
  • save: true|false (默认值 true)
  • run: true|false (默认值 false)
  • force:绕过标签检查(默认 false)
  • mock:绕过AI并返回一个简单的启发式测试(默认 false)
  • allowFallback:当AI积分较低时使用简单测试(默认 true)
  • raw:包括原始Testiny负载和调试(默认 false)

例子:

curl "http://localhost:3000/api/test-cases/TC-2/generate?target=pytest-appium-ios&save=true&run=false"

输出文件:

  • output/generated/pytest-appium-ios/test_TC_<id>_pytest_appium_ios.py

标签门:

  • 除非 force=true,案件必须包括以下内容之一: automation:required 或 automation:recommended.

iOS(Pytest+Apium+XCUITest)

Python deps(诗歌使用 pyproject.toml):

poetry env use 3.13
poetry install

项目范围的Appium v2和XCUITest驱动程序:

# Install XCUITest driver locally (stored under ./.appium)
APPIUM_HOME="$PWD/.appium" npx --yes appium driver install xcuitest

# Start Appium on /wd/hub (keep running)
APPIUM_HOME="$PWD/.appium" npx --yes appium --base-path /wd/hub

真实设备环境(示例):

  • APPIUM_URL (默认值 http://127.0.0.1:4723)
  • IOS_UDID (或 DEVICE_UDID)
  • IOS_DEVICE_NAME (或 DEVICE_NAME)
  • IOS_PLATFORM_VERSION (或 PLATFORM_VERSION)
  • 什么之中的一个: BUNDLE_ID (已安装的应用程序)或 APP (.app/.ipa的绝对路径)
  • 签名可选: TEAM_ID
  • 测试数据: TEST_EMAIL (可选)

运行生成的测试(示例):

APPIUM_URL="http://127.0.0.1:4723" \
IOS_UDID="<your-device-udid>" \
IOS_DEVICE_NAME="iPhone 12" \
IOS_PLATFORM_VERSION="18.0" \
BUNDLE_ID="com.example.app" \
TEAM_ID="<your-apple-team-id>" \
poetry run pytest -q "$(pwd)/output/generated/pytest-appium-ios/test_TC_2_pytest_appium_ios.py" -k test_tc_2 -s

笔记:

  • 测试使用 appium-python-client 5.x和 XCUITestOptions API
  • 功能包括首次安装WDA的有用标志: showXcodeLog, useNewWDA.

智能iOS助手(无需辅助功能ID)

手动QA步骤通常引用可见文本,而不是可访问性标识符。使用 src/utils/smart_ios.py 通过人类可读的标签对元素进行操作:

from src.utils.smart_ios import click_by_text, enter_text_by_label, wait_for_text

click_by_text(driver, "Sign In")
enter_text_by_label(driver, "Email or Phone Number", "qa@example.com")
wait_for_text(driver, "Password")

在幕后,助手使用iOS谓词和类链定位器、模糊匹配和空间启发式来查找标签附近的文本字段。

真实设备签名和稳定性环境(推荐)

提供这些环境变量以避免 xcodebuild 代码70和WDA问题:

  • TEAM_ID (或 XCODE_ORG_ID)
  • XCODE_SIGNING_ID (默认值 Apple Development)
  • UPDATED_WDA_BUNDLE_ID (例如。, com.company.WebDriverAgentRunner)

已启用附加功能: showXcodeLog=true, useNewWDA=true, waitForQuiescence=false,WDA启动重试。

Appium基础路径处理

测试在以下时间之间自动回退 APPIUM_URL 有和没有 /wd/hub 当服务器返回404“未知命令”时。您可以设置:

  • APPIUM_URL="http://127.0.0.1:4723" (无基本路径)
  • APPIUM_URL="http://127.0.0.1:4723/wd/hub" (带基础路径)

这是如何工作的(iOS真实设备)

  • 在/wd/hub上启动Appium v2(项目范围):
APPIUM_HOME="$PWD/.appium" npx --yes appium --base-path /wd/hub
  • 启动MCP服务器(在另一个终端中):
PORT=3001 npm run dev
  • 生成一个Testiny案例并将其保存为pytest-apium-ios(示例TC-4):
curl "http://localhost:3001/api/test-cases/TC-4/generate?target=pytest-appium-ios&save=true&run=false&force=true"
  • 在真实设备上运行生成的测试(替换为您的值):
PYTHONPATH="$(pwd)" \
APPIUM_URL="http://127.0.0.1:4723/wd/hub" \
IOS_UDID="00008101-001D35A23C0A001E" \
IOS_DEVICE_NAME="iPhone 12" \
IOS_PLATFORM_VERSION="18.5" \
APP="/absolute/path/to/YourApp.ipa" \
BUNDLE_ID="com.example.app" \
TEAM_ID="<your-team-id>" \
UPDATED_WDA_BUNDLE_ID="<your-team-id>.WebDriverAgentRunner" \
TEST_EMAIL="qa@example.com" \
poetry run pytest -q "$(pwd)/output/generated/pytest-appium-ios/test_TC_4_pytest_appium_ios.py" -k test_tc_4 -s

笔记:

  • 首次运行时使用APP安装.ipa;BUNDLE_ID附加到已安装的应用程序。
  • 签名上限从env中选取;测试使用XCUITestOptions和autoAcceptAlerts。
  • 帮助者来自 src/utils/smart_ios.py 启用健壮的基于文本的操作。

故障排除

  • ModuleNotFoundError: No module named 'appium' → run poetry install,然后使用以下命令运行测试 poetry run pytest ....
  • xcodebuild failed with code 70 → 确保真正的设备配置,有效 TEAM_ID,信任开发人员,正确的签名证书,设备解锁。
  • EADDRINUSE: 0.0.0.0:4723 → 另一个Appium正在运行;停止它或使用其他端口。
  • 未找到元素→ 使用健壮的iOS定位器(谓词/类链);确认应用程序中的可访问性标识符。

项目布局(关键部分)

  • src/server.ts:Express服务器,装载 /api
  • src/routes/test-cases.ts:生成端点、AI回退逻辑
  • src/services/testiny.service.ts:睾丸提取+步进提取
  • src/services/ai.service.ts:人工呼叫和代码提取
  • src/services/prompt.service.ts:按目标提示模板
  • src/services/runner.service.ts:保存文件,可选运行助手
  • output/generated/:生成的测试

安全和成本

  • 人为使用需要资金账户/信用。
  • 保留API密钥 .env;不要承诺。