当自动化测试沉溺于ADB+Uiautomator给Android手机带来的便捷时,更高阶的问题接踵而至。如何用一套测试环境和框架合理的cover住Android和IOS这两大阵营的测试已成为一个热门话题。当然,用跨界的主流测试框架Appium可能是大家的首选,但是,小编还想在这里介绍另外一种智能化思路:图像识别。
图像识别基础
近年来,图像识别和机器视觉作为人工智能的两大主流派系一直成果不断。阿里云的扫脸支付、腾讯的小白盒等均是图像识别领域的翘楚。回过头来,在自动化测试者眼中,应该是如何思量图像识别的?可能1000个人有1000种不同的定义。在此,小编暂且把图像识别当做是机器能看懂世界的眼睛来理解,而于自动化测试中应用落地则是像人一样去看懂图形界面。因此,就不得不先啰嗦一下图像的定义。
图像是客观对象的一种相似性的、生动性的描述或写真,是人类社会活动中最常用的信息载体。或者说图像是客观对象的一种表示,它包含了被描述对象的有关信息。它是人们最主要的信息源。--摘自《百度文库》
先来仔细理解一下这句话的含义:信息载体。小编认为一副图像是由N*M个像素点组成的,每个像素点又分R、G、B3种不同的色值,每个色值又有个固定的int型数据(0~256),3个通道的色值排列组合出来万般色彩,此为信息。
换句话说,通过对像素点色值的数据处理和分类,可以实现识别的概念。这就是小编眼中的图像识别。
图像识别在自动化测试中扮演的角色
不可不信,也不可全信。
图像识别作为辅助校验手段可以按比例实现于自动化测试中,但想全权依赖于图象识别技术(譬如:前文提到的自动化测试)目前看来会困难重重。就拿小编2014年在索尼移动研究一年图像识别的经验来看,实际落地过程中图像识别往往受制于外围复杂的环境的影响,很多算法容易过拟合。首先对环境因素的归一化处理就是个很大的难题,拍拍脸还可以,在处理高速连续变换的图像中难度骤然提升;话虽如此但此路并非不通,而是说的性价比的概念,对项目有快速迭代上线要求的公司来说就没有太大的空间。因此,小编认为要想将自动化做大做复杂,图像识别只可以作为【断言】的一个辅助手段接入,不可不信但也不可全信。毕竟测试的精准性是排在第一位的。
自动化图像识别手段
1). 二值化(像素领域的二分法)
2). 边缘检测(Sobel算子或者Canny算子)
3). 图像校验算法(自己实现),发现两张图的不同
4). 其他图像算法在此不一一列举,感兴趣的朋友可以线下一起探讨。
结果:
自动化测试中如何使用图像识别
1). 结合上文中提到的Uiautomator,对元素或者校验点进行抓取,保存成Image=$Source;
2). 在回放中需要断言的地方截图保存成Image=$Target;
3). 利用图像识别算法进行处理,并返回结果。
网友评论