ReLuQ
交叉学科就像交叉特征一样有趣
已关注
2 人赞同了该文章
写在开头:
本篇是笔者在公司的一个项目,主要与公司测试部一位经验丰富的老哥(曾在华为腾讯任职十年)合作完成,目前已经嵌入公司的专项测试流程,与OCR结合完成APP页面启动时长测试这一任务。
在上一篇中我们简单介绍了什么是卷积神经网络,那么本章就试试看做点东西出来~
这里只选取本项目的机器学习部分,更多细节和测试结果图片可以移步微信公众号:小赢技术团队 欢迎关注
在软件测试中,自动化测试成为节省人力、验证成熟模块与功能的手段,但随着互联网产品的迭代越来越快、运营活动不断上线,测试人员会发现自动化测试维护成本往往需要投入比手工测试大得多,传统的图片识别方案OCR往往在自动化测试中以下的诟病:
1. 识别率忽高忽低:
通常OCR是通过对比两张图片的差异值来判断图片一致性从而来判断自动测试结果是否成功,但在测试中种千奇百怪的页面元素变动引起的差异值不稳定,导致测试脚本输出测试结果时会引起误报或取值不精确;
2. 外部因素干扰大:
通常OCR对比是通过全屏截屏后与目标图片对比,但全屏的图片像素包含手机通知栏诸多图标显示变化,会对图片差异值影响较大,导致对自动测试结果影响较大;
3. 运营活动是死敌:
运营活动常常会在应用界面进行弹窗,严重破坏测试界面的一致性,是自动测试的大敌,往往会导致大量测试的误报;
以上,都是传统自动化测试使用OCR判断测试结果的痛点,领悟了以后在机器学习满天飞的今天,尝试引入机器学习模型来改进优化图片识别这个关键节点的成功率与可维护性。
APP启动时长自动化测试接入机器学习模型,主要以APP的三个页面(首页、登录、我的账户)为试点,主要分为以下3个步骤来进行:
其中,step1中训练三个目标页面模型的具体步骤细分如下:
针对start,account,login三种场景,分别选定不通区域像素作为有空间特性的特征。
图片原始尺寸为1080 * 1920,使用原图片主要有两个问题:1.过多的像素点导致训练过程过大,效率慢 2.整张图片由于运营等原因,会不定时产生改变,使用严格对比可能导致超时效性误报
因此,针对不同场景特性,分别将其切分成更具有特征性的小块,并对小块进行分类。
针对某一场景,依次读入正负样本并同时生成标签(label)矩阵,由于输入数据为png图片,属性上为4通道,而需求数据为3通道(R,G,B),使用PIL库进行转化,取R,G,B三个维度数据,之后读取所有样本并转化为(batch_size,width,height,channel)尺寸的tensor
模型选取常用于图像识别分类的卷积神经网络,由于数据并不复杂,选择浅层网络即可。在模型选择上,卷积神经网络在图像识别方面具有着:1.训练效率较高,时间空间复杂度均较低;2.架构在各类图像数据集上的表现均具有较高的精准性;3.具有较成熟的开源开发环境,如TensorFlow,Caffe,Keras等对CNN的支持均十分良好。
由于本次项目数据集具有特征较为稀疏的特点,因此,选取较少层数的CNN作为主要模型而替代试验阶段选用的logistics regression,svm等机器学习模型,原因在于传统机器学习对于局部特征的敏感程度要远低于CNN而又容易受到局部小范围变化的影响。
卷积神经网络主要通过保持图片原有的空间结构,嗅探局部特征,低层次特征到高层次特征学习等方面来提高图像识别等任务的准确率。
我们参考了最经典的alexnet结构,因此加入了lrn层而不是使用dropout
以下会介绍建模代码部分的工作,我们使用tensorflow来完成建模,tensorflow熟悉的朋友都知道是google出品的一款深度学习框架,基于计算图和张量进行数据处理和计算,对于其内部架构及原理笔者也了解不多,只是处于会用阶段(捂脸)
下面就是如何将设计好的模型结构转化成可用的代码:
机器学习接入自动测试的过程也不是一番风顺的,过程中也不停的遇到困难解决困难,今后在实践的过程中也要不断遇到困难学习解决,才能在自动测试智能化的路上越走越远。
机器学习接入自动测试是一个新的尝试,现在在测试中仅仅利用了其在图片识别方面的功能,在将来的测试实践中,将会借力机器学习在大数据处理方面的优势在测试用例生成、测试环境部署与数据初始化等环节,更好的辅助自动化测试。
发布于 2019-03-10