python+adb+monkey实现Rom稳定性测试详解


Posted in Python onApril 23, 2020

我为什么做这项工作?

其实这项工作是另一位同事在做,过程中发下了一些问题,但是种种原因log和数据都没有收集到,无法进行分析。然后我就接手了,负责复现她发现的问题并提供log和数据给开发分析。

需要测试的是一个什么样的功能?

需求是这样的:开发在Framework层增加了app应用权限管控(Android11中基本权限、自动以权限、AIDL),服务端可以通过下发指令到手机,控制app可以访问及不能访问的权限。同时安装app也需要对签名做校验。

该如何开始这项工作呢?

不用多言,自动化是必须的,但是如何实施呢? 首先,client端是需要接收指令的,是个指令不能人工操作下发,好在我们有web管理页面,通过按键精灵录屏可实现不停的向

client下发指令(本来想用selenuim,但是时间关系就使用按键精灵吧),这样就解决了后台人工不干预的需求。但是Client端呢?

因为我们做的是app的权限拦截,那就必须有app啊,我们选了30个常用的app和一些测试demo,那么问题来了,这些app的安装卸载总不能手工进行吧。答案是肯定的,可以通过python+adb install/uninstall,进行安装和卸载。安装就不说了,无非就是通过python获取apk路径然后执行adb install 命令。卸载是需要传入包名的,如何获取系统已经安装应用的包名呢? pm list package -3 + awk 命令就可以将apk的包名过滤出来了,然后在使用adb uninstall卸载就行了。到此 apk的安装卸载自动化就完成了,那么新的问题又来了

应用要使用某项权限肯定要先启动啊,如何一一的启动这些app呢?

这里可能会有人想到使用am命令,但问题是am启动应用需要知道MainActivity的名称,虽然通过工具可以一一获取到,但是这项工作未免太耗时。所以这里我们不使用am来启动应用,换成monkey启动应用,这样只需要传入包名即可。

OK,安装卸载、应用启动的思路都有了,下面就需要收集log和数据了,可以使用python函数subprocess.Popen()函数将logcat命令传入(logcat过滤log方法不再详述),这样测试过程就可以一直输入log。因为我复现的是黑屏问题,所以测试过程中还需要收集Cpu和Memory信息,同样的使用python定时执行命令dumpsys meminfo / cpuinfo来获取。

脚本执行结果:

1、第一次执行,在dump的内存信息中发现了 我们的一个本地层进程出现内存泄露,我们怀疑是这个泄露引起的黑屏,我们的开发进行了修改。

2、第二轮测试中,同样的发现了黑屏,但已经不是内存泄露引起的了,而是Binder挂了(我们修改过系统的Binder),而且只有360手机卫士和腾讯手机管家这样的安全应用在设备上长时间运行才会出现这个问题,所以选择什么样的app也需要根据功能和业务而定,不能盲目。

PS:这项测试工作我觉得是个很好的积累,所以就写下来;以后再遇到类似的可以拿出来参考。

补充知识:Shell脚本实战之生成日志文件

1.代码如下

#!/bin/bash
today=$(date +%y%m%d)
#the cause to use the command ls is in that to bulit a new #file,not in that the command ls.
ls /usr/bin -al > $today.log

以上这篇python+adb+monkey实现Rom稳定性测试详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python命令行参数解析OptionParser类用法实例
Oct 09 Python
基于python实现微信模板消息
Dec 21 Python
Python面向对象之继承代码详解
Jan 29 Python
python绘制直线的方法
Jun 30 Python
python 不以科学计数法输出的方法
Jul 16 Python
详解Python中的type和object
Aug 15 Python
pycharm访问mysql数据库的方法步骤
Jun 18 Python
python3获取当前目录的实现方法
Jul 29 Python
python生成器用法实例详解
Nov 22 Python
使用pandas的box_plot去除异常值
Dec 10 Python
Python迭代器协议及for循环工作机制详解
Jul 14 Python
Matplotlib animation模块实现动态图
Feb 25 Python
通过python调用adb命令对App进行性能测试方式
Apr 23 #Python
python 将视频 通过视频帧转换成时间实例
Apr 23 #Python
Windows下Anaconda和PyCharm的安装与使用详解
Apr 23 #Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
Apr 23 #Python
Django调用百度AI接口实现人脸注册登录代码实例
Apr 23 #Python
Anaconda和ipython环境适配的实现
Apr 22 #Python
Django框架获取form表单数据方式总结
Apr 22 #Python
You might like
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
PHP处理excel cvs表格的方法实例介绍
2013/05/13 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
js相册效果代码(点击创建即可)
2013/04/16 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
python append、extend与insert的区别
2016/10/13 Python
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
Python实现获取本地及远程图片大小的方法示例
2018/07/21 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
python lambda表达式(匿名函数)写法解析
2019/09/16 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
企业统计员岗位职责
2013/12/13 职场文书
体育部部长竞选稿
2015/11/21 职场文书
Python打包为exe详细教程
2021/05/18 Python
源码安装apache脚本部署过程详解
2022/09/23 Servers