我们在做app测试的过程中,都会对app内存,cpu这些做一个简单的测试,今天简单的写下如何通过python监控app这些资源变化

实现原理

1、通过adb命令查看app资源内存

2、通过python脚本调用adb命令

3、持续监控写入txt文件或者csv文件中

监控资源过程

我们以淘宝app为例完成本次监控

adb监控内存命令

# adb监控内存变化
adb shell dumpsys meminfo com.taobao.taobao

进行数据分析

通过观察,我们只需要提取出来结果的 Native Heap 和 Dalvik Heap,还有内存总和 TOTAL,接下来我们通过python把想要的数据提取出来

# coding:utf-8
import os
# 获取淘宝内存命令
adb = 'adb shell dumpsys meminfo com.taobao.taobao'
# 执行adb命令
result = os.popen(adb).read()
# 以','进行分割
temp = ','.join(result.split())
# 获取native值
native = temp.split('Native,Heap')[1].split(',')[1]
# 获取dalvik值
dalvik = temp.split('Dalvik,Heap')[1].split(',')[1]
# 获取total值
total = temp.split('TOTAL')[1].split(',')[1]

这样的话就把我们想要的数据提取出来了,可以中间加个等待时间,每几秒提取一次数据,接下来我们呢进行对这些数据写入csv文件或者txt文件中

首先我们创建一个列表,把每次提取出来的数据放入到列表中,写入csv文件中

# coding:utf-8
import os
import time
import csv
alldata = [("native", "dalvik","TOTAL")]
# 设置循环次数
count = 10
while count > 0:
lines = os.popen("adb shell dumpsys meminfo com.taobao.taobao") # adb 查看app内存
result = lines.read()
temp = ','.join(result.split())
native_heap = temp.split('Native,Heap')[1].split(',')[1]
print ("native_heap:" + str(native_heap))
dalvik_heap = temp.split('Dalvik,Heap')[1].split(',')[1]
print ("dalvik_heap:" + str(dalvik_heap))
total = temp.split('TOTAL')[1].split(',')[1]
print ("total:" + str(total))
alldata.append([native_heap, dalvik_heap,total])
count -= 1
print('还剩余:%s次'%count)
time.sleep(1) # 等待时间
csvfile = open('test02.csv', 'w',encoding='utf8',newline='')
writer = csv.writer(csvfile)
writer.writerows(alldata)
csvfile.close()

当我们在跑自动化的过程中,我们再次执行这个监控内存脚本,就可以完成对app内存资源的监控了;

剩下的CPU,耗电量大家试着完成下,要记住耗电量不能通过USB的方式连接哈,要不然就会一直处于充电状态

appium---Android app资源监控的更多相关文章

  1. jenkins+appium android app自动化测试

    jenkins安装 pytest+jenkins安装+allure报告 新建任务 其他默认,保存 立即构建 test_login.py from src.pages import login_page ...

  2. Android App资源的查找过程分析

    Android资源管理框架实际就是由AssetManager和Resources两个类来实现的.其中,Resources类可以根据ID来查找资源,而AssetManager类根据文件名来查找资源.事实 ...

  3. Appium+Python app自动化测试之脚本启动和停止Appium服务

    研究了一段时间的Appium android app的自动化测试,工作中需要连接多台手机终端同时执行测试用例,我实现的方式是获取用例中需要执行用例的设备id个数以及实际连接到的设备数(通过adb de ...

  4. Appium+python自动化(三十四)- 有图有真相,很美很精彩 - 屏幕截图和Android APP类型简介(超详解)

    简介 在实际自动化项目运行过程中,很多时候App可以会出现各种异常,为了更好的定位问题,除了捕捉日志我们还需要对运行时的设备状态来进行截屏.从而达到一种“有图有真相”的效果. 截图方法 方法1 sav ...

  5. appium启动app(android)

    android ​ Appium 启动APP至少需要5个参数 ​ 'platformVersion','deviceName'.'appPackage'.'appActivity'.'platform ...

  6. Android专项测试监控资源

    版本号 V 1.1.0 Android性能测试分为两类:1.一类为rom版本(系统)的性能测试2.一类为应用app的性能测试(本次主要关注点为app的性能测试) Android的app性能测试包括的测 ...

  7. Appium Android Bootstrap控制源代码的分析AndroidElement

    通过上一篇文章中<Appium Android Bootstrap源代码分析之简单介绍>我们对bootstrap的定义以及其在appium和uiautomator处于一个什么样的位置有了一 ...

  8. Appium Android Bootstrap源码分析之控件AndroidElement

    通过上一篇文章<Appium Android Bootstrap源码分析之简介>我们对bootstrap的定义以及其在appium和uiautomator处于一个什么样的位置有了一个初步的 ...

  9. Android APP 性能优化的一些思考

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

随机推荐

  1. 2019 DevOps 必备面试题——DevOps 理念篇

    原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君 ...

  2. Android Studio如何配置CURL指令一键打包apk上传至蒲公英

    Android Studio如何配置CURL指令一键打包apk上传至蒲公英 第一步:在所需要打包的模块build.gradle文件中加入如下代码: android{ buildTypes { //配置 ...

  3. linux学习(五)用户与组管理命令,以及用户信息文件解释

    目录 (1)/etc/passwd文件 (2)/etc/shadow passwd命令 userdel命令 usermod命令 groupadd @(用户与组管理命令) linux是一个多用户多任务的 ...

  4. RAC ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

    重启RAC时发现32004,后来才发现DG已经不存在了standby_archive_dest还在生效中,而background_dump_dest和user_dump_dest并没在pfile中出现 ...

  5. skip-broken to work around the problem rpm -Va --nofiles --nodigest

    清除yum缓存 yum clean all 重新安装,见结尾[root@localhost ~]# yum install libstdc++.so.6Loaded plugins: fastestm ...

  6. 2019-2020-1 20199305《Linux内核原理与分析》第三周作业

    操作系统的秘密 (一)计算机的三大法宝 存储程序计算机: 函数调用堆栈机制: 中断机制. (二)堆栈 (1)堆栈的作用 记录函数调用框架: 传递函数参数: 保存返回值的地址: 提供局部变量存储空间. ...

  7. typescript里一些有趣的点

    联合类型 在原生的JS里,null和undefined经常会导致BUG的产生, 在ts里,你又想用null,又担心出错的时候 你可以考虑用联合类型,当某值可能为 number或null,你可以声明它的 ...

  8. Java连载46-Java中的多态

    一.多态的语法 1.关于多态中涉及到几个概念 (1)向上转型(upcasting) 子类型转换为父类型,又被称为自动类型转换 (2)向下转型(downcasting) 父类型转换为子类型,又被称为强制 ...

  9. Java连载45-继承举例、方法覆盖

    一.Java语言中假设一个类没有显式的继承任何类,那么该类默认继承Java SE库中提供的java.lang.Object类 1.快捷键:Ctrl + shift + T:可以在Myeclipse中查 ...

  10. 使用layer.msg 时间设置不起作用

    前几天使用layer.msg设置时间后发现不起作用,这里记录一下. 开始出错误的代码: 后面查看文档后得知调用layer.msg后如果有后续操作需要写在function()中: //eg1 layer ...