移动测试基础 脚本录制

360qa · 2018年05月18日 · 最后由 weamylady 回复于 2018年05月21日 · 502 次阅读

一、需求背景

        现今针对移动端的UI的测试的平台,用户进行用例测试的需要先进行测试用例脚本的编写(多种语言的,如lua、java)。这些脚本用来进行UI操作的,编写完成后放到测试平台上运行。
这种方法的缺点是用例需要测试人员自行编写,难度大,成本高。

二、实现效果

         通过屏幕录制,将使用者对手机的操作记录下来,然后自动生成可放在平台上面运行的用例脚本。这种方法可以解决上述的缺点。

         当前我们实现了自动脚本录制并生成Python用例脚本。

三、使用介绍

         1.平台支持:http://opentest.360.cn/phonerenter.html

         2.使用前提:打开云真机平台的某台设备进行使用,选择脚本录制

         3.使用步骤:

                (1)上传APK(选择需要进行测试的apk并进行上传)
                (2)查看控件信息(鼠标移到屏幕的手机的控件上,可查看该控件信息)
                (3)录制脚本(记录鼠标在屏幕上的动作;添加操作不可达表示的动作)
                (4)脚本回放(回放脚本,查看脚本可否正常执行;可修改参数)
                (5)保存脚本(脚本能正常执行后可以进行保存至用户的脚本列表中)

四、技术实现

1、上传APK

         前端上传,节点机器下载

         上传:adb push …
         准备:adb pm clear packagename(清除历史数据)
                    adb pm uninstall packagename(卸载之前的APK)
         安装:adb pm install –r apkpath
         运行:adb am start –n packagename/activityname

2、查看控件信息

使用可视化的工具: UI Automator Viewer——功能介绍

查看控件信息——功能显示

查看控件信息——技术实现

         第一版实现:

        

         adb shell uiautomator dump
        

         第二版实现:

         由于第一版方式dump界面时间比较久(脚本录制功能要求高的实时性),故修改为第二种实现。

         使用AccessibilityService(获取当前窗口的根节点,然后获取到整个页面的信息并处理为xml)

AccessibilityService:Google为了让Android系统更实用,为用户提供了无障碍辅助服务。出发点是用来辅助有障碍人士使用手机的,可以模拟一些点击操作等。
拓展:AccessibilityService运行在后台,并且能够收到由系统发出的一些事件(AccessibilityEvent, 这些事件表示用户界面一系列的状态变化), 比如焦点改变, 输入内容变化, 按钮被点击了等等, 该种服务能够请求获取当前活动窗口并查找其中的内容。换言之, 界面中产生的任何变化都会产生一个时间, 并由系统通知给AccessibilityService.这就像监视器监视着界面的一举一动, 一旦界面发生变化, 立刻发出警报.
每个节点的信息包括:md5, index, resource-id,class ,text 等。

         后台服务实现:

         自定义一个服务类AccessibilitySampleService(这个命名可以随意),继承系统的AccessibilityService并覆写onAccessibilityEvent和onInterrupt方法。编写好服务类之后,在系统配置文件(AndroidManifest.xml)中注册服务。完成前面两个步骤就完成了基本发辅助功能服务注册与配置,具体的功能实现需要在onAccessibilityEvent中完成,根据onAccessibilityEvent回调方法传递过来的AccessibilityEvent对象可以对事件进行过滤,结合AccessibilitySampleService本身提供的查找节点与模拟点击相关的接口即可实现权限节点的查找与点击。

         那加入鼠标在网页上滑动或停留一段时间的时候,如何判断区分哪个控件是用户所选择的呢?
        

         通过将AccessibilityService得到的xml-str数据转为xml-dom树,通过鼠标的坐标信息得到对应于该手机的坐标信息,遍历dom树,得到包含这个表标点且面积最小的控件。

3、录制脚本

         记录用户在网页上的手机界面操作

         支持12个动作:
返回、主界面、菜单
根据md5点击、根据md5查找、根据文本点击、根据文本查找
滑动、拖拽、发送文本、点击backspace键、休眠(人为计算两个操作间的时间)

         遇到的问题:

        (1)区分点击,滑屏,拖拽:鼠标在界面上的操作:down, move, up , leave(边界处理)

         解决:
        

         上图表示三个操作的划分:
         A.根据一定的距离来判断是点击还是(滑屏、拖拽),设置合理阈值(鼠标可能发生小抖动)。
当在一定距离以内,则认为是点击;当超过该段距离,则认为是滑屏或拖拽。
         B.上述已区分是点击还是滑屏、拖拽。滑屏与拖拽的区分点是根据鼠标按下的时间来进行区分。Ps:手机上当你在某个区域点击不放时会唤出某些功能,例如APK的卸载功能。
当点击的时间大于设置的阈值时,认为是拖拽行为;小于则任务是滑动行为。
         注:当点击的时候分两种方式点击:如果该控件含有text,则可认为是通过text进行点击;若没有text,程序内部会根据xml树形结构该控件的位置进行计算得出唯一的md5(类似网页上的xpath)

        (2)注意手机当前的旋转以及真实屏幕和前端控件的比例(纵横可能是不同的,注意换算)

         解决:后台监控手机是否旋转,若旋转则在坐标处理时先做旋转处理,再做像素转换。

4、脚本回放

根据保存的动作信息去调相应接口执行相应动作

5、保存脚本

保存已经重放成功的脚本,可自动生成python脚本,在开测的脚本管理页面看到刚刚保存的脚本,并可以在平台上执行。

五、总结

1、dump的操作考虑到功能的要求,必须在实时性上进行一定的优化。
2、判断页面上的用户操作要达到一个精准度高的录制,需不断调整阈值至合理水平,满足大多数使用习惯。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 11 条回复 时间 点赞

厉害了

试用中。。。

nateby 回复

欢迎意见反馈,使用页有用户手册

360qa 回复

应用安装没法100%保证稳定通过。。。。。可能是安装弹窗的问题?


录制的功能还行,就是不太好用。
1,安装的时候各种弹窗问题未处理。
2,每次都要求重新安装,这个有点蛋疼,结合第一个问题,就无法回放了。
3,脚本无法保存,按钮一直是灰的。

4,换了一台华为mate10之后,可以安装和录制,重放也可以了,但是重放完之后没有自动停止,只能手动停止重放,然后保存脚本的按钮也是一只灰的。

赞一个。

nateby 回复

弹框这里我们配置过了,如有弹框可能是新弹框,未在配置文件中,你可选择其他手机进行操作(有的品牌手机弹框较多)。你方便的话可提供弹框内容我们这边进行配置即可

360qa 回复

重放无法停止怎么破?跑完所有步骤都没自动停止,无法保存

weamylady 回复

第一个问题:配置弹框是人工配置,可能有个别弹框还未配置;第二个问题:脚本录制的技术背景就是测试某个apk,所以第一步全是安装apk,如有异议,我们会考虑使用情况。第三个问题、第四个问题:产品的逻辑确实有缺陷。保存脚本是在重放脚本成功后(弹框显示重放成功)会变亮

360qa #10 · 2018年05月21日 作者
weamylady 回复

保存脚本的操作只能在重放成功后才可保存,无法自动停止回放的说明重放不成功。故无法保存,重放无法停止这个问题我们这边查看一下,有回复告诉您

360qa 回复

重放的步骤我看都跑完了,没有停止

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册