自动化测试未来趋势(二)AI 机器学习技术

1. 机器学习

在上一部分,我们介绍了通过自愈技术解决自动化测试过程中对象识别问题。
但是在自动化测试过程中,我们仍然还会面临其他问题:

  • 仍然需要人工获取定位方式;
  • 如果是通过Canvas绘制出来的对象,如何识别元素 (如Flutter Web)。
    等等。

虽然自愈技术在传统的自动化测试中增加了一些容错能力。但是本质上还是基于元素定位的对象识别技术,用到的还是传统的DOM定位技术,如XPath或者是CSS定位器。

而我们知道,移动端和Web端的运行环境复杂,外部干扰因素很容易破坏自动化脚本运行的稳定性,这是元素定位器脆性本质导致的。

所以业界也一直在持续探索更稳定的对象识别技术。在早期我们使用到了CV(Computer Vision)计算机视觉 +OCR(Optical Character Recognition)光学字符设别技术。

而CV和OCR是基于图像处理和统计机器学习方法,比如业内比较流行的自动化测试框架airtest,就是基于CV技术来进行智能控件识别的。通过OCR及图像识别能力,实现相同流程下,一套自动化脚本可以在多平台上执行的能力,大大降低了脚本编写及后期维护成本。

目前业界也在实践与探索基于机器学习技术的CV和OCR来解决自动化测试学习成本高、维护成本高、Hybird识别差、跨应用能力差,以及不支持跨平台等方面的问题。

2. 智能识别

在UI页面中,我们的信息主要由图像和文字构成。如何高效地识别基于图像和文字的控件对象,是当前自动化测试不得不面临的问题。为了解决之前基于DOM技术的元素定位不稳定,以及后期的维护成本。目前在UI控件识别上有两种方式:一个是基于CV技术的图像识别,一个是基于OCR技术的文字识别。

2.1 基于CV的图像识别

传统的CV

在传统方式下,我们主要是基于图像特征识别技术:
提到图像识别算法一定绕不开OpenCV,常用的是SIFT算法,核心就是提取出图片当中的一些关键特征,这些特征在不同的机型,在不同的分辨率下面有很好的适应性。基于传统特征识别技术的处理过程如下图所示:


基于深度学习的CV

这种方法比现行的定位策略( image )更灵活,因为我们可以用CNN,或者其他深度学习框架来训练 AI 模型去识别控件图标,并不需要知道上下文,也不需要精确匹配控件图标。也就是说我们可以能跨应用和平台去找一个如 “购物车” 的图标这样的控件,不需要在意一些细微的差别。基于深度学习的处理流程如下图所示:


尽管基于深度学习的CV具有更强的能力,但是传统的方式依然有不可替代的优势,值得我们继续学习。如从目前来看深度学习仍然需要大量的数据,而传统的方式在这方面就会节省很大的成本。对于一些比较简单的识别任务,我们更推荐传统的CV方式。

2.2 基于OCR文字识别

OCR可识别屏幕上的预定义字符。使用OCR的软件将采用“最佳猜测”的方式来确定图像是否与字符匹配,以便将该图像转换为计算机可以处理的文本。传统的OCR基于图像处理(二值化、连通域分析、投影分析等)和统计机器学习(Adaboost、SVM)。

传统的OCR只能处理相对简单的场景,如:简单的页面布局、前景和背景信息便于区分及每个文本字符容易分割。随着我们的测试对象月来越复杂,页面布局,样式等多样化的场景下,传统OCR的精准度也收到了挑战。

随着深度学习的发展,我们可以通过新的算法技术来解决传统OCR的局限性。

3. 案例实践

在业内,大部分基于AI的自动化测试平台均采用了CV+OCR结合的智能识别技术,来降低自动化测试脚本编写成本以及后期的维护成本。

我们分别以基于OpenCV的airtest 平台为例:

基于OpenCV的UI自动化 - Airtest

Airtest主要用到了两种传统的OpenCV匹配算法:1. 模版匹配, 2 特征匹配
两种匹配算法的特点如下:
模板匹配

  • 无法跨分辨率识别
  • 一定有相对最佳的匹配结果
  • 方法名:"tpl", "mstpl"

特征点匹配

  • 跨分辨率识别
  • 不一定有匹配结果
  • 方法名列表:["kaze", "brisk", "akaze", "orb", "sift", "surf", "brief"]

在Airtest中可以自己配置选择使用的匹配算法。由于两种匹配算法各有利弊,因此一般默认是选择这几种匹配算法组合,算法依次进行图像识别,找到结果将停止识别,未找到结果将会一直按照这个算法的识别顺序一直循环识别直到超时。

如何判断图像识别成功或者失败呢?Airtest里面有两个重要的名词:阀值和可信度,阀值是可以配置的,一般默认为0.7,可信度是算法执行结束后计算出来的可能性概率,当 可信度>阙值 的时候,程序会认为 找到了最佳的匹配结果 ;而当 可信度<阙值 的时候,程序则会认为 没有找到最佳的匹配结果 。

如下这个例子:在Airtest中操作网易云音乐APP :



Touch(“图片”) 的原理如下:


Airtest本身并没有直接提供OCR方式识别,不过我们可以通过集成开源的Tesseract-OCR库来支持OCR识别能力。

面临的挑战:

基于传统的OpenCV的图像识别,主要的问题是图像的特征识别不够准确,特别是在图像本身的特征比较少,如有一大片白色背景等,或者是动态元素等。同时传统的识别成功率平均也就80%左右,还达不到人工的95%的准确率,因此在传统方式下,我们只能通过添加更多特征信息来优化识别率,但是想要匹配人工的准确率,传统的统计机器学习方式很难达到。

解决这个问题就需要更强的泛化能力,目前更多的是基于CNN等深度学习技术来解决此类问题。我们这里就不过多展开,大家可以参考Appium with AI项目。

详情:https://appiumpro.com/editions/39-early-stage-ai-for-appium-test-automation

4. 未来展望

随着DL,RL和NLP等技术的不断发展,未来是不是完全可以将我们的用户故事自动转化为自动化测试用例,做到了真正的零代码呢,目前业内也有这样的探索了,我们也在持续跟进。

CV和AI算法的加持让UI自动化测试在对象识别上有了新的突破,但依然无法摆脱软件层API操作的局限,受所在操作系统限制,依旧存在部分特定场景下元素无法识别的问题(如系统内Push消息操作);

我们可以看到业内领先的公司在尝试自动机械臂方式,来解决这个问题。
如下图阿里的Robot-XT:


图片出处:https://mp.weixin.qq.com/s/5ZngQyJiRZy6714-CC498g

那么这些技术是否是大厂的“专利”呢? 我想答案是否定的,未来AI技术一定也会像水电煤一样,变成最基础的底层设施,我们只需要会用即可。

5. 总结

在本文中,我们介绍了两种应用比较广泛的自动化测试新技术,目的是帮助大家了解自动化测试未来的发展趋势,从而更好地利用新技术来提高我们的测试效率。

自动化测试未来趋势不仅仅是这两种,还有如智能化探索性测试,智能遍历测试以及智能验证等。关于智能遍历所用到的技术,大家可以参考DQN的介绍。

你可能感兴趣的:(自动化测试未来趋势(二)AI 机器学习技术)