转载自 : 腾讯移动品质中心TMQ (已获得授权)
一、前言
Mac已然是一个不可或缺的平台,但是相对其它平台来说,针对Mac app的各项专项测试却没有多少资料可供参考,本篇文章介绍了腾讯视频Mac端的各项专项测试总结,整理了过去一年腾讯视频Mac测试团队的探索和研究。
二、Mac App测试框架
我们对比了多款自动化框架,最终选择了atomac作为视频Mac端的自动化框架。
表1不同框架对比
从表中可以看出,atomac是基于控件识别的方式,不依赖于ui的展示,不需要额外的支持工作,更适合于Mac app的自动化测试工作。atomac是一款开源的Mac app自动化框架,基于Mac acessiblity Api实现,拥有较高的控件识别准确度和速度,同时简单易扩展。其官方地址为https://github.com/pyatom/pyatom。
三、功能测试自动化
将测试日常的checklist利用atomac全部自动化,我们将会例行的执行全部的自动化case并生成相应的日报。
图1功能测试自动化流程
图2测试日报
四、性能测试自动化
Mac app常用的性能指标cpu/mem等都是可以通过系统命令ps获取到的,syruby是一个开源的python库,可以友好地实时显示性能参数。但是为了支持更多的性能指标和多进程数据收集,我们自己封装了一个性能数据收集的函数。目前Mac视频这边使用的性能指标包标cpu、内存、线程数、cpu温度(笔记本)。
图3性能测试自动化流程
实现的基本思路时,在性能自动化用例执行的过程中,会同时开启一个线程PerfThread用于收集性能参数,并保存至文件中。
图4性能数据结果文件
性能用例全部执行完毕后,这些性能数据文件会上传至云测平台,用于数据的可视化及历史版本对比。
图5云测结果展示
五、稳定性测试
这一部分内容分为两个模块,用例的设计和crash的捕捉。
首先介绍下Mac视频频道页的设计思路,Mac视频的频道页是由h5来实现(最新版本部分频道已改为Native),图6显示了腾讯视频Mac端主界面的控件树结构,可以看出频道页中的控件在一个组内,如果按照传统的界面控件dump策略,频道页中的内容覆盖会较低,我们设计了一个较简单的控件点击策略,将频道页控件组下面的页面控件id全部获取,与主界面的其它按钮控件组成控件池,在执行时将从这些叶子节点中随机选择,然后随机取该控件的操作方法(如点击,滑动等)执行,图8中示例了一些控件支持的操作方法即Actions属性。
图6控件树显示
图7视频主界面控件树示意图
图8对象操作方法
在app发生crash时,我们有两种方法可以捕捉。其一是实时监测app进程的活动状态,但应用进程不存在时,则识别为发生crash,另一种是利用Mac系统的特性,在Mac平台上app发生crash时会在目录/Library/Logs/DiagnosticReports下生成crash文件,所以只要监控该目录即可,如果该目录下有QQLive相关的.crash文件生成,则认为发生了crash。
拿到crash文件,我们将会对crash文件进行堆栈提取、合并,并进行自动tapd提单。
目前除了上述的控件遍历方法,针对播放场景也有加入crash捕捉,并取得了一定的成效。
图9本地播放的crash捕捉提单
六、视频启播时间测试
对于视频类app而言,启播时间是一个非常重要的用户体验指标。我们是通过控件识别的方式来进行启播时间的收集,我们认为拉起播放器作为启播时间的起始,播放按钮为enabled状态为启播时间的终止。两者之间的差值则本次播放的启播时间。
如图10和图11,启播完成后播放按钮enabled为True,所以在整个拉起播放器的过程中,我们只需时刻监控播放按钮的状态即可。
图10 启播加载中画面
图11 启播完成画面
图12 启播时间测试
七、视频播放下载测试
在播放视频的过程中,不论是播放器sdk,p2p组件还是前端部分,遇到对应的播放错误时都会抛出对应的错误码,基于此,我们开展了Mac视频的播放下载测试。主要是设计不同的播放用例,将生成的日志上传至后台进行相应的log错误tag解析,当识别到对应的错误tag时,会自动转tapd单,并转开发进行分析。
目前针对播放器SDK,P2P组件,前端APP的三套错误码,我们分别加入了对应的tag监控,并分别抛出对应tag的问题。
八、竞品测试
竞品测试分为资源消耗类性能对比和时间消耗类对比,可以认为是上述视频性能测试和视频启播时间测试的扩展,引入product相关的配置文件,保存常见的竞品参数,并执行对应的自动化用例获取数据。
图13 竞品测试配置文件
图14 竞品测试结果
九、总结
本文介绍了Mac视频各专项测试的基础建设,填补了之前在Mac端的空白。各项工作完成之后,各部分测试效率有了极大的提高,并发现了很多难以复现的bug,指导开发的优化方向。