新闻详情

新闻详情

首页 / 资讯中心 / 详情

10、功耗数据采集:自动化测试脚本与数据格式化

发布时间:2026/9/7 18:29:56来源:尧图网络
10、功耗数据采集:自动化测试脚本与数据格式化
10.1 自动化功耗测试脚本手动测功耗说实话一次两次还行迭代个几十次你肯定崩溃。我习惯写一个 shell 脚本把整个流程串起来。先看一个最基础的脚本框架#!/bin/bash # 自动化功耗采集脚本 - 基础版 DEVICE_SERIALyour_device_serial OUTPUT_DIR./power_data TIMESTAMP$(date %Y%m%d_%H%M%S) # 创建输出目录 mkdir -p $OUTPUT_DIR # 1. 清除旧数据 adb -s $DEVICE_SERIAL shell dumpsys batterystats --reset # 2. 启动待测场景 echo 启动待测场景... adb -s $DEVICE_SERIAL shell am start -W com.example.app/.MainActivity # 3. 等待场景稳定我一般等5秒 sleep 5 # 4. 开始采集 echo 开始采集功耗数据... for i in {1..10}; do adb -s $DEVICE_SERIAL shell dumpsys power $OUTPUT_DIR/power_${TIMESTAMP}_${i}.txt sleep 2 done # 5. 采集电池统计 adb -s $DEVICE_SERIAL shell dumpsys batterystats $OUTPUT_DIR/battery_${TIMESTAMP}.txt echo 采集完成数据保存在 $OUTPUT_DIR这个脚本干了五件事重置数据、启动应用、等待稳定、循环采集、保存结果。每次采集前先执行adb shell dumpsys batterystats --reset不然你会拿到一堆历史数据根本分不清哪些是当前场景的。10.2 adb shell dumpsys power 深度解析adb shell dumpsys power会输出一大堆东西。我帮你拆解一下核心字段字段含义重点关注mWakefulness设备唤醒状态Asleep 表示休眠Awake 表示唤醒mScreenOn屏幕是否点亮true 时功耗会高很多mWakeLocks当前持有的唤醒锁这里经常有异常持锁的情况mDisplayPowerState显示电源状态ON/OFF/DOZE 三种状态mBatteryLevel当前电量百分比用于计算功耗变化为什么会关注 mWakeLocks我在项目里遇到过某个第三方 SDK 在后台持了一个 PARTIAL_WAKE_LOCK导致设备无法进入深度休眠。一晚上掉电 30%用户直接炸了。避坑指南我曾经因为没注意 mWakefulness 字段采集了一堆假数据。设备其实已经休眠了但我以为还在跑测试场景。采集前先检查 mWakefulness 是不是预期的状态。10.3 功耗数据格式化与存储原始数据是文本没法直接分析。我一般会写个 Python 脚本做格式化import re import json from datetime import datetime def parse_power_dump(raw_text): 解析 dumpsys power 输出 result {} # 提取唤醒状态 wake_match re.search(rmWakefulness(\w), raw_text) if wake_match: result[wakefulness] wake_match.group(1) # 提取屏幕状态 screen_match re.search(rmScreenOn(\w), raw_text) if screen_match: result[screen_on] screen_match.group(1) true # 提取唤醒锁 locks re.findall(rLock\{(.?)\}, raw_text) result[wake_locks] locks # 提取电量 battery_match re.search(rmBatteryLevel(\d), raw_text) if battery_match: result[battery_level] int(battery_match.group(1)) # 添加时间戳 result[timestamp] datetime.now().isoformat() return result # 使用示例 with open(power_20240101_120000_1.txt, r) as f: raw f.read() parsed parse_power_dump(raw) print(json.dumps(parsed, indent2, ensure_asciiFalse))格式化之后的数据长这样{ wakefulness: Awake, screen_on: true, wake_locks: [ PARTIAL_WAKE_LOCK:com.example.app ], battery_level: 85, timestamp: 2024-01-01T12:00:05 }我习惯存成 JSON 格式方便后续做趋势分析。你想想看如果你有 100 次测试的数据用 JSON 存起来写个脚本就能画出功耗曲线图多直观。存储建议按日期建文件夹比如power_data/2024/01/01/文件名包含场景标识比如video_playback_001.json每个 JSON 文件包含元数据设备型号、系统版本、测试场景10.4 完整的数据采集流程把上面这些串起来就是一个完整的自动化流程#!/bin/bash # 完整版自动化采集脚本 SCENE$1 # 场景名称比如 video_playback DURATION$2 # 采集时长单位秒 OUTPUT_BASE./power_data/$(date %Y/%m/%d) mkdir -p $OUTPUT_BASE echo 开始采集: $SCENE # 重置电池统计 adb shell dumpsys batterystats --reset # 启动场景 adb shell am start -W com.example.app/.$SCENE sleep 3 # 循环采集 END$((SECONDS DURATION)) while [ $SECONDS -lt $END ]; do TIMESTAMP$(date %H%M%S) adb shell dumpsys power $OUTPUT_BASE/${SCENE}_${TIMESTAMP}.txt # 顺便采集电池详情 adb shell dumpsys batterystats $OUTPUT_BASE/${SCENE}_battery_${TIMESTAMP}.txt sleep 2 done echo 采集完成 echo 数据保存在: $OUTPUT_BASE使用方式./collect_power.sh video_playback 60这条命令会采集 60 秒的视频播放功耗数据每 2 秒一次快照。我个人觉得这个频率比较合适太快了数据冗余太慢了抓不到关键变化。小技巧采集完成后用adb shell dumpsys batterystats --reset再清一次数据避免影响下一次测试。我吃过这个亏两次测试的数据混在一起排查了半天。10.5 知识体系总览下面这张图帮你理清本章的核心逻辑
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Immich 自托管照片与视频管理:功能矩阵、快速安装与部署配置详解 2026/9/7 19:06:03

Immich 自托管照片与视频管理:功能矩阵、快速安装与部署配置详解

Immich 自托管照片与视频管理:功能矩阵、快速安装与部署配置详解 【免费下载链接】immich High performance self-hosted photo and video management solution. 项目地址: https://gitcode.com/GitHub_Trending/im/immich 本文以 Immich 仓库的官方 README&…

阅读更多 →
Git标签实战:从版本发布到回滚的完整指南 2026/9/7 19:06:03

Git标签实战:从版本发布到回滚的完整指南

我们组去年年中发布了一个重要版本,当时线上出了个紧急问题需要回滚。我翻遍了几个月的提交历史,愣是找不到当初那个稳定版对应的commit。最后靠着一个同事电脑里残留的一个tag v1.6.2 才把问题解决。那次以后我才真正意识到,Git标签这东西…

阅读更多 →
macOS编译Chromium 144:环境准备完整指南 2026/9/7 19:06:03

macOS编译Chromium 144:环境准备完整指南

上周一位读者私信我,说照着网上某篇教程在 macOS 上编译 Chromium,折腾了整整三天,连环境都没搭起来。我远程帮他看了一眼,三个坑全部踩中:装的是 Xcode beta 版、depot_tools 用的是 Homebrew 版本、磁盘分区只剩不到…

阅读更多 →
CS-Notes 精讲:操作系统中的链接机制——编译系统、目标文件与静态/动态链接 2026/9/7 19:06:03

CS-Notes 精讲:操作系统中的链接机制——编译系统、目标文件与静态/动态链接

CS-Notes 精讲:操作系统中的链接机制——编译系统、目标文件与静态/动态链接 【免费下载链接】CS-Notes :books: 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计 项目地址: https://gitcode.com/GitHub_Trending/cs/CS-Notes 「链接…

阅读更多 →
Angular Web Workers 后台处理实战:ng generate web-worker 脚手架到真实 Worker 通信全解 2026/9/7 19:06:03

Angular Web Workers 后台处理实战:ng generate web-worker 脚手架到真实 Worker 通信全解

Angular Web Workers 后台处理实战:ng generate web-worker 脚手架到真实 Worker 通信全解 【免费下载链接】angular Deliver web apps with confidence 🚀 项目地址: https://gitcode.com/GitHub_Trending/an/angular 本文以 Angular 官方文档《…

阅读更多 →
agent-skills 元技能解析:using-agent-skills 如何驱动技能发现与 Agent 工程纪律 2026/9/7 19:03:03

agent-skills 元技能解析:using-agent-skills 如何驱动技能发现与 Agent 工程纪律

agent-skills 元技能解析:using-agent-skills 如何驱动技能发现与 Agent 工程纪律 【免费下载链接】agent-skills Production-grade engineering skills for AI coding agents. 项目地址: https://gitcode.com/GitHub_Trending/agentskill/agent-skills 在 a…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞