AutotestGen MCP——测试→ AI → 自动测试(MVP)
将手动测试用例从Testiny转换为可执行的自动化测试的最小管道,由Anthropic生成,可与Appium/XCUITest(iOS)一起运行。
流动
- Testiny存储手动测试用例
- API端点通过获取案例
TESTINY_*信任状 - 人类学(
CLAUDE_*)从提示符生成测试代码 - 脚本保存在
output/generated//... - 可选:立即运行(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-jssave: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__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="" \
IOS_DEVICE_NAME="iPhone 12" \
IOS_PLATFORM_VERSION="18.0" \
BUNDLE_ID="com.example.app" \
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-client5.x和XCUITestOptionsAPI - 功能包括首次安装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="" \
UPDATED_WDA_BUNDLE_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'→ runpoetry install,然后使用以下命令运行测试poetry run pytest ....xcodebuild failed with code 70→ 确保真正的设备配置,有效TEAM_ID,信任开发人员,正确的签名证书,设备解锁。EADDRINUSE: 0.0.0.0:4723→ 另一个Appium正在运行;停止它或使用其他端口。- 未找到元素→ 使用健壮的iOS定位器(谓词/类链);确认应用程序中的可访问性标识符。
项目布局(关键部分)
src/server.ts:Express服务器,装载/apisrc/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;不要承诺。
