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的Flask框架实现视频的流媒体传输
Mar 31 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
Python模拟三级菜单效果
Sep 11 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
Python判断以什么结尾以什么开头的实例
Oct 27 Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 Python
Python利用heapq实现一个优先级队列的方法
Feb 03 Python
python变量的存储原理详解
Jul 10 Python
pytorch实现mnist数据集的图像可视化及保存
Jan 14 Python
超全Python图像处理讲解(多模块实现)
Apr 13 Python
python开发实时可视化仪表盘的示例
May 07 Python
利用Python判断整数是否是回文数的3种方法总结
Jul 07 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 set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
PHP加密解密函数详解
2015/10/28 PHP
解决Laravel5.5下的toArray问题
2019/10/15 PHP
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
javascript获取本机操作系统类型的方法
2015/08/13 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
vue里input根据value改变背景色的实例
2018/09/29 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
Python迭代用法实例教程
2014/09/08 Python
python实现识别相似图片小结
2016/02/22 Python
python绘制双柱形图代码实例
2017/12/14 Python
python实现kNN算法
2017/12/20 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
拆迁委托协议书
2014/09/15 职场文书
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA