移动性能测试 一种 android 耗电量自动化测试方案

mrx102 · 发布于 2017年11月02日 · 最后由 mrx102 回复于 2017年11月13日 · 1435 次阅读
本帖已被设为精华帖!

耗电量测试现状

随着移动浪潮的兴起,耗电量越来越受到测试人员的重视,传统的手工测试方式太过于耗费人力,然而自动化的方式又存在不少问题,但是这始终难不倒聪明的人类:有人借助电流仪等仪器实现自动化,有人则通过在数据线之间接入控制元件实现自动化。。。
这里,我要说的是另外一种方式,通过借助小米智能插座实现耗电量的自动化测试。
小米智能插座--一种能在手机上控制插座开关的设备

-----------------------------------------------------------------------------------
这不是广告贴!!这不是广告贴!!这不是广告贴!!
-----------------------------------------------------------------------------------

实现原理

手机通过wifi连接电脑,adb命令通过wifi传输执行,智能插座可通过wifi执行用例打开和关闭,测试场景也可通过wifi执行用例进入。具体流程如下:

环境准备

1. android环境就不说了,这是必须的
2. 通过wifi连接电脑和手机:
手机和电脑连接同一局域网,手机通过usb线连接电脑
adb tcpip 5555
adb connect 192.168.1.101 (Android设备IP地址)
3. 安装米家(智能插座的控制app),智能插座连接wifi(方法见说明书)
4. 将手机通过usb线接在智能插座上
5. 编写智能插座开关用例

测试步骤

1. 等待电量充满且温度降到某个指定值,使用如下命令读取电量和温度:adb shell dumpsys battery
这里写图片描述
2. 打开/关闭屏幕
先判断屏幕状态 adb shell "dumpsys battery | grep 'Display Power:'" 返回结果中包含Display Power: state=OFF,则处于锁屏状态;Display Power: state=ON,屏幕处于打开状态,如果处于锁屏状态,执行adb shell input keyevent 26点亮屏幕(打开和关闭使用同一命令)
3. 执行智能插座开关用例,关闭电源开关
需要注意的是,用例执行可能失败,所以在执行用例之后,还需要判断手机是否已经断电,如还处于充电状态,可以通过再次执行用例关闭智能插座
4. 清除之前的耗电数据并重新开始采集
adb shell dumpsys batterystats reset
adb shell dumpsys batterystats --enable full-wake-history
5. 执行用例进入测试场景
6. 计时等待
7. 结束采集,提取耗电数据,生成的txt文件可通过google的battery-historian转换为html报告,使用方式自行搜索。
adb bugreport > d:/report.txt
adb shell dumpsys batterystats > d:/batterystats.txt
8.执行智能插座开关用例,打开电源开关

部分设备特殊处理

众所周知,oppo设备对于开发者来说,那体验真是没的说。使用这个方案在oppo设备上测试时,会发现数据只有前几分钟的,计时结束之后,你也无法再重新打开智能插座的开关,这是因为oppo设备的usb调试超过10分钟未使用就会自动关闭。。。
那么,oppo设备是怎么判断有没有使用usb调试呢?我们在多次的测试之后,发现它仅仅是以设备是否处于充电状态来判定。这样我们可以通过修改电池充电状态来骗过oppo的自动关闭usb功能,使用命令adb shell dumpsys battery set ac 1修改电池充电状态,然后在计时结束之后恢复电池状态adb shell dumpsys battery reset

共收到 12 条回复
2113

感谢分享,请问你这边电量计算的具体方法是?
建议加一下最后结果量化的方法~😀

137f7f
mrx102 · #3 · 2017年11月02日 作者
2113testly 回复

电量可以每隔一定时间使用adb命令读取一次,但是对于oppo设备,由于手动修改了电池状态,电量不会实时更新,只有在恢复后才会更新,所以,只能在修改之前获取一次,然后恢复之后再获取一次;然后battery-historian生成的报告里面,有很详细的耗电数据,这个可以提供给开发分析耗电问题;

7c6fd9

这个脑洞开的有点大,看了一遍流程,有几个疑问想请教一下,
首先,这个方式是针对手机测量耗电量还是针对应用测量耗电量;还有一点不不明白,智能插座是如何实现自动化开关的和框架如何实现交互的(不知道这个东东的的功能原理);最后一个问题,通过wifi连接adb,是否有额外的电量消耗,对模仿真实的场景是否有影响。。。😎

1645

很赞。。。

104 seveniruby 将本帖设为了精华贴 11月02日 18:56
104

开关小米插座的代码你没贴吧 还不是通过ui自动化吧。

137f7f
mrx102 · #8 · 2017年11月03日 作者
7c6fd9zhengyouth 回复

1.统计的耗电量是整机的,但是用battery-historian生成的报告中,有很详细的数据,包括哪个应用程序的哪个事件占用多长时间等等,可以很好的帮助定位耗电问题;
2.智能插座可通过《米家》这个app来控制,只要写个UI自动化的用例,通过米家控制智能插座的开关就行了。
3.如果真实场景是要关闭wifi的话,这样测出来的耗电量结果肯定有差异;但如果我们做版本之间的对比,那结果的差异性不会太大,如果出现大的偏差,可以通过battery-historian生成的报告进行分析

137f7f
mrx102 · #9 · 2017年11月03日 作者
104seveniruby 回复

智能插座的开关是通过UI自动化的,智能插座连接wifi之后,可以通过米家app搜索到,在米家app里面可以控制智能插座开关

104
137f7fmrx102 回复

感觉你可以甩开他们的ui 监听下他是如何跟硬件交互的

137f7f
mrx102 · #11 · 2017年11月06日 作者
104seveniruby 回复

这个想法好。我试着抓了下包,但是没有相关的数据包;后续再慢慢研究下

8a7ad8

被测试的应用通过自动化实现随机操作吗?

137f7f
mrx102 · #13 · 2017年11月13日 作者

这个就要看你测什么场景下的耗电了,通过ui自动化进入对应的场景就行了

6853 codeskyblue 利用小米智能插座防止手机过充电 中提及了此贴 11月15日 21:30
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册