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判断质数(素数)的简单方法讲解
May 05 Python
使用Python中的tkinter模块作图的方法
Feb 07 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
Numpy数据类型转换astype,dtype的方法
Jun 09 Python
解决pandas使用read_csv()读取文件遇到的问题
Jun 15 Python
实例讲解python中的序列化知识点
Oct 08 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
python卸载后再次安装遇到的问题解决
Jul 10 Python
python实现udp传输图片功能
Mar 20 Python
django 扩展user用户字段inlines方式
Mar 30 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
Python基础之教你怎么在M1系统上使用pandas
May 08 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一些服务器端特性的配置加强php的安全
2006/10/09 PHP
php array_flip() 删除数组重复元素
2009/01/14 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
php之curl设置超时实例
2014/11/03 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
分享php邮件管理器源码
2016/01/06 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
解密效果
2006/06/23 Javascript
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
jQuery用unbind方法去掉hover事件及其他方法介绍
2013/03/18 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
大学生毕业求职简历的自我评价
2013/10/24 职场文书
写自荐信三大法宝
2014/01/24 职场文书
大学军训感言400字
2014/03/11 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
教师个人年终总结
2015/02/11 职场文书
安全第一课观后感
2015/06/18 职场文书
员工规章制度范本
2015/08/07 职场文书
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang
vue项目支付功能代码详解
2022/02/18 Vue.js