大家都知道在Android 应用日常自动化测试时,设备都是连接着USB的,由于连接USB,会导致无法在日常测试时及时感知耗电情况。用户反馈了,或者耗电专项时才会去做耗电测试,那我们有没有什么办法可以实现连接在USB充电的状态下就可以在测试时获取到耗电数据呢?
答案是肯定的,下面是我花费2天时间折腾,探索的过程,最后有总结的方法:
方法就是使用模拟断电命令:adb shell dumpsys battery unplug
现在就来一起探索这个断电命令执行后的数据和影响,是否可以使用:
耗电测试实现步骤探索:
一、手机连接USB后执行:(adb shell dumpsys battery unplug 探索模拟断电命令的影响)
adb shell dumpsys batterystats --enable full-wake-history
adb shell dumpsys batterystats --reset
此时手机处于充电状态,有充电图标,电量正常增加,且不执行,
adb shell dumpsys battery unplug
系统设置中省电与电池此时使用时间被清零,使用时长显示为 0时0分,无应用耗电数据。
1、正常使用手机5分钟,后观察设置省电与电池此时使用时间,仍然显示为显示为 0时0分,无应用耗电数据
2、使用清理大师5分钟后,获取大师的耗电数据:显示为空。
adb shell dumpsys batterystats com.qihoo.cleandroid_cn| findstr u0a407
u0a407:
总结:说明连接USB后,未执行模拟断电命令,无法获取应用的耗电数据。
注意:adb shell dumpsys batterystats --reset 小米手机rom14.执行这个命令有时会提示:
Security exception: Package android does not belong to 2000 并不影响重置效果
二、手机连接USB后执行:(adb shell dumpsys battery unplug 探索模拟断电命令的影响)
adb shell dumpsys batterystats --enable full-wake-history
adb shell dumpsys batterystats --reset
此时手机处于充电状态,执行:
adb shell dumpsys battery unplug
执行后,充电图标消失,手机有提示音,系统设置中省电与电池此时使用时间被清零,使用时长显示为 0时0分,无应用耗电数据。
1、正常使用手机5分钟,后观察设置省电与电池此时使用时间,0时5分,有应用耗电数据
2、使用清理大师5分钟后,获取大师的耗电数据:显示为正常耗电数据。
C:\Users\liull>adb shell dumpsys batterystats com.qihoo.cleandroid_cn | findstr u0a407
UID u0a407: 7.56 fg: 4.87 bg: 0.00768 fgs: 1.73 cached: 0.0696 ( cpu=6.72 (3m 19s 714ms) cpu:fg=4.84 (35s 111ms) cpu:bg=0.00768 (33ms) cpu:fgs=1.69 (38s 5ms) cpu:cached=0.0695 (87ms) system_services=0.706 sensors=0.0685 (9m 58s 694ms) wifi=0.0735 (1s 416ms) wifi:fg=0.0302 wifi:fgs=0.0432 wifi:cached=0.000104 )
7.56单位为mah,即为要找的耗电数据
结论:说明连接USB获取应用数据需要执行 adb shell dumpsys battery unplug 模拟断电命令 ,否则无法获取数据。
3、关屏幕充电10分钟,观察手机电量是否增加。(15:07 89% 开始)
结论:手机电量显示没有增加和减少,还是 89%,说明连接USB,可以模拟应用耗电情况,但是无法在
Battery Historian 中观察Battery Level的趋势图
4、执行adb bugreport 导出 bugreport 实验:
结论:可以正常解析数据,但是时间显示不正确,需要找到原因
5、adb shell进入手机
执行 bugreportz 震动和完成,导出bugreport.zip 验证使用导入,观察是否正常
总结:和4步骤导出报告数据一样。不过也存在时间不正确问题,不知道是不是小米手机问题,后面排查
另外,使用mv 移动到sdcard后导出,文件时一致的。
6、拔下USB数据线,记录手机目前电量(例如89%),使用手机看视频一段时间观察,手机电量是否下降
结论:设置了模拟断电后,无论插拔USB,手机电量都显示不变。
adb shell dumpsys batterystats --reset 命令是用来重置电池统计信息,而不是恢复充电状态
要恢复手机的充电状态,可以使用以下命令:
adb shell dumpsys battery reset
三、验证时间报告中显示不正确问题
手机设置时间正确,手机重启后,连接USB,执行下面2个操作:
adb shell dumpsys batterystats --enable full-wake-history
adb shell dumpsys batterystats --reset
此时手机处于充电状态充电图标正常,且不执行:
adb shell dumpsys battery unplug
拔下USB,使用手机,使用清理大师一段时间5分钟左右
结论:时间使用的默认0区开始,和时间时间相差8小时,应该时系统的bug
最终总结:插着USB测试耗电需要执行 adb shell dumpsys battery unplug 模拟断电才能获取数据,电量值会保持不变,无法观察Battery Level的趋势图,测试完成需要使用 adb shell dumpsys battery reset 恢复初始,优点是可以不用专门准备测试环境。
测试步骤:依次执行
adb shell dumpsys batterystats --enable full-wake-history
adb shell dumpsys batterystats --reset
adb shell dumpsys battery unplug
执行自动化测试用例,获取耗电数据,同时导出bugreport.zip
获取耗电数据:上面验证过程有例子
adb shell dumpsys batterystats 包名 | grep 应用的uid
导出数据,上面也有实现方法。(执行 bugreportz 震动和完成,导出bugreport.zip ,都可以在脚本中实现)
adb shell dumpsys battery reset 恢复初始
完成测试。
测试耗电专项 需要拔电测试,不过最好使用无线连接的方式,这样可以执行自动化用例精确测试每个场景的耗电情况,并且不要执行 adb shell dumpsys battery unplug 操作