通过用户对某一个场景的使用频率以及版本的重点功能来评估场景的重要与否,若场景满足以上两个条件时则需要进行速度测试。还需要考虑痛点原则,例如一些用户感觉到难受或者抱怨的就要进行速度测试。
速度测试是性能测试中其中重要的一项,其中速度测试中用到的方法主要是:掐表计时法、打印日志计时法、图像分析计时法、HOOK方案计时法、网络包分析法这五种方法。
速度测试过程主要包括操作手机、记录测试结果、对测试结果进行数据处理得到测试值这三个过程。操作手机可以借助于自动化测试测试工具(Monkey、UIAutomator、Robotium)来进行,可使测试结果更加准确。记录测试结果时也可采用自动化识别(打印日志分析、图像分析计时、hook方案、网络包分析计时)的方法来确保所记录的结果精确。
打印日志计时法需打印开始和结束这两个关键节点来精确计算所需要的时间,亦可打印代码中函数的消耗时间。缺点就是用户感知时间和日志打印时间有差别,通常来讲用户的感知时间要比日志打印的时间要多一些。
图像分析计时分析法的思路是用工具记录操作过程中每一时刻的屏幕图像和图像对应的时间,通过分析算法找出开始时间和结束时间的图像,从而获得开始和结束的时间。准确的找到开始时间和结束时间是图像分析法的关键。思路就是要找到开始帧和结束帧的特征,并通过图像算法识别到特征。
HOOK方案计时法用 View.dispatchTouchEvent获取用户的点击时间,GIRenderer.draw获取绘制完成时间,利用二者时间差来测试APP的运行速度。用Xposed框架编写hook代码,在root过的手机上运行代码。
网络包分析法的原理是首先使用Tcpdump来抓取手机端的网络包,然后将数据网络包复制到电脑端查看,并分析每个子资源的连接、请求、等待、接收每个环节的耗时来分析出运行慢的原因。
在进行速度测试时我们要有一个大概的方向,确定我们要使用的测试方法。第一步就是确定一些关键性的指标、要测试的网络类型、测试站点、是否有缓存、APP启动方式是冷启动还是热启动。第二步确定我们的整体方案,手机端要做好准备,然后进行APP的启动运行,在启动运行的过程中需要抓取日志和网络包;测试动作完成之后利用adb命令将日志文件和网络包复制到PC端;最后还需要恢复手机的环境至初始状态,方便下一次的测试。 在第二步中也用到PC,使用PC对手机执行的动作进行全程录像并将视频分帧为图片。PC的分帧图片和手机日志网络包相结合来分析最终的测试结果。
关键问题1:如何实对现手机的操作?使用adb命令和sentevent方法来实现点击滑动输入等待等动作。
关键问题2:如何排出高品质的图像?将取景、对焦、测光、去干扰各个环节处理好才能得到高品质的图像,并且可采用脚本的形式来控制录像的开始和结束。
关键问题3:如何将视频分帧?使用视频分帧工具FFmpeg将视频转化为以毫秒时间命名的图片集,通过图片集来确定开始帧和结束帧。
关键问题4:如何找准开始时间?利用程序判断图片中第一张白点出现的时间来确定正确进入的时间。(相对于前一张的变化量,变化量达到一定的阈值即判定为白点出现)
关键问题5:如何找结束时间?利用图片饱和度算法来识别首字出现的时间。
关键问题6:网络包分析法如何分析“慢在哪里”?在Pcap包中提炼关键的指标(流量、网络完成时间、主要资源耗时)自动分析,快速判断测试的网络包有无问题,有问题之后再查看网络包的详细数据。