随着计算机技术的发展和软件技术的提高,软件已广泛应用于各行业。软件产品应用范围扩大导致软件质量管理变得愈加困难。软件测试是提高软件质量的重要手段之一。现阶段可采用的软件测试方法包括人工测试和自动化测试,自动化测试相比人工测试可大幅提高测试效率。
自动化测试是把以人为驱动的测试行为转化为机器执行的过程,需要工程师人工编写用例和脚本,配合测试工具及框架搭建来实现,框架和工具本身只能做到测试的执行。
自动化测试究竟可以实现多大程度的自动化?
首先,将测试抽象成四大步骤,分别为构思测试意图、执行测试用例、校验预设验证、发现未知问题。
根据以上四步,参照 SAE《自动驾驶分级标准》,将自动化测试分为六个级别。
大部分自动化框架都在 L0 到 L2 的级别,L3 的明显差异在于测试意图的构思是由自动化系统而非工程师完成,并且有一定的未知问题发现能力;当发现未知问题从工程师操作到完全由系统取代则基本可以称为高度自动化测试,即 L4;当自动化测试系统在任何情况下都可以替代人类工程师完成测试,即只需给测试系统提供一个应用即可自动完成测试时,即达到 L5,这便是对自动化测试的重新分级。
行为信息收集
在线下测试或公司内测阶段,可以通过嵌入 SDK,以 HOOK 的方式获得六种在手机日常使用过程中常见的事件,包括 Button 的点击、物理按键等,聚合成行为信息。通过页面聚类进行操作聚类,发送给服务端并进一步挖掘用户意图。
行为意图挖掘
在挖掘用户行为意图前,首先需根据设备、操作序列及事件进行分组和排序,还原用户行为链,然后通过对原始用户行为链进行白名单过滤(过滤掉无用的行为信息)、误点过滤(过滤掉短时间内的重复操作)、回环过滤(过滤掉短时间内的重复进入同一页面),来挖掘用户的真实意图。
路径选择策略
通过信息收集和意图挖掘收集形成行为链后,就可以通过这些行为链来训练出一个路径选择模型。它的作用是当测试者达到应用某界面时生成跳转矩阵,后可根据跳转矩阵进行对应操作,由于意图挖掘过程进行了去噪操作,所以在训练路径选择模型时会损失多样性,我们在页面跳转后加入了 N 阶随机游走来重新添加多样性。
用例生成、执行与校验
明确的信息收集便于自动化脚本转化,在转化为自动化脚本后,系统会使用两种方式,即基于坐标的同步或基于图像识别匹配的同步,来在不同的终端上同步执行测试,甚至可以跨系统同步执行。执行完成后,系统会使用预先通过一个基于 Q-Learning 的遍历工具产出的 “页面 - 控件” 校验集来对页面进行基本校验,并根据控件切图来进行图像识别对比的视觉校验。
发现未知问题
发现未知问题的思路大致是通过历史 BUG 来训练出界面异常问题的识别模型(包括留白、错字、字符控件遮挡、图片显示异常等等),并通过该模型判断页面的正常或是异常未知问题,同时不断迭代优化模型。
到此为止,我们就可以通过上述的这种方式来实现由系统自动构思测试意图,自动编写测试脚本并执行、自动校验预设问题,并具备了一定未知问题的发现能力,达到了 L3 级别的自动化测试能力。
那么,如何更进一步,实现 L4 的自动化测试能力呢?
到目前为止,还没有任何组织宣称实现 L4 级别的自动化测试能力,我们也不例外,所以这里只是给大家描述一下实现 L4 级别自动化测试的思路和思考。
L4 级别自动测试的关键词是理解,它通过页面元素特征去认知页面里有什么,对应用的结构和作用建立认知;可以根据自己的历史经验判断应用的表现是否正确;能够遍历应用并知道应用里所有的页面和功能如何表达;并且具备多种方式的操作能力,适应现代化应用的交互方式。
以此,它像一个人类 3-5 岁孩子一样,能够自行探索和理解一个应用,并能够适应应用的变化而自我进化。