RoScript论文笔记
论文:RoScript: A Visual Script Driven Truly Non-Intrusive Robotic Testing System for Touch Screen Applications
0 ABSTRACT
0.1 intrusive vs. non-intrusive
侵入式设计与非侵入式设计
侵入式设计非侵入式设计设计理念设计者将框架功能“推”给客户端设计者将客户端的功能“拿”到框架中用设计表现有时候表现为客户端需要继承框架中的类表现为客户端实现框架提供的接口依赖性1. 让用户代码产生对框架的依赖,这些代码不能在框架外使用,不利于代码的复用
2. 可以使用户跟框架更好的结合,更容易更充分的利用框架提供的功能1. 没有过多的依赖,可以很方便的迁移到其他地方
2. 与用户代码互动的方式可能就比较复杂
1 INTRODUCTION
1.1 使用自动化测试的原因
- 触屏设备种类繁杂,人工测试成本高
1.2 现有自动化测试技术
1.2.1 分类
- 基于文本化脚本:UIAutomator、Robotium、Appium - 使用标签、索引、坐标等
- 基于可视化脚本:Sikuli、JAutomate、EggPlant - 使用控件图片和计算机视觉技术
1.2.2 界定
- 均为侵入式技术
1.2.3 局限
- 在一些封闭系统或不常见系统上很难使用 - 例如GoPro相机、Nintendo Switch
- 即使能得到系统支持,这样的测试也会一定程度上改变测试环境 - 例如影响性能、功耗等等- 系统内部测试的某些触发方式与测试者人工测试的直觉与经验可能相悖
1.3 机器人自动化测试
1.3.1 界定
- 非侵入式技术
1.3.2 优势
- 不需要系统支持
1.3.3 现存不足
- 使用人工确定的精准坐标,成本高,鲁棒性低
- 预测试需要获取移动设备内部坐标信息,不符合非侵入式的要求
- 使用可视化脚本可以满足非侵入式要求,但目前不存在这类框架或系统
1.3.4 三个问题
- 可视化脚本如何表达基于机器人的测试行为? - 现存可视化脚本不支持机器人控制- 需要适配机器人控制的插件
- 如何让机器人执行可视化脚本? - 现存可视化GUI测试引擎不支持机器人测试- 现存机器人测试引擎不支持可视化脚本- 需要新的测试引擎将机器人测试与可视化脚本联系起来
- 如何以减少测试脚本创建成本为目标自动录制触屏设备上的GUI行为? - 现存测试脚本录制技术均为侵入式设计- 需要新的非侵入式设计的测试脚本录制技术
1.4 RoScript
1.4.1 特点
- 非侵入式设计
- 使用扩展的可视化测试脚本
- 使用相机拍摄图片
- 使用特殊的文本输入和机器人控制指令
- 使用二轴绘画仪完成GUI行为
- 集成了基于计算机视觉的测试引擎,将可视化脚本的表述转化为低级机器指令
- 引入屏幕截图裁剪、“屏幕截图-现实世界”移动转换、基于键盘模型的按键操作、机器人绕行等技术
1.4.2 录制
- 提出基于计算机视觉的自动录制技术
- 可视化识别人手在屏幕上的操作行为
- 非侵入式设计
1.5 贡献
- 提出了一个完全非侵入式设计的机器人自动化测试系统
- 提出了一个基于视频的脚本录制技术
- 对提出的机器人自动化测试系统做了深度评估
2 MOTIVATING EXAMPLE
- 以GoPro的视频删除为例,现存的自动化测试方法,诸如Appium、Sikuli等无法应用于GoPro的系统;现存的机器人自动化测试方法,无法获取GoPro内部控件坐标
- RoScript可以完成这一测试目标,且无须在GoPro种下载额外的软件,也无须将RoScript与GoPro连接
3 RELATED WORK
3.1 Expressing GUI Actions
- 文本化脚本依赖GUI框架信息,不适合非侵入式设计
- 可视化脚本依赖计算机视觉技术,适合非侵入式设计
- RoScript - 采用可视化脚本- 使用照相机拍摄图片 - 引入特殊的图像处理技术,例如屏幕截图裁剪、尺寸归一化等- 为文本输入和机器人控制引入新指令 - 引入新的脚本执行引擎
3.2 Simulating GUI Actions
- 传统自动化测试框架依赖内部系统、GUI框架或者类似VNC的远程桌面设备,是侵入式设计
- 以往的机器人自动化测试主要是测试硬件功能以及性能,无法支持自动模拟GUI行为
- 出现过两种可以模拟GUI行为的机器人自动化测试,但存在问题 - 需要在设备下载特殊的软件来收集数据- 需要用侵入式测试获取低等的事件序列
- RoScript - 利用可视化测试脚本做到真正的非侵入式测试- 引入智能机器人可视化GUI测试引擎- 使用二轴绘画仪代替以往使用的特殊设计机器人或工业机器人- 首次提出关于机器人自动化测试技术的实验评估
3.3 Recording Test Scripts
- 传统脚本录制技术需要通过操作系统或GUI框架来获取事件类型、坐标、图像等信息
- 以往的基于视频的脚本录制方法需要下载特殊设计的屏幕获取工具
- RoScript - 使用相机拍摄照片的方法录制人的行为- 使用计算机视觉技术通过分析人类行为视频来生成测试脚本
4 OVERVIEW OF THE ROBOTIC TESTING SYSTEM
4.1 RoScript物理结构
- 触屏设备放置在工作板上
- 二轴绘画仪带有手写笔,手写笔负责触控操作
- 相机置于触屏设备正上方用于获取屏幕状态信息
- 相机和二轴绘画仪连接到运行在PC上的RoScript测试工具上
4.2 RoScript物理参数
- 二轴绘画仪的机械臂由步进马达驱动,移动准确率为0.2mm
- 二轴绘画仪工作区域大小为A4纸张大小
- 相机由相机支架支撑,位置固定
- 整套测试设备花费约为200美元
4.3 RoScript测试步骤
- 为测试应用创建测试脚本 - 人工创建脚本- 脚本录制技术自动生成测试代码 - 测试人员手动使用测试设备,且所有行为被录制到相机中- 根据测试行为自动生成测试代码- 根据不同行为的屏幕状态信息对测试代码进行修改
- 将机器人和测试设备放到合适位置 - 测试设备需与二轴绘画仪的X轴平行- 相机位置需能拍摄整个测试设备- 手写笔初始位置需设置为测试设备的左上角- 人工设置测试设备的宽度、高度、厚度三个参数
- 用机器人测试引擎进行自动化测试,测试脚本中的断言用于证实测试结果
5 THE VISUAL TEST SCRIPT LANGUAGE
- 基于Python
- 继承可视化脚本中常用命令 - click- drag- swipe
- 结果证实命令,借用自Sikuli - assert_exist- assert_not_exist
- 新创建的命令 - take_screen_photo- reset_arms- move- move_outside_of_screen
- 引入press_keyboard来完成文本输入
6 THE ROBOTIC TEST ENGINE
6.1 Locating Widgets on the Screen
- 高分辨率可以提高控件定位精确度,低分辨率可以提高控件定位速度
- RoScript采用1600x1200分辨率
- 总体分两步 - 从相机拍摄图片中截取屏幕截图- 将测试脚本中的图片与屏幕截图匹配
6.1.1 Cropping Screenshots
- 相机拍摄照片中包含电源电缆线、工作板上的纸张等干扰物体
- 提出一种计算机视觉算法来寻找拍摄照片中的屏幕截图区域 - 使用Canny边缘检测来检测照片中的边缘信息- 在边缘检测结果上使用形态学闭运算来连接断裂的边缘- 检测所有上一步得到的边缘中的轮廓线,筛选出矩形区域- 筛选掉过大尺寸的矩形区域 s i z e ( c a m e r a _ p h o t o ) × U d e v size(camera_photo) \times U_{dev} size(camera_photo)×Udev,其中 U d e v = 0.95 U_{dev} = 0.95 Udev=0.95- 选取筛选后的矩形区域中面积最大的区域为屏幕截图所在区域
6.1.2 Widget Localization
- RoScript采用OpenCV中提供的归一化相关系数匹配算法来进行模版匹配
- RoScript消除了屏幕截图和测试脚本中提供图片的尺寸上的差异
6.2 Determining the Move of Robot Arms
- RoScript消除了屏幕截图和机械臂实际移动区域之间的尺寸上的差异
6.3 Performing GUI Actions
- 以点击操作和滑动操作为例 - 点击操作 - 将手写笔移动到点击区域- 以计算好的深度向下移动手写笔- 将手写笔抬起- 滑动操作(向上滑) - 将手写笔移动到滑动区域的下边缘中心处- 将手写笔下移接触到屏幕- 保持与屏幕的接触,向屏幕顶部方向移动一段距离- 将手写笔抬起
6.4 Pressing Keyboards
- 引入键盘模型
- 模型等级划分 - 键盘 - 图片- 内部- 区域- 行 - 空白部分间隔- 键 - 宽度
- 以输入字母e为例 - 在屏幕截图中匹配26键键盘区域- 根据键盘模型计算e键的坐标- 点击e键
6.5 Connecting Actions
- 使用机械臂绕行策略来规避一些需要匹配屏幕截图控件的操作过程中机械臂可能会影响相机拍照的情况
- 机械臂会以下一操作目标区域为基准,从距离最短的一个方向移出区域
7 RECORDING TEST SCRIPTS FROM VIDEOS
7.1 录制操作类型
- 点击操作可自动录制并自动生成测试代码
- 拖拽、滑动等操作需人工辅助生成测试代码
7.2 点击操作规范
- 操作设备放置在工作板上,相机在操作设备正上方进行录制
- 只用一个指尖操作,其他手指呈紧握状态
- 操作指尖与操作屏幕之间的夹角要小于 4 5 ∘ 45^{\circ} 45∘
- 每次操作结束后要将手从相机录制范围彻底移出
7.3 具体录制算法
- 提取图片帧,检测手指 - 使用基于颜色的皮肤检测来检测帧中手部区域- 检测结果转化为二值图像- 检测手部区域的轮廓,取最大且最接近二值图像边缘的轮廓为手部区域- 手部区域轮廓的顶部被视为指尖位置- 二值图像左下角为坐标原点,指尖位置的y轴坐标为手部区域内所有点的y轴坐标的最大值- 当指尖坐标为 ( 0 , 0 ) (0,0) (0,0)时,视为没有手出现在屏幕区域内
- 按操作行为对图片帧分组 - 根据指尖位置的垂直坐标进行分组- 一个点击操作认为是指尖位置从0升到最高值再降到0
- 寻找预操作帧 - 将指尖垂直坐标为0,且在其后的帧中垂直坐标大于0的帧确定为预操作帧,点击行为发生在预操作帧之后
- 定位点击位置 - 将每组中指尖垂直位置最大的点对应的帧确定为定位点击位置的帧,指尖所在坐标经过转换可以得到点击位置
- 截取被点击控件的图像 - 在预操作帧对帧进行中值滤波处理- 对处理后的图像使用轮廓检测- 对面积太小的矩形区域进行一定程度的放大- 筛选出覆盖点击区域且面积小于上限的矩形区域- 筛选后的矩形区域中面积最大的区域被视为被点击的控件
7.4 处理其他操作
- 半自动化脚本
- 先对图片帧进行分组,再由用户自己声明操作类型,之后利用截取方法自动截取操作控件
8 EVALUATION
- 自动化测试系统的四个关键属性 - 自动化测试的灵活性- 自动化测试的精确性- 自动化测试的效率- 脚本录制的精确性
- 五个问题 - RoScript自动化测试的灵活性如何?- RoScript执行触屏操作的精确性如何?- RoScript执行触屏操作的效率如何?- RoScript根据人工操作录制点击操作的精确性如何?- RoScript与其他侵入式自动化测试技术相比如何?
8.1 Experimental Setup
- 对于问题1:准备6种触屏设备和21个应用
- 对于问题2:计算执行整个测试脚本以及单个GUI操作的成功率
- 对于问题3:计算拍摄照片、执行计算机视觉算法、机械臂移动、触发GUI操作事件、执行整个测试脚本的时间总和
- 对于问题4:人工执行点击操作,RoScipt录制并自动生成测试代码
- 对于问题5:以目前最先进的可视化自动测试工具Sikuli为baseline
- 实验环境配置 - Python 3.6- OpenCV 3.4- EBB命令- OS:Windows 10- CPU:Intel i7-6700HQ- MEMORY:16GB
8.2 Results and Discussion
- 略
8.3 Threats to Validity
- 设备、应用以及测试场景具有局限性
- 测试环境不可微调
- 录制的人工测试的视频质量可能存在问题
9 CONCLUSION AND FUTURE WORK
- RoScript测试速度比传统的侵入式自动化测试工具慢
- 不稳定的触摸行为和低质量的照片影响效果
- 暂时不支持任意的测试行为的录制
- RoScript暂时只支持尺寸小于A4纸张大小的设备
版权归原作者 Nando Du 所有, 如有侵权,请联系我们删除。