移动性能测试 基于变化取性能响应时间尝试

浮云 · December 25, 2014 · Last by 浮云 replied at November 05, 2015 · 2641 hits
本帖已被设为精华帖!

首先说下我从事的测试是安卓 TV,盒子,路由等安卓产品相关的自动化及性能测试工作。主要部分是独立负责性能测试部分,脚本及临时需求也是需要 support。主要是 shell 脚本相关更多。在有权限的情况下,我更喜欢 shell 的直接,组织好逻辑是关键。开此贴主要是应群里建议,讨论下目前我正在尝试的获取性能数据方案。

一、自动化性能测试脚本开发,快速区分负责部门
1、性能测试自动化脚本方案确立,目前尝试阶段,尝试中方案如下(多方案组合完成需求):
(1)通过 SurfaceFlinger 句柄变化跟踪显示状态变化收集时间变化
局限性:由于句柄与显示界面不完全是一一对应关系,未操作仍存在句柄变化的场景无法测试
注意点:脚本逻辑包含的判断等操作本身的性能影响精度,需要组织适合的逻辑匹配更加精确的精度需求
优势:可以体现显示性能

(2)通过 log 打印的按键 up/down 时间戳及 uiautomator events 打印的 TYPE_VIEW_FOCUSED 时间戳计算操作变化响应时间
局限性:只适用集成 uiautomator 并且有 focused 属性改变的场景,例如光标移动;忽略显示性能处理时间。
注意点:需要有相关 log 打印,否则无法获取按键响应的 log;uiautomator 是单进程执行并且重定向面临输出 buffer 大小问题需要 kill 进程才会输出。
优势:可以根据时间戳准确获取代码执行的时间

(3)根据研发人员配合添加的 log 字段,通过 log 获取代码执行时间
局限性:配合 log 打印获取有版本局限性,服务于研发自身分析定位
注意点:log 打印本身也存在 10ms 左右的输出时间
优势:准确获取代码逻辑执行时间与总时间的占比,便于定位问题。

2、划分标准:按照脚本测试时间/用例录像测试时间比例划分主要优化的研发部门。
我们这边快速区分 BSP 和 UI 占比可以更有效的对应优化的研发人员。

二、主要介绍下 SurfaceFlinger 句柄变化的方案,log 方案不多做介绍
1、获取数据的部分:dumpsys SurfaceFlinger|grep '|....|'

主要是 handle 和 name 两部分数据判定界面变化,通过 grep 和 awk 组合使用很容易判定界面变化

2、由于 date 命令获取时间是秒级,获取精度更高的时间戳计算时间。
查找多个位置的时间相关数据,最终在/proc/timer_list 中找到 now at 430222772615795 nsecs
cat /proc/timer_list|busybox awk 'NR==3{printf("%.0f\n",$3/1000000)}' 即可取到毫秒时间

3、组织逻辑循环获取数据判定句柄变化,每次发生变化则 echo 时间戳,之后计算时间戳的差值。
这里主要介绍思路,脚本代码就不展示了,我是基于 shell 完成的相关逻辑。

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

通过 SurfaceFlinger 句柄变化跟踪显示状态变化收集时间变化
这个方法挺新颖. 不错

@sandman 通过 SurfaceFlinger 句柄变化跟踪显示状态变化和屏幕显示完全呈现出来会有多大的误差?

#2 楼 @zongguanxian 这是有局限的,只限于有句柄变化的测试场景,误差就是取次 SurfaceFlinger 数据的差异,而且每次取数据都是开销差不多的时间做减法后精度在 0.01 吧。SurfaceFlinger 是显示帧的管理,屏幕完全显示出来就看屏幕硬件驱动的性能了,基本可忽略。
视频类合成的帧是独立显示的 HWC_FRAMEBUFFER_TARG 代表了合成的图像,至于它的句柄变化没细研究变化的规律。
adb shell
time tmp=`cat /proc/uptime&&dumpsys SurfaceFlinger|grep "|....|"
0m0.02s user 0m0.01s system
time echo "$tmp"|busybox awk '{if(NR==1){print $1 }else{print $0}}'|busybox awk -F "|" '{if(NR==1){t=$1}else{if(NR>2){print t","substr($1,2,length($1)-2)","substr($2,2,length($2)-2)","substr($NF,2,length($NF)-3)}}}'
0m0.00s real 0m0.00s user 0m0.00s system

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