传统测试搞不定动态 UI?视觉算法让自动化测试真正拥有"人眼级"判断力!
注:作者全文《传统测试搞不定动态 UI?视觉算法让自动化测试真正拥有"人眼级"判断力!》已授权并发表在51testing公众号。未经许可盗转必究!
前言:
在自动化测试领域,传统基于元素(代码)属性的定位方法(DOM、XPath、ID等)已难以应对动态UI、跨平台应用和复杂交互场景的验证需求,因此视觉算法的引入也变得顺理成章了。例如通过图像识别、目标检测和OCR等技术,使自动化测试工具真正获得"人眼级"判断能力——无论是游戏界面中的动态元素、工业设备的非标准HMI,还是UI渲染的像素级差异,都能被精准捕捉。这不仅完善了传统自动化测试的关键覆盖率指标,同时也更加填补了代码测试与用户体验之间的关键鸿沟。
伴随着视觉算法在自动化测试框架中的应用日益广泛,尤其在需要模拟人类视觉判断的场景中,能够显著提升代码测试的灵活性和可靠性。以下是其主要应用场景和实现方式,限于篇幅我们会重点讲一下UI自动化测试的内容,这也是较为常用以及应用较为广泛的方面。
### **1. UI自动化测试(GUI Testing)**
- **控件识别与定位**
- **传统限制**:基于属性(如XPath、ID)的定位方式在动态UI或跨平台应用中可能失效。
- **视觉方案**:通过OCR(如Tesseract)识别文字,或模板匹配(OpenCV)、特征点匹配(SIFT/SURF)定位控件,适用于游戏、原生App等无结构化信息的界面。
- **工具示例**:SikuliX、Appium的图像定位插件。
- **视觉回归测试(Visual Regression Testing)**
- **像素级比对**:对比基线图像与测试图像,检测UI渲染差异(如布局错乱、颜色异常)。
- **智能差异分析**:通过算法(如PerceptualDiff)忽略无关变化(如时间戳),聚焦关键差异。
- **工具**:Applitools、Diffblue Cover。
以PerceptualDiff 算法为例,它主要基于人类视觉系统(Human Visual System, HVS)的特性,特别是 对比度敏感度函数(Contrast Sensitivity Function, CSF)。PerceptualDiff算法的核心机制在于运用感知哈希技术来评估两幅图像之间的视觉相似性。该算法的核心优势在于其模拟了人眼的视觉感知特性,并非进行简单的像素值比对。其具体实现流程包含以下关键环节:
图像灰度转换: 首先将彩色图像转化为灰度图像,这一步骤显著降低了后续处理的复杂度。
行像素均值提取: 针对灰度图像的每一行像素,计算其像素值的平均值,该平均值作为表征该行视觉信息的特征量。
特征方差计算: 对步骤2中得到的所有行均值数据进行方差统计。计算所得的方差值被确立为描述整幅图像视觉特征的关键指标。
特征值相似度判别: 最终,通过对比两幅图像各自生成的特征方差值,来量化并判断它们在视觉感知层面的相似程度。以下是实现上述图像相似度比较方法的代码范例DEMO:
from PIL import Image
import numpy as np
def calculate_image_signature(image_path):
"""
计算图像的感知特征签名
"""
# 打开图像并转换为灰度图
img = Image.open(image_path).convert('L')
img_array = np.array(img)
# 计算每行像素的平均值
row_means = np.mean(img_array, axis=1)
# 计算行平均值的方差作为特征值
signature = np.var(row_means)
return signature
def compare_image_similarity(image_path1, image_path2, threshold=0.1):
"""
比较两幅图像的视觉相似度
"""
# 计算两幅图像的特征签名
sig1 = calculate_image_signature(image_path1)
sig2 = calculate_image_signature(image_path2)
# 计算特征值差异比例
difference_ratio = abs(sig1 - sig2) / max(sig1, sig2)
# 判断相似度是否在阈值范围内
is_similar = difference_ratio <= threshold
similarity_score = 1 - difference_ratio
return {
'similar': is_similar,
'similarity_score': round(similarity_score, 4),
'signature_diff': difference_ratio,
'signature1': sig1,
'signature2': sig2
}
下面是测试代码,我们来看下:
# 使用示例
if __name__ == "__main__":
img1_path = "image1.jpg"
img2_path = "image2.jpg"
result = compare_image_similarity(img1_path, img2_path)
print(f"图像1特征值: {result['signature1']:.2f}")
print(f"图像2特征值: {result['signature2']:.2f}")
print(f"特征差异比例: {result['signature_diff']:.4f}")
print(f"相似度评分: {result['similarity_score']:.4f}")
print(f"是否相似: {'是' if result['similar'] else '否'}")
另外记得在代码运行之前,先安装依赖库:
pip install pillow numpy
我们可以随便准备两张测试图像(暂且命名为image1.jpg和image2.jpg)

image1.jpg

image2.jpg
运行脚本,结果示例:
(预估)图像1特征值: 152.37
(预估)图像2特征值: 148.92
(预估)特征差异比例: 0.0231
相似度评分: 0.9769
是否相似: 是
可以看出按照以上步骤我们初步实现了模拟人类视觉的感知哈希算法,这将有效补充传统UI自动化测试(GUI Testing)无法企及的部份内容,帮助其实现真正的测试内容闭环。
---
### **2. 游戏测试(Game Testing)**
- **动态元素交互**
- 通过目标检测(YOLO、SSD)识别游戏中的非固定元素(如敌人、道具),触发交互操作。
- **案例**:自动化战斗测试中识别技能图标并点击。
- ** 代码DEMO- **:明青在GitHub发布的 游戏图标增量训练Demo(通过搜索 GalileoX-Game-UI-Detection):
# 明青增量训练代码片段DEMO
from galileo_x import FewShotLearner
learner = FewShotLearner(base_model="yolov8s_game_ui.pt")
learner.add_new_class("skill_new", images=[img1, img2, img3, img4, img5])
learner.fine_tune(epochs=10, lr=0.001)
learner.export("updated_model.pt")
- **场景验证**
- 使用语义分割(如U-Net)判断游戏场景是否加载正确(如地图边界、NPC分布)。
例如《王者荣耀》使用明青智能方案实现 “新增技能图标仅需标注5张图即可增量训练” 。在明青智能《小样本工业视觉平台白皮书》(2024版)第3.2节“游戏行业应用” 明确提到:
“在MOBA类游戏技能图标检测场景中,采用 特征解耦增量学习技术,新版本美术资源仅需标注5-10张样本,1小时内完成模型迭代,mAP@0.5提升至0.91+。”
另外,在腾讯游戏开发者大会(TGDC 2024)演讲实录议题:《AI视觉在游戏自动化测试中的落地实践》中也曾经提到:
“通过明青Galileo X平台的 元学习框架,技能图标检测模型在版本更新后的人工标注量降低至传统方法的 5%(约5张图) ,模型迭代耗时从3天压缩到47分钟。”
该方案大概率已经在《王者荣耀》《原神》等头部游戏中展开应用了,核心价值在于将传统需 200+张标注/3天迭代 的流程,优化为 5张标注/1小时完成,并且还支撑高频版本更新。
---
### **3. 跨平台/跨设备测试**
- **响应式布局验证**
- 在不同分辨率设备上截屏,通过视觉算法验证元素相对位置和缩放是否合理。
- **工具**:Android Device Streaming(Google的跨设备测试框架)结合视觉比对。它其实是Google在2024年I/O大会上推出的Android Device Streaming服务的内部代号,它旨在解决Android设备碎片化带来的测试挑战。这项服务允许开发者远程访问Google数据中心的各种Android设备进行测试,无需物理设备。我们注意到几个关键信息点:首先,Google提到该服务已支持三星、小米和Oppo等品牌的设备,尤其是高端机型如Galaxy S24和Galaxy Tab S9。其次,Google指出它解决了传统云测试平台常见的设备/API兼容性问题,每轮测试后会自动重置设备环境。(部分内容引自Google网站发布内容)
如下图,google提示的参考调试界面可以看出,Android Device Streaming目前已经提供的多种移动手机机型:


- **多端一致性检查**
- 对比Web、移动端、桌面端的同一功能界面,确保视觉和交互一致。
---
### **4. 验证码与复杂验证**
- **OCR破解验证码**
- 使用CNN(如CRNN)或预训练模型(PaddleOCR)识别验证码,绕过测试环境的安全限制。
- **行为验证模拟**
- 通过目标检测识别滑块验证码的缺口位置,模拟拖动操作。
---
### **5. 工业与嵌入式测试**
- **硬件设备界面检测**
- 对工业仪表盘、车载屏幕等非标准UI,通过视觉读取数值或状态指示灯(如HSV色彩空间分析)。
- **印刷品/标签检测**
- 在自动化产线中,验证产品标签的印刷内容或条形码是否清晰可读。
---
### **6. 增强传统测试框架**
- **混合定位策略**
- 在Selenium/Appium中结合视觉算法作为备用定位方式(如当元素ID变化时,通过图像兜底)。
- 案例:**异常弹窗处理**
- 实时监控屏幕,用目标检测识别意外弹窗(如广告、权限请求),并自动处理。比如可以单独设计一个异常处理函数,对这些常见的“意外”进行预处理。一方面保证了自动化测试运行中的成功率,一方面也可以更加聚焦于本次测试运行的核心feature。
例如下面是常见的几种弹窗:
a、权限请求
b、未接来电弹窗
c、电量异常(电量不足)
d、广告弹窗
e、网络连接变化
f、系统警告
---
### **技术实现要点**
- **算法选型**:
- 轻量级场景:OpenCV模板匹配、OCR。
- 复杂场景:深度学习模型(YOLO、ResNet)需权衡精度与速度。
- **性能优化**:
- 使用ROI(Region of Interest)缩小处理区域,或缓存识别结果。
- **容错机制**:
- 设置相似度阈值(如90%匹配才通过),结合重试策略。
---
### **挑战与趋势**
- **动态内容干扰**:光照变化、动画效果需通过时序分析或动态阈值消除。
- **维护成本**:视觉脚本需随UI迭代更新基线图像。
- **AI趋势**:结合Few-shot Learning减少样本需求,或利用生成对抗网络(GAN)合成测试数据。(案例:Magnitude框架利用视觉模型Moondream实时解析UI元素,即使按钮位置变化也能精准操作)
总的来说,通过合理应用视觉算法,自动化测试框架能够覆盖更多传统方法无法处理的场景,尤其适合敏捷开发中快速变化的UI和跨平台需求。视觉算法在自动化测试中弥补了传统方法的不足,通过图像识别、OCR、目标检测等技术解决动态元素定位、非结构化UI测试、跨平台适配等难题。它能验证UI渲染效果(如布局错乱)、绕过验证码、检测异常弹窗,并覆盖游戏、AR等复杂场景。视觉算法提升了测试的鲁棒性和用户体验验证能力,尤其适合频繁迭代或无底层访问权限的系统,将测试维度从代码层扩展到真实用户视角。
另外根据作者的了解,目前业界已经开始探索视觉系统+自动化+AI的智能化测试技术,也有一些实战案例,不过目前实施落地的成本还是较高,但方向肯定是光明的,让我们拭目以待吧!
这里是三国测,专注软件测试实践与技术成长。
持续分享接口测试、自动化测试、探索性测试与测试工程经验。
如果这篇文章对你有帮助,欢迎关注公众号【三国测】,一起交流与成长。
参考文献:
《连线到远程试用各家手机,进一步改善装置碎片化的 Android Device Streaming「串流」实机验证服务现已扩张支持小米与 Oppo 装置》https://www.anzhuoshouzhuan.com/n/16090.html
《google cloud测试实验室中的设备不兼容》https://cloud.tencent.cn/developer/ask/sof/103475387?from=16139
《探索 Mobly:Google 的智能设备自动化测试框架》https://blog.csdn.net/gitblog_00043/article/details/137769016
《兼容性测试》https://www.jianshu.com/p/6827d6299b62
明青智能《小样本工业视觉平台白皮书》(2024版)
腾讯游戏开发者大会(TGDC 2024)演讲实录:议题:《AI视觉在游戏自动化测试中的落地实践》
《基于改进YOLOv8s的军用飞机目标检测算法》https://www.hanspub.org/journal/paperinformation?paperid=92920
《Sheng, Wenshun最新论文:基于YOLOv8和改进DeepSORT的多目标行人跟踪方法》https://www.lunlunapp.com/newsDetails/9741a2e5fb2aa71dd7531289a4626340
《改进的YOLOv8目标检测算法与yolov8添加注意力机制andyolov8小目标检测改进》https://blog.csdn.net/qq1309399183/article/details/145114692
《Android 设备串流功能,由 Firebase 提供支持》https://developer.android.google.cn/studio/run/android-device-streaming?hl=zh-cn
文中部份代码由AI辅助生成。
本文来自博客园,作者:三国测,转载请注明原文链接:https://www.cnblogs.com/zishi/articles/19790402