使用到的技术:mobileperf+pyecharts或mobileperf+grafana
性能测试
GitHub - alibaba/mobileperf: Android performance testAndroid performance test. Contribute to alibaba/mobileperf development by creating an account on GitHub.https://github.com/alibaba/mobileperf
使用方法:
- 安装python3,加入到环境变量中,执行python --version,确保是python3
- 安装adb,确保adb devices能找到设备
- 修改配置文件,示例参考根目录下config.conf
- 运行,mac、linux 在mobileperf工具根目录下执行sh run.sh,windows 双击run.bat,结束测试,等待设置测试时长到或按Ctrl+C
config文件主要改包名和设备udid
测试结果,包含cpu,fps,内存mem,流量traffic 等csv文件
结果可视化
grafana
grafana的安装、使用大家自行学习,这里主要讲pyecharts
pyecharts
安装:pip install pyecharts
实际中一次cpu测试结果如下
现在用pyecharts处理,注释注明了每一步的意思,可以对着看
import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import Line
import os
class csv_to_chart(object):
def __init__(self):
self.cpu_file_name = './cpuinfo.csv'
self.fps_file_name = './fps.csv'
self.mem_file_name = './meminfo.csv'
self.traffic_file_name = './traffic.csv'
def func(self, val):
tmp = float(val) / 100
tmp = "{:.2f}".format(tmp)
return str(tmp)
def cpu_csv_to_line(self):
# 读取CSV文件
db = pd.read_csv(self.cpu_file_name)
# 获取列名,转为列表
tmp = db.columns.tolist()
tmp_list = []
# 列名system,特殊符号%,\n不能入库
for a in tmp:
if '\n' in a:
tmp_list.append(a[:-2])
elif 'system' in a:
tmp_list.append('sys')
elif '%' in a:
tmp_list.append(a[:-1])
else:
tmp_list.append(a)
db.columns = tmp_list
# 将pid_cpu这一列除以100,因为是百分比
db.pid_cpu = db.apply(lambda x: self.func(x.pid_cpu), axis=1)
yk = (
Line()
.add_xaxis(db.datetime.tolist())
.add_yaxis(series_name="cpu百分比",
y_axis=db.pid_cpu.tolist(),
# 跳过值是0的点
is_connect_nones=True,
# 曲线光滑
is_smooth=True,
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值"),
]
),
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(type_="average", name="平均值")]
), )
.set_global_opts(title_opts=opts.TitleOpts(title="cpu占用详情"),
tooltip_opts=opts.TooltipOpts(trigger="axis"))
.render("html/cpu.html")
)
if __name__ == '__main__':
tmp = os.path.join(os.path.dirname(__file__), "html")
if not os.path.exists(tmp):
os.mkdir(tmp)
csv_to_chart().cpu_csv_to_line()
目前问题
- 真机,没有fps数据
- 模拟器,没有流量数据
效果
- 折线图
- 最大值
- 最小值
- 均值
- 竖线提示
- 跳过空值
脚本放在统计结果路径,运行会在html文件夹生成对应的html