appium---Android app资源监控
我们在做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资源监控的更多相关文章
- jenkins+appium android app自动化测试
jenkins安装 pytest+jenkins安装+allure报告 新建任务 其他默认,保存 立即构建 test_login.py from src.pages import login_page ...
- Android App资源的查找过程分析
Android资源管理框架实际就是由AssetManager和Resources两个类来实现的.其中,Resources类可以根据ID来查找资源,而AssetManager类根据文件名来查找资源.事实 ...
- Appium+Python app自动化测试之脚本启动和停止Appium服务
研究了一段时间的Appium android app的自动化测试,工作中需要连接多台手机终端同时执行测试用例,我实现的方式是获取用例中需要执行用例的设备id个数以及实际连接到的设备数(通过adb de ...
- Appium+python自动化(三十四)- 有图有真相,很美很精彩 - 屏幕截图和Android APP类型简介(超详解)
简介 在实际自动化项目运行过程中,很多时候App可以会出现各种异常,为了更好的定位问题,除了捕捉日志我们还需要对运行时的设备状态来进行截屏.从而达到一种“有图有真相”的效果. 截图方法 方法1 sav ...
- appium启动app(android)
android Appium 启动APP至少需要5个参数 'platformVersion','deviceName'.'appPackage'.'appActivity'.'platform ...
- Android专项测试监控资源
版本号 V 1.1.0 Android性能测试分为两类:1.一类为rom版本(系统)的性能测试2.一类为应用app的性能测试(本次主要关注点为app的性能测试) Android的app性能测试包括的测 ...
- Appium Android Bootstrap控制源代码的分析AndroidElement
通过上一篇文章中<Appium Android Bootstrap源代码分析之简单介绍>我们对bootstrap的定义以及其在appium和uiautomator处于一个什么样的位置有了一 ...
- Appium Android Bootstrap源码分析之控件AndroidElement
通过上一篇文章<Appium Android Bootstrap源码分析之简介>我们对bootstrap的定义以及其在appium和uiautomator处于一个什么样的位置有了一个初步的 ...
- Android APP 性能优化的一些思考
说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...
随机推荐
- cgo在mac上编译
用了cgo mac上编译不过的可以试试下面的方法 ../../pkg/mod/github.com/mattn/go-sqlite3@v1.:: fatal error: 'stdlib.h' fil ...
- JNDI学习总结(一)——JNDI数据源的配置
原文地址:http://www.cnblogs.com/xdp-gacl/p/3951952.html 一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动 ...
- Saltstack_使用指南15_多master
1. 主机规划 实现2个master,当这两个master运行时都可以向minion发送命令. salt 版本 [root@salt100 ~]# salt --version salt (Oxyge ...
- linux学习(十)Shell中的控制语句
目录 1. 条件测试语句 1.1 test语句 1.2[]语句 1.3文件测试 1.4字符串测试 1.5数值测试 1.5逻辑操作符 @(Shell中的控制语句) 1. 条件测试语句 测试语句十Shel ...
- benchmarks (主要用于分布式文件系统性能测试)
最近进行学习过程中,遇到一些可以用得上的benchmark,在这里进行简要记录:之后估计会用到 TensorFlow benchmarks https://github.com/tensorflow/ ...
- Error 1327 Invalid Drive 的解决办法
出现场景: 当我在安装STM32公司的 STM32 ST-LINK Utility v4.5.0 软件时,弹出了这个错误.弹框的内容大体是说找不到D盘,这里忘记截图了. 我的电脑的硬盘是我另一 ...
- Yet Another Broken Keyboard
time limit per test2 secondsmemory limit per test256 megabytesinput: standard inputoutput: standard ...
- 【洛谷4173】残缺的字符串(重拾FFT)
点此看题面 大致题意: 有一个长度为\(n\)的字符串\(A\)和一个长度为\(m\)的字符串\(B\),其中存在一些字符'*'可以与任意字符匹配.求\(B\)中所有满足条件的位置,使得从这一位置开始 ...
- javascript中优雅的处理async和await异常
let handler = async function(needErr) { return new Promise((resolve, reject) => { if (needErr) { ...
- 使用pymysql模块进行封装,自动化不可或缺的数据库校验
import pymysql class HandleMysql: ''' 定义一个mysql处理类 ''' def __init__(self, hostname, username, passwo ...