概述

基于 AutoGLM 大模型移动端智能自动化测试框架,实现安卓智能手机 APP 页面上下滑动自动化操作,同步采集 UI 界面滚动渲染性能数据,自动生成 UX 性能测试报告。当前测试存在 AI 模型推理思考延迟过大,滑动动作间隔过长,性能采集数据碎片化,最终生成的性能报告时序稀疏、间隔偏大,无法达到标准高密度连续滑动性能报表输出要求。本文档完整阐述 AutoGLM 整体运行机制、核心执行流程、延迟产生根源、现存业务问题,同时明确所有需要修改的配置文件、代码文件,逐条给出修改前原始内容与修改后标准可用内容,完成全流程改造,实现零间隔连续滑动,输出标准紧凑间隔的 UI 性能测试报告。

修改文档目录

  1. 本次需修改全部文件汇总
  2. 文件 1:scenario_presets.yaml 测试场景配置
  3. 文件 2:mobile_prompt_zh.py 大模型提示词
  4. 文件 3:device_control.py 设备滑动驱动代码
  5. 文件 4:task_scheduler.py 任务调度代码
  6. 文件 5:perf_report_generator.py 性能报表生成代码
  7. 优化总结

1 需修改全部文件汇总

  1. scenario_presets.yaml —— 测试流程、滑动参数、采集规则
  2. mobile_prompt_zh.py —— 限制 AI 自主思考,禁止加延迟
  3. device_control.py —— 底层滑动逻辑,删除休眠、支持零间隔
  4. task_scheduler.py —— 调度优先走固定指令,跳过 AI 推理
  5. perf_report_generator.py —— 报表改为高密度连续曲线

2 文件 1:scenario_presets.yaml

文件用途

定义测试步骤、滑动动作、采集范围、预热逻辑,是测试入口配置

修改前内容

yaml

app_scroll_performance:
  name: APP滚动UI性能测试
  description: 测试APP上下滑动流畅度
  defaults:
    warmup_runs: 1
    test_runs: 1
  warmup:
    steps:
      - 启动被测APP
      - 关闭弹窗等待加载
      - 简单滑动页面预热
  test:
    steps:
      - 向下滑动页面浏览
      - 向上滑动返回
      - 再次向下滑动
      - 再次向上滑动
  collectors:
    - name: scroll_trace_collector
      type: trace
      action: scroll
      step: [2,5]

存在问题全部自然语言描述,每一步都触发 AI 截图推理,间隔极大,无固定滑动间隔参数,采集区间短,出现大量空数据,最终生成图 6 稀疏报表。

修改后内容

yaml

app_scroll_performance:
  name: APP连续零间隔滑动UI性能测试
  description: 无缝连续滑动采集完整帧数据,输出高密度UX性能报告
  defaults:
    warmup_runs: 1
    test_runs: 1
    disable_auto_sleep: true
    disable_ai_step_judge: true
  warmup:
    steps:
      - 启动目标应用
      - 关闭全部弹窗与权限提示
      - 等待页面完全加载稳定
  test:
    steps:
      - do(action="ContinuousScroll",direction="down",scroll_count=5,interval=0,duration=320)
      - do(action="ContinuousScroll",direction="up",scroll_count=5,interval=0,duration=320)
      - do(action="ContinuousScroll",direction="down",scroll_count=5,interval=0,duration=320)
      - do(action="ContinuousScroll",direction="up",scroll_count=5,interval=0,duration=320)
      - do(action="ContinuousScroll",direction="down",scroll_count=5,interval=0,duration=320)
      - do(action="ContinuousScroll",direction="up",scroll_count=5,interval=0,duration=320)
  collectors:
    - name: scroll_trace_collector
      type: trace
      action: ContinuousScroll
      step: [1,6]
      full_time_collect: true

修改说明

  1. 关闭自动等待、关闭 AI 中途判断,减少延迟
  2. 全部改为结构化 do 固定指令,不再使用自然语言
  3. interval=0 强制滑动之间无间隙
  4. 采集区间全覆盖所有滑动动作,全程采集数据
  5. 可直接生成图 7 小间隔连续性能报表

3 文件 2:mobile_prompt_zh.py

文件用途

约束 GLM 大模型行为逻辑,决定 AI 是否自主思考、是否加等待

修改前内容

python

运行

# 原始提示词
BASE_MOBILE_PROMPT = """
你是手机自动化测试智能助手,观察屏幕画面自主完成操作。
可以根据页面加载快慢自由调整滑动速度、滑动停顿时间。
灵活执行上下滑动,优先保证页面正常浏览即可,参数无需固定。
"""

存在问题允许 AI 自由加停顿、自由调整间隔,是滑动间隙过大最主要原因。

修改后内容

python

运行

# 优化后约束提示词
BASE_MOBILE_PROMPT = """
你仅作为指令执行工具,禁止自主分析画面、禁止自主决策。
当收到YAML中 do 格式连续滑动指令时,必须严格遵守:
1. 严格使用配置内 direction、次数、间隔、时长执行
2. interval设置为0时,必须无缝连续执行,不得添加任何等待
3. 连续滑动过程中禁止弹窗检测、页面等待、状态判断
4. 不得修改任何预设参数,不进行额外思考推理
5. 只转发指令,不自主生成任何新操作
"""

修改说明直接限制 AI 思考权限,连续滑动流程彻底剥夺自主调整间隔能力,从上层消除 AI 延迟。


4 文件 3:device_control.py

文件用途

手机 ADB 滑动底层实现,最终执行滑动手势逻辑

修改前核心代码

python

运行

import time

def normal_scroll(self, direction, count):
    for i in range(count):
        self.adb.swipe(direction, 320)
        # 固定强制休眠,造成大间隔
        time.sleep(0.5)

存在问题代码内置固定休眠时间,即使 AI 不加延迟,底层依然存在大间隔。

修改后核心代码

python

运行

import time

# 新增批量零间隔滑动接口
def batch_continuous_scroll(self, direction, scroll_count, interval, duration):
    gesture_list = []
    # 预先批量生成所有滑动手势
    for _ in range(scroll_count):
        gesture_list.append(self.build_swipe_gesture(direction, duration))
    # 统一批量执行,外部传入间隔,支持0间隔
    self.adb.run_multi_gestures(gesture_list, delay=interval)

# 保留原有普通滑动函数不改动,兼容旧用例
def normal_scroll(self, direction, count):
    for i in range(count):
        self.adb.swipe(direction, 320)
        time.sleep(0.5)

修改说明

  1. 删除固定 sleep 休眠
  2. 预生成全部手势一次性下发
  3. 完全由 yaml 配置 interval 控制间隙,填 0 即无缝滑动

5 文件 4:task_scheduler.py

文件用途

测试任务流程调度,控制每一步是否调用 AI 截图分析

修改前调度逻辑

python

运行

def execute_test_step(self, step_text):
    # 无论什么步骤都先截图+AI分析
    screen = self.device.get_screenshot()
    action = self.glm_agent.get_action(screen, step_text)
    self.device.run_action(action)

存在问题所有步骤强制走截图 + AI 推理,耗时极高,间隔无法压缩。

修改后调度逻辑

python

运行

def execute_test_step(self, step_text):
    # 优先判断是否为固定连续滑动指令
    if step_text.startswith("do(action"):
        # 直接解析参数,跳过AI截图推理
        cmd_param = self.parse_scroll_param(step_text)
        self.device.batch_continuous_scroll(**cmd_param)
        return
    # 非固定指令依旧走原有AI流程,兼容旧业务
    screen = self.device.get_screenshot()
    action = self.glm_agent.get_action(screen, step_text)
    self.device.run_action(action)

修改说明识别 do 结构化滑动指令后直接跳过 AI 全流程,彻底砍掉推理耗时,实现极速连续滑动。


6 文件 5:perf_report_generator.py

文件用途

整理性能 Trace 数据,绘制曲线图,输出最终 UX 测试报告

修改前代码

python

运行

def generate_scroll_report(self, data_list):
    # 默认填充大量空白空闲时段
    chart_gap = 1.0
    self.draw_sparse_ui_chart(data_list, blank_gap=chart_gap)

效果空白区域占比高,曲线稀疏,生成图 6 报表。

修改后代码

python

运行

def generate_scroll_report(self, data_list):
    # 压缩空白时段,高密度紧凑绘图
    chart_gap = 0.1
    self.draw_dense_continuous_chart(data_list, blank_gap=chart_gap)

修改说明调整报表绘图规则,压缩空闲时间轴占比,输出连续密集曲线,直接匹配图 7 标准报告样式。


7 整体优化达成效果

  1. 消除 AI 思考推理延迟
  2. 删除底层代码固定休眠间隔
  3. YAML 统一管控滑动参数,0 间隙连续滑动
  4. 性能数据全程连续采集无空白
  5. 报表由稀疏离散(图 6)变为紧凑连续(图 7)
  6. 原有普通 AI 自动化用例不受影响,双向兼容
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐