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 lambda和Python def区别分析
Nov 30 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
Jul 22 Python
谈一谈基于python的面向对象编程基础
May 21 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
Mar 06 Python
pyqt5数据库使用详细教程(打包解决方案)
Mar 25 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
Jun 02 Python
为什么相对PHP黑python的更少
Jun 21 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 Python
python基于turtle绘制几何图形
Jun 15 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和js中json的编码和解码
2016/10/24 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
2017/08/10 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
webpack 1.x升级过程中的踩坑总结大全
2017/08/09 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
python生成日历实例解析
2014/08/21 Python
简析Python的闭包和装饰器
2016/02/26 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
Python批量将图片灰度化的实现代码
2020/04/11 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
花店创业计划书范文
2014/02/07 职场文书
《这儿真好》教学反思
2014/02/22 职场文书
小学三好学生事迹材料
2014/08/15 职场文书
教师节活动总结
2014/08/29 职场文书
物价局领导班子四风问题整改措施
2014/10/26 职场文书
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers