九方智投APP的UI自动化测试实践

182 阅读9分钟

一、  背景与现状

1.业务痛点分析:九方智投App回归测试人力瓶颈

随着九方智投App产品功能的持续演进与版本迭代频率的加快,回归测试的复杂度与工作量呈指数级增长。尤其在“VIP和九爻股”这类核心业务模块中,当前回归测试用例总数已突破 200+ 条主用例,每条用例平均包含 3 ~ 8个子步骤,总操作步骤数超过 1000+。这些步骤需测试人员在不同设备、不同账户状态手动重复执行,包括:

  • 页面跳转与按钮点击验证
  • 异常路径覆盖(如弱网、中断)
  • 多端一致性检查(iOS/Android)

在当前“双周迭代”的敏捷节奏下,测试团队面临巨大压力: 因此,如何系统性降低App端回归测试的人力投入,同时保障质量不降、效率提升,已成为九方智投质量保障体系亟需突破的关键瓶颈。

2.当前回归测试负担分析

迭代测试中回归测试占用一天时间,但用例数量的不断增加在时间不变的情况下势必导致回归质量的不断下降,比如伴随着迭代数量的不断增加开发侧的某些改动或者技术优化可能导致不同版本之间的功能或者UI产生出差异,对于这部分内容的测试回归也存在很多问题:

  • 手动比对效率低:对于大量的页面,手动逐一比对耗时耗力,且容易受主观判断影响。
  • 缺乏自动化视觉回归:当前自动化测试主要关注功能流程,对界面元素的细微变化检测能力不足。
  • 问题发现不及时:视觉回归问题往往在集成测试甚至上线后才被发现,修复成本高昂。

3.痛点总结(过渡到解决方案)

当前九方智投App回归测试面临“三高一低”困境:

  • 🔴 高人力消耗 — 65%时间用于重复机械操作
  • 🔴 高遗漏风险 — 人工易疲劳,UI细节差异难发现
  • 🔴 高机会成本 — 测试人员无法投入探索性测试或自动化脚本开发
  • 🟢 低ROI — 投入大量人力,缺陷发现效率未线性增长

4.  UI自动化方案可行性分析

根据目前人工回归中面临的高人力消耗和高遗漏风险的问题,我们调研了以下方案来实现测试回归用例的自动化执行;

  • Airtest/Poco 进行UI自动化和截图:

Airtest和Poco是移动UI自动化的成熟框架,提供了强大的设备连接、UI元素识别和操作能力,非常适合捕获UI截图。

  • OpenCV/SSIM 进行图像比对和差异图生成。

成熟算法:OpenCV提供了多种图像比对算法(像素比对、SSIM、感知哈希等),能够满足不同精度和性能要求的比对需求。
差异可视化:可以方便地通过OpenCV在差异图上绘制标记,直观展示比对结果。

  • Spring Boot 作为后台服务,调度Python脚本、处理日志和存储结果

二、  技术实现

1.项目概述

本项目是一套完整的移动应用UI自动化截图对比解决方案,支持跨平台(Android/iOS)应用的自动化安装、登录、导航、截图、对比和报告生成。核心特色是智能长截图拼接和跨平台UI一致性检测。

2.整体架构

本系统采用模块化设计,主要包含以下核心模块:

  • 全自动化流程: 从应用安装到结果报告的端到端自动化
  • 跨平台支持: 同时支持Android和iOS设备
  • 智能长截图: 自适应安全区域的无缝长图拼接
  • 精准对比: 多算法融合的图片差异检测
  • 可视化报告: 美观的HTML测试报告

3.  执行流程

系统执行流程图如下所示:

(1)  设备管理

App指定版本的卸载安装

  • 在进入测试循环前,脚本会根据配置和平台,尝试对目标设备上的App进行安装。
  • 如果App已存在且需要更新版本,或者需要确保环境纯净,可能会先执行卸载操作,然后安装指定版本。
  • install.py 模块中的 install_app_version 函数,在 run_tests_on_platform 中被调用。

安卓:1.下载指定版本APK到临时目录 2. 卸载旧版本应用 43 安装新版本APK 4. 验证安装成功并启动应用

iOS:1.打开testflight 2. 找到历史build 3. 安装对应版本的应用包 4. 验证安装成功并启动应用

(2)  账号登录
  • App安装完成后,脚本会尝试使用预设的测试账号进行登录。
  • 此步骤确保App处于登录状态,以便后续导航到需要比对的页面。
  • login.py 模块中的 login_app 函数,在 run_tests_on_platform 中被调用。

(3)  指定页面导航
  • 脚本会根据从环境变量 UI_PAGE_URLS 解析出的页面链接配置,依次导航到每个目标页面。
  • 导航过程可能包含多次点击、滑动等操作,以及对二级页面(如 Tab 切换、级联点击)的访问。
  • navigate.py 模块中的 navigate_to_page 函数,在 _run_business_line_tests 中被调用。

通过ytx链接自动化导航到指定的页面,平台适配客户端操作系统iOS/Android,并支持重试机制,导航失败自动重试。
后台配置页面:

ytx页面导航工具:在客户端内可直接根据链接跳转到对应的客户端或者h5页面

(4)  区域/长截图
  • 在导航到指定页面并稳定后,脚本会根据配置对页面进行截图。
  • 支持指定区域截图(screenshotRegion 参数),仅捕获页面关键部分。
  • 支持长截图,当页面内容超出屏幕时,通过多次滚动并拼接生成完整的页面长图。
  • 截图功能由 airtest.core.api.snapshot 实现,长截图拼接由 navigate.py 中的逻辑处理,并将截图保存到 CURRENT_RESULT_DIR

长截图和指定区域截图:

image.png             

(5)  图片比对标记差异
  • 在所有截图完成后,脚本会执行图像比对流程。
  • 将当前测试运行生成的截图与预设的基准图进行比较。
  • 使用图像比对算法(如SSIM,可能在 comparison.pycompare_img.py 中实现)识别两张图片之间的像素或结构差异。
  • 如果存在差异,会生成一张差异图,用特定颜色(如红色框)标记出不一致的区域。
  • comparison.py 模块中的 compare_screenshots_cross_platform 函数,在 main 函数的后期被调用。

 

(6)  生成测试报告
  • 完成所有比对后,脚本会汇总所有的测试结果(包括每个页面的比对状态、差异图片链接等)。
  • 生成一份可视化的HTML测试报告,方便用户查看测试概览和具体差异。
  • report_generator.py 模块中的 generate_html_report 函数。

三、  应用效果

针对VIP和九爻股的业务特征,目前UI自动化比对工具主要覆盖指标+信号池页面,在这两个场景下可实现100%的UI自动化测试用例覆盖。以VIP业务为例,目前回归用例总数为138条,其中指标类用例数量为56条,占比达40.6%;

以九方智投App4.29.0版本为例展示UI自动化回归带来的效能提升:
单轮回归测试手动执行 vs 自动化比对耗时对比(VIP端)

测试方式总耗时缺陷发现数
手动回归48人时0
UI自动化比对2人时3

根据近几个版本数据来看,在VIP和九爻股指标+信号池用例回归方面除了节省近40%的测试人力外,UI自动化比对程序也可以发现一些人工回归较难发现的一些问题。

四、  总结与规划

1.  问题解决导向明确,精准突破测试瓶颈

针对九方智投 App 回归测试 “高人力消耗、高遗漏风险、高机会成本、低 ROI” 的 “三高一低” 困境(核心痛点为双周迭代下 200 + 主用例、1000 + 操作步骤的手动执行压力),通过 UI 自动化方案系统性解决了人工回归的效率与质量短板,尤其聚焦 “VIP和九爻股” 核心业务模块,实现了测试资源的精准投放。

2.  技术方案完整闭环,跨平台能力突出

方案构建了从 “设备管理 - 应用安装 - 账号登录 - 页面导航 - 截图比对 - 报告生成” 的全链路端到端自动化流程,形成了“配置驱动-自动执行-智能比对-结果可视化”的完整技术闭环,无需人工介入即可完成全流程测试。在跨平台适配方面,方案深度兼容iOS与Android双系统,针对不同系统的应用安装机制(Android APK下载安装、iOS TestFlight历史版本安装)、页面导航特性进行定制化适配,通过ytx链接导航工具实现跨平台统一页面跳转,结合自适应安全区域的智能长截图拼接技术,解决了不同设备尺寸、系统版本下的UI一致性检测难题。同时,方案内置重试机制、环境清理机制及多算法融合的图像比对能力(如SSIM算法),确保了自动化执行的稳定性与比对结果的精准性,技术模块间协同高效,为跨平台UI回归测试提供了可靠支撑。

3.  效能提升成果量化,价值落地显著

精准锚定核心业务场景,在“VIP和九爻股指标+信号池页面”实现100%UI自动化测试用例覆盖,其中仅VIP业务就覆盖56条指标类用例(占该业务回归用例总数的40.6%),成功填补了此前视觉回归测试的空白。近几个版本数据显示,整体节省近 40% 测试人力,释放测试人员向探索性测试、脚本开发等更高价值工作转移。