Open-AutoGLM持续集成:CI/CD流水线自动化测试实战

Open-AutoGLM 是智谱开源的一款面向手机端的 AI Agent 框架,旨在通过自然语言指令驱动移动设备完成复杂操作。它结合视觉语言模型与 ADB 自动化技术,让 AI 能“看懂”屏幕、“理解”用户意图,并自主执行点击、滑动、输入等动作。这一能力不仅适用于个人助理场景,更在自动化测试、远程运维、UI 流程验证等领域展现出巨大潜力。

随着 AI 驱动的自动化工具逐渐进入工程实践,如何将 Open-AutoGLM 无缝集成到现代软件交付流程中,成为提升研发效率的关键问题。本文聚焦于 CI/CD 流水线中的自动化测试实战,带你从零构建一个基于 Open-AutoGLM 的持续集成系统,实现用自然语言描述测试用例,自动执行 App 功能验证,并生成结果报告。我们将深入部署细节、连接配置、脚本调用与异常处理,确保你能在真实项目中快速落地。


1. Open-AutoGLM 架构解析:为什么适合 CI/CD?

在进入实战前,先理解 Open-AutoGLM 的核心架构设计,有助于我们更好地将其融入自动化流程。

1.1 多模态感知 + 自主决策 = 真正的智能代理

传统自动化测试依赖固定脚本和控件 ID,一旦 UI 变动就容易失效。而 Open-AutoGLM 的突破在于:

  • 视觉语言模型(VLM):能直接“读图”,识别按钮、文本、布局结构,无需依赖 XML 层级或资源 ID。
  • 意图解析引擎:将自然语言指令(如“登录账号并下单”)拆解为可执行的动作序列。
  • 动作规划器:根据当前屏幕状态动态调整下一步操作,具备容错和重试机制。

这意味着,即使 App 更新了界面样式,只要功能逻辑不变,AI 依然可以完成任务——这正是 CI/CD 所需的稳定性与适应性。

1.2 基于 ADB 的跨平台控制能力

Open-AutoGLM 通过 Android Debug Bridge(ADB)与设备通信,支持 USB 和 WiFi 两种连接方式。这种设计带来三大优势:

  • 无需 Root 权限:普通开发者模式即可启用。
  • 兼容真机与模拟器:可在本地调试,也可部署在云测平台。
  • 远程调试支持:结合 vLLM 推理服务,实现“本地控制 + 云端推理”的混合架构。

对于 CI/CD 场景而言,这意味着你可以将 AI 测试 Agent 部署在 Jenkins 或 GitHub Actions 的运行环境中,远程操控位于内网或云上的测试机群。


2. 环境准备:搭建可复用的自动化测试基础

要让 Open-AutoGLM 在 CI/CD 中稳定运行,必须建立标准化的环境配置流程。以下步骤适用于 Windows/macOS 开发机及 Linux 构建服务器。

2.1 系统与依赖要求

组件 版本要求 说明
操作系统 Windows 10+ / macOS 12+ / Ubuntu 20.04+ 推荐使用 Linux 容器化部署
Python 3.10+ 需支持 async/await 异步编程
ADB 工具包 platform-tools 最新版 包含 adb、fastboot 等工具
Git 2.30+ 用于克隆仓库和版本管理

建议:在 CI 环境中使用 Docker 镜像统一环境,避免因系统差异导致连接失败。

2.2 ADB 环境配置(以 CI 服务器为例)

在 Linux CI 节点上安装 ADB:

# 下载并解压 platform-tools
wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
unzip platform-tools-latest-linux.zip -d ~/

# 添加到 PATH
export PATH=$PATH:~/platform-tools

# 验证安装
adb version

为了持久化配置,可写入 .bashrc 或使用 update-alternatives 注册全局命令。

2.3 手机端必要设置(批量预配置)

每台参与测试的安卓设备需提前完成以下设置:

  1. 开启开发者选项
    设置 → 关于手机 → 连续点击“版本号”7次。

  2. 启用 USB 调试
    设置 → 开发者选项 → 启用“USB 调试”。

  3. 安装 ADB Keyboard(关键!)
    下载 ADB Keyboard APK 并安装,用于接收 AI 发送的中文输入指令。

  4. 设置默认输入法为 ADB Keyboard
    设置 → 语言与输入法 → 当前输入法 → 切换为 ADB Keyboard。

提示:可通过自动化脚本批量推送 APK 并设置默认输入法:

adb install adb-keyboard.apk
adb shell settings put secure default_input_method com.android.adbkeyboard/.AdbKeyboard

3. 控制端部署:集成 Open-AutoGLM 到 CI 流程

现在我们将 Open-AutoGLM 的控制代码集成到 CI 脚本中,实现一键触发自动化测试。

3.1 克隆并安装 Open-AutoGLM

git clone https://github.com/zai-org/Open-AutoGLM
cd Open-AutoGLM

# 安装依赖
pip install -r requirements.txt
pip install -e .

注意:在 CI 环境中建议缓存 pip 包以加快构建速度。例如在 GitHub Actions 中使用 actions/cache

3.2 编写自动化测试脚本

创建 test_login_flow.py 示例脚本:

import asyncio
from phone_agent.agent import AutoGLMAgent

async def run_test():
    # 初始化代理
    agent = AutoGLMAgent(
        device_id="your-device-id",  # 可通过 adb devices 获取
        base_url="http://your-vllm-server:8800/v1",
        model="autoglm-phone-9b"
    )

    try:
        # 执行自然语言指令
        result = await agent.run("打开淘宝,搜索‘连衣裙’,加入购物车第一个商品")
        
        # 输出执行日志
        print(" 测试成功完成")
        print(f"最终状态: {result.final_state}")
        print(f"耗时: {result.duration:.2f}s")

        # 标记 CI 成功
        exit(0)

    except Exception as e:
        print(f"❌ 测试失败: {str(e)}")
        exit(1)

if __name__ == "__main__":
    asyncio.run(run_test())

该脚本可在任何 CI/CD 平台(如 Jenkins、GitLab CI、GitHub Actions)中作为 step 执行。

3.3 使用 API 实现设备管理自动化

在多设备测试场景下,推荐封装设备连接逻辑:

from phone_agent.adb import ADBConnection, list_devices

def setup_device(ip: str):
    conn = ADBConnection()
    
    # 尝试连接
    success, msg = conn.connect(f"{ip}:5555")
    if not success:
        raise RuntimeError(f"连接失败: {msg}")
    
    # 获取设备信息
    devices = list_devices()
    if not devices:
        raise RuntimeError("未检测到设备")
    
    print(f"已连接设备: {devices[0].device_id}")
    return devices[0]

此函数可用于动态发现测试设备,适配弹性伸缩的测试集群。


4. CI/CD 流水线实战:以 GitHub Actions 为例

下面展示如何将上述流程嵌入标准 CI/CD 流水线。

4.1 创建 .github/workflows/autotest.yml

name: Mobile UI Test with Open-AutoGLM

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test-android:
    runs-on: ubuntu-20.04

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.10'

    - name: Install ADB
      run: |
        wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
        unzip platform-tools-latest-linux.zip -d ~/
        echo "$HOME/platform-tools" >> $GITHUB_PATH

    - name: Start ADB Server
      run: adb start-server

    - name: Connect Device (via ADB over TCP)
      run: adb connect ${{ secrets.DEVICE_IP }}:5555

    - name: Install ADB Keyboard
      run: |
        adb install tests/assets/ADBKeyboard.apk || true
        adb shell settings put secure default_input_method com.android.adbkeyboard/.AdbKeyboard

    - name: Setup Open-AutoGLM
      run: |
        pip install -r Open-AutoGLM/requirements.txt
        pip install -e Open-AutoGLM

    - name: Run AI Test Case
      env:
        BASE_URL: http://${{ secrets.VLLM_SERVER }}:8800/v1
      run: |
        cd Open-AutoGLM
        python ../test_login_flow.py

    - name: Upload Test Report
      if: always()
      run: echo "Test logs here..." > test-report.txt
      uses: actions/upload-artifact@v3
      with:
        path: test-report.txt

4.2 关键配置说明

  • secrets.DEVICE_IP:测试设备的局域网 IP。
  • secrets.VLLM_SERVER:运行 vLLM 推理服务的服务器地址。
  • ADB 连接使用 TCP 模式,便于跨网络访问。
  • 即使测试失败也上传日志,便于排查问题。

5. 敏感操作与异常处理:保障自动化安全

在 CI 环境中运行 AI 自动化脚本,必须考虑安全性与稳定性。

5.1 内置确认机制防止误操作

Open-AutoGLM 支持对敏感操作(如支付、删除、授权)进行人工确认:

agent = AutoGLMAgent(
    ...
    require_confirmation=True  # 开启确认模式
)

当模型识别到“付款”、“卸载”等关键词时,会暂停执行并等待外部信号继续。在 CI 中可通过 webhook 触发审批流程。

5.2 登录与验证码场景应对策略

常见挑战包括:

  • 账号登录需要手动输入密码
  • 图形验证码无法绕过
  • 短信验证码延迟接收

解决方案

  1. 预登录设备池:维护一组已登录的测试账号设备,每次测试前重置状态。
  2. 注入 Token:通过 ADB 修改 SharedPreferences 直接写入登录态。
  3. 跳过验证流程:在测试版 App 中关闭验证码校验。

示例:通过 ADB 注入登录状态

adb shell pm clear com.example.app
adb push login.json /data/data/com.example.app/shared_prefs/

5.3 网络与设备稳定性优化

  • WiFi 连接不稳定? 在 CI 中优先使用 USB 连接,或增加重连机制。

  • ADB 断开? 添加守护进程定期检查:

    while true; do
      adb devices | grep -q "device$" || adb connect $IP:5555
      sleep 10
    done
    
  • 模型响应慢? 设置超时机制,避免阻塞整个流水线:

    try:
        result = await asyncio.wait_for(agent.run(prompt), timeout=120.0)
    except asyncio.TimeoutError:
        print(" 模型响应超时,终止测试")
    

6. 总结:迈向智能化的持续集成新时代

Open-AutoGLM 不仅是一个手机 AI 助理框架,更是推动 智能化自动化测试 落地的重要工具。通过本文的实战配置,你已经掌握了如何:

  • 在 CI/CD 环境中部署 Open-AutoGLM 控制端;
  • 使用自然语言编写可执行的测试用例;
  • 集成到主流 CI 平台(如 GitHub Actions);
  • 处理设备连接、输入法、敏感操作等实际问题。

未来,随着视觉语言模型能力的增强,这类 AI Agent 将不仅能执行预设任务,还能主动发现 UI 异常、识别交互反模式,甚至生成测试用例建议。我们可以预见,“用一句话启动一轮完整回归测试” 将成为新的工程常态。

立即尝试将 Open-AutoGLM 引入你的项目,体验 AI 驱动的自动化新范式。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐