移动性能测试 [腾讯 TMQ] 启动耗时可以这样测

腾讯移动品质中心 · May 24, 2018 · Last by chenyulong15850512659 replied at September 22, 2019 · 3527 hits

背景

启动耗时作为App一项核心性能指标,腾讯地图现在是基本上每个版本都会进行数据的收集。纵向的对比(与自己)之前我们都依赖于开发埋点,横向的对比(与竞品)就是人工拿高清摄像头录制采集,然后用分帧工具进行分帧后统计,我们一直在想启动耗时如果可以自动化测试就可以释放人力了。

这期间也同其他项目组的测试同学讨教过图像识别方法,对比如下:

1 启动耗时采集

整体思路如下:

录制视频的过程这里先省略——可以自动化,后续接下来再进一步研究,本次实验采用的是录屏大师采集的,后面建议使用系统接口:MediaProjection 和 MediaProjectionManager进行实时的屏幕采集(Android 5.0以上系统支持)。

2 机器学习

总是在听说机器学习,一直觉得好高大上的名词,在测试工作中还是第一次用到,瞬间觉得level提升一个档次,嘿嘿,小白入门请勿喷o(╯□╰)o。

Scikit-learn(简称sklearn)是目前最受欢迎,也是功能最强大的一个用于机器学习的Python库(也是在组里同学的一次分享中了解到的)。它广泛地支持各种分类、聚类以及回归分析方法比如支持向量机、随机森林、DBSCAN等等,具有其强大的功能、优异的拓展性以及易用性,目前受到了很多数据科学从业者的欢迎,相关算法就不会具体去讨论了,这次实践主要以实战为目的!

这是一个初级的图像内容学习实践,是有监督学习的一个代表,其本质是通过分析已知分类图片的构成信息来对未知分类图片进行分类。

2.1 图像处理

选用的Python图像处理库PIL的Image模块,通过Image.open()函数打开制定的图像文件,而真实的图像数据直到试图处理该数据才会从文件读取文件,对象必须实现read()、seek()和tell()方法,并且是以二进制模式打开。

我们看下输入结果:

使用flatten()将多维图像转成单行矩阵,将数据扁平化[height, width, channel] —>[byte]。

2.2 训练模型

拿到图像数据后我们要开始正式训练模型了,这里就要引入机型学习的算法了——LinearSVC,从名字就可以看出,它是线性分类,也就是不支持各种低维到高维的核函数,仅仅支持线性核函数,对线性不可分的数据不能使用。

我们再看下fit()方法:fit(self, X, y, sample_weight=None)它是用于训练SVM,具体参数已经在定义SVC对象的时候给出了,这时候只需要给出数据集X和X对应的标签y 。

在机器学习过程中,一般用来训练模型的过程比较长,所以我们一般会通过joblib.dump()的方法将训练的模型进行保存(持久化),然后进行评估,预测等等,这样便可以节省大量的时间。

2.3 通过模型进行学习预测

2.4 输出学习结果

3 实际运用

我录制了11组启动视频,一组用来当做训练集,剩下的十组用来作为测试数据。

在训练集里,将启动过程拆分为以下五个阶段,将每个阶段的起终页做了一下对比:

3.1 desk:桌面

3.2 splash:闪屏页

3.3 loading:加载内容

3.4 stable:稳定页

这个阶段的图像就是一张图就可以展示了。

3.5 end:关闭录屏软件

其中,stable和end阶段不计入启动耗时的采集数据,我仅仅列出来给大家看下展示效果。

这里会有个疑问stable的状态界定,我取的是—连续对比前后两张图有差别,直到连续两张图在肉眼查看下没有明显区别为止,如下图所示:

运行结果如下:

十组实验部分测试数据:

PS:自动识别率 = 机器学习识别总帧数/人工识别总帧数 *100 (这个应该建立在学习模型足够精准的基础上,自动识别率应该会越高)。

最后,如何计算启动耗时呢?

我们是通过这个命令:
ffmpeg -i TX.mp4 -r 60 %d.jpeg
可以将视频以固定60帧截取的图片,所以总耗时 = 总帧数 * 1/60。

希望能够给到大家一些思路,将实际的测试工作中引入一些机器学习的方法。

关注腾讯移动品质中心TMQ,获取更多测试干货!

共收到 7 条回复 时间 点赞

不够干,每次都是吊胃口,代码又不具体些.
虽然用了机器学习什么的,感觉就像推广技术多么高潮的招人贴.

似曾相识的思路,我有带录制的源码☺

小马 回复

浅见浅见😂 ,笔者不是在文中有提过么

ffmpeg emmm之前好像在社区看到过类似的帖子🤔

问一个问题,启动耗时那精度越高越好,你怎么解决高帧率录屏的问题?看你这里是录制完视频之后再按固定的帧去转为图片,那应该不精确吧?

准确性有多高?一个是帧率的问题,高速摄像机可以保持在240fps, ffmpeg的一般是30-60左右。二是机器学习识别的帧数会有多大误差?

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up