>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
TypeScript

如何让神经网络帮你测试移动应用

每次在 React Native 项目中打开别人的 Pull Request,我都会忍不住想:在 iOS 和 Android 上手动检查布局真是太繁琐了。你需要拉取分支、打包 bundle、启动模拟器、一步步操作场景、截图,然后告诉作者按钮跑出屏幕了。

Callstack 团队发布了 cali 工具的第二版。这是一个命令行工具,使用 LLM 智能体处理移动端测试、性能审计和代码审查。

这个项目是做什么的

Web 智能体已经不再新鲜:Playwright 和 Puppeteer 早就与语言模型集成了。但在移动端,情况一直更复杂。模拟器很难伺候,React Native 调试器自成一派,要把模型接入而不破坏环境需要费一番功夫。

Cali 通过角色分离来解决这个问题。这个工具并不试图成为一个什么都做的通用聊天机器人,而是有严格的操作模式,每个智能体只获得必要的工具包:

  • cali qa 通过 agent-device 工具在真实模拟器或模拟器上运行测试场景。
  • cali perf-review 通过直接连接 agent-react-devtools 来查找不必要的重新渲染和性能下降。
  • cali review 读取代码库并检查 Pull Request 中的差异。
  • cali dev 在测试和类型检查器的监督下尝试自动修改代码。

reviewperf-reviewdev 命令仍被标记为实验性,但基本的 qa 场景已可投入使用。

如何在本地机器上运行测试

入门需要 Node.js 和全局安装的 agent-device 包。如果智能体缺少必要的技能,Cali 会通过 npx skills 将它们拉取到 ~/.cali/skills 目录中。

你可用一行命令控制启动:

cali qa \
  --local ios \
  --artifact ./artifacts/MyApp.app \
  --prompt "проверь текст на экране онбординга и нажми кнопку далее"

如果你只运行了一个 iOS 模拟器或 Android 模拟器,该工具会自动检测到它。在 Android 上启动时,Cali 甚至可以直接从 AndroidManifest.xml 解析 .apk 来提取 applicationId,无需额外参数。

重要细节:对于 debug 构建,你需要单独启动和停止 Metro 服务器。Cali 只负责与应用界面交互。

性能分析和查找不必要的重新渲染

也许最有趣的模式是 perf-review。我们都知道,在 React Native 中不小心将不稳定的回调传递给重型列表有多容易拖垮性能。

Cali 将智能体连接到 React DevTools 并运行目标屏幕:

cali perf-review \
  --context ./cali-context.json \
  --platform android \
  --artifact ./artifacts/app.apk \
  --prompt "проверь экран оформления заказа на подвисания"

智能体会分析交互、捕获指标并生成结构化报告。结果会输出到 artifacts/perf-review 文件夹,其中包含截图、清单和包含主要问题的文本摘要。

共享上下文和在 CI 中工作

Cali 使用配置文件 cali-context.json 而不是长长的终端参数链。它描述了代码库、构建、验收标准和智能体的约束:

{
  "workspaceRoot": ".",
  "repository": {
    "provider": "github.com",
    "owner": "my-team",
    "name": "shop-app",
    "defaultBranch": "main",
    "currentBranch": "feature/checkout-redesign"
  },
  "mobile": {
    "platform": "android",
    "artifactPath": "./artifacts/app.apk"
  },
  "qa": {
    "acceptanceCriteria": [
      "На экране оплаты отображается итоговая сумма",
      "Кнопка подтверждения остаётся кликабельной"
    ]
  },
  "dev": {
    "allowedValidations": ["bun test", "bunx tsc --noEmit"],
    "writePolicy": "workspace",
    "pushPolicy": "disabled"
  }
}

命令行参数始终优先于文件。这在流水线中需要替换新构建产物路径时很方便。

在 GitHub Actions 和 Expo Application Services (EAS) 中,该工具会自动检测环境。额外的辅助工具 cali export-ci 会生成包含截图的 markdown 报告,你可以通过 GitHub CLI 立即将其作为评论发布到打开的 Pull Request 上:

name: Запуск мобильного QA
  env:
    AI_GATEWAY_API_KEY: ${{ secrets.AI_GATEWAY_API_KEY }}
    CALI_PLATFORM: android
    CALI_ARTIFACT_PATH: ./builds/app.apk
  run: npx cali qa --quiet

name: Подготовка отчёта
  run: npx cali export-ci --report ./artifacts/qa/report.json

name: Публикация комментария в PR
  env:
    GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: gh pr comment "${{ github.event.pull_request.number }}" --body-file ./artifacts/qa/ci-comment.md

连接模型和安全

默认情况下,Cali 配置为通过 AI Gateway 与 openai/gpt-5.4-mini 配合工作。如果你有直接的 Anthropic 密钥,可以通过环境变量切换到 Sonnet:

ANTHROPIC_API_KEY=your-anthropic-api-key
QA_MODEL=anthropic/claude-sonnet-4.6

作者们考虑到了安全性,这很好:该工具在加载上下文时会从代码库 URL 中清除令牌和密钥,最终的 report.json 只保存安全字段。

值得一试吗

这个工具看起来很扎实,解决了使用 Expo 和 React Native 开发的团队的一个具体痛点。这里的主要优势是严格的输入契约和可预测的 JSON 输出。智能体不会在抽象的终端中漫无目的地游荡,而是被限制在明确的工具集中。

这个项目仍在积累人气(GitHub 上大约有一千颗星),但角色架构已经允许你在 CI 阶段实现关键用户路径的自动化检查。如果你厌倦了在每次发布前手动运行基本的冒烟测试,值得克隆仓库并在本地模拟器上跑几个屏幕试试。

相关项目