模拟机、真机
真机: 选择开发者模式 —》usb 调试 机型不同, 设置不一样
开源模拟器: 模拟真机操作(某一真机的特定版本上开发的)、回归测试/功能测试验证等使用
命令组成: adb [-d | -e | -s 设备号 ] 具体命令
-d 当前唯一通过 usb 连接的 android 设备为命令目标
-e 指定当前唯一运行的模拟器为命令目标
-s 指定相应的设备为命令目标!!!
安装/卸载包. 只有一个设备,没有添加其他的 -e 等
.apk文件。 应用宝中下载
普通安装 : adb install
卸载应用 . 不删除应用文件,保留缓存数据 : adb uninstall -k 包名
通过 adb shall 进入到手机命令环境
出现问题: 没有权限Android adb shell进入data目录,Permission denied 权限被拒绝.
!!!未解决:
包 : 是安卓应用的唯一标识
活动页 : Android 应用页面,一个页面就是一个Activity. (生命周期:创建 —— 》恢复——》暂停——》停止——》销毁)
获取当前页面名:打开手机微信的页面: (先打开页面)
adb shell “dumpsys window | grep mCurrentFocus”
拿到命令以后,可以知道 [ 包名 / 页面名] 然后要打开这个页面就是:
adb shell am start -n [包名 / 页面名]
用户角度:
使用时先点击图标,在进入启动页,在进入广告页 ,容易错失信息.所以要获取 启动页的信息: (后打开页面)
adb logcat ActivityManager:I | grep “cmp”
获取空白下面的第一条 cmp 后面的信息.验证是否抓取成功:adb shell am start -n [包名 / 页面名]
错误思想:是从启动页面开始,不是停留在启动页面!!!
显示所有应用 : adb shell pm list packages
显示系统自带应用 : adb shell pm list packages -s
自己安装的 : adb shell pm list packages -3
清除应用缓存数据 : adb shell pm clear <包名>
adb push 电脑路径 设备路径
adb shell 进入到手机环境, 操作到 sdcard (相当于外部外接的一个 sd 卡).
查看: adb shell ls /sdcard/
adb pull 设备路径 电脑路径
例如手机有错误截图 日志需要在电脑上查看, 先模拟在手机 scared 上创建一个日志,如下图:
V 明细 verbose 最低优先级 会打印所有的日志
D 调试 debug
I 信息 info
W 警告 warn 代码可能会有问题,抛出 warn 级别日志
E 错误 error
F 严重错误 fatal
S 无记载 silent 最高优先级,不输出任何内容
格式: 时间。 进程号。 线程号。级别。tag。 massage
安卓手机有日志缓存,会保存最近一段时间(多久?)的日志,当日志量超过缓存数就会被覆盖
(打开手机开发者选项,可以看到有个选项叫做“日志记录器缓冲区大小”,默认是256K。由上文所述,日志是循环写入环形缓冲区的。在通常情况下,写满时最旧的日志会被删除以给新输出的日志留内存空间。设置的越大就可以保存离当前时间越久远的日志。但相对地,设置的越大对内存的占用也越大,内存的可用空间也越少,请酌情修改)
使用不同颜色来打印每个优先级 : adb logcat -v color
将日志输出到文件中 : adb logcat -f <文件地址。手机端的>。 可以通过 pull 上传到电脑查看.
保存日志到电脑文件上 : adb logcat > ~/Downloads/android.log. > 表示重定向
清理已缓存的日志 : adb logcat -c
打印 warn 及以上级别的日志 : adb logcat ":w"
打印标签 ActivityManager (管理所有页面的标签)日志 : adb logcat ActivityManager:D ':S’ 打印所有
标签为 ActivityManager 的文件, 并只有 debug 级别以上的日志。’:S’ 表示把所有标签设置成为 silent 静默模式, 就可以只展示想要输出的一些日志。
加颜色 : adb logcat -v color ActivityManager:D ':S’
常见 Crashes/ANRs 日志分析 链接 : https://developer.android.com/topic/performance/vitals/crash
1、打开 指针位置设置: 手机开发者模式 —》输入—》指针位置。打开
2、执行 adb shell input
模拟点击事件 : adb shell input tap x坐标 y坐标 (注意手机屏幕上方会有坐标显示 左上角 0,0点 右下角 最大点)
模拟输入事件: adb shell input text 输入内容英文 ,但是需要先把光标放到输入框
模拟滑动事件: adb shell input swipe 起点x 起点y 终点x 终点y 2000 滑动很快 (2000ms 时间 要想准确,时间要慢)
模拟手机按键。查看所有按键 : https://developer.android.com/reference/android/view/KeyEvent
返回键 : adb shell input keyevent 4
home键 : adb shell input keyevent 3 应用在后台运行
音量放大 : adb shell input keyevent 24
音量放小 : adb shell input keyevent 25
查看当前系统 CPU 使用情况 : adb shell dumpsys cpuinfo 是某一时间之内的占有情况
查看当前系统的内存 : adb shell dumpsys meminfo 通过这个情况查看当前应用内存占用率。可以分析 物理内存、虚拟内存的占用量。
查看某个应用的内存 : adb shell dumpsys meminfo 应用名。 通过定期采集数据 来分析代码当中是否会有内存问题 例如内存泄漏 ( 内存长期占有量较高,没有及时回收 )
top 命令 : linux 使用 top 命令来获取性能指标的 ,安卓也可用
adb shell top 来获取各个系统进程占有情况(实时)
过滤 某个包的性能指标 : adb shell top | grep 包名
固定时间 每隔 1 s : adb shell top -d 1 | grep 包名
总结 : 都能获取 cpu 使用情况 ,二者区别 : adb shell dumpsys cpuinfo 可以获取一个时间段内的 ,一个平均值,可能不太准确, top 是实时的,更加精确.
查看电池电量 : adb shell dumpsys battery
1、什么是 monkey
是 google 提供的一个用于 稳定性与压力测试的命令行工具
2、为什么要对 app 进行压力测试
当大量用户同时访问网站服务器时,能够保证接口在大流量保持稳定,
随机性 : 随机去点击,
完整性 : 尽可能多的去点击多页面,实现一个更完整的测试
持续性 : 设置很大的事件数,就可以持续性的操作设备,只需收集日志去分析
3、monkey 命令格式
查看 : adb shell monkey
4、monkey 基本用法
首先确定手机设备连接,获取 app 包名.
执行命令 : adb shell monkey 参数 { 随机发送事件数}
添加事件数 : adb shell monkey 事件数
打印详细日志 : adb shell monkey -v 事件数。 -vv 更加详细的日志 -vvv 最全面的日志
停止条件 : 指令执行完成。 遇到崩溃/异常 杀掉进程
ctrl + c 只是在电脑上关掉了,杀掉进程:adb shell。 ps | grep monkey。 kill -9 进程号(第一个数)
运行某个包(对某软件测试) : adb shell monkey -p 包名 事件数
运行多个包 : adb shell monkey -p 包名 -p 包名 … - vvv 事件数
制定事件间隔时间 : --throttle 时间/ms monkey不管是否页面加载出来就开始操作,所以需要等待响应,更贴用户使用
设置种子数 : -s 种子数 指令是随机的,如有崩溃 复现较难.如果种子数一致,下一次会按照复现(相当于random理解)。
查看种子数就找执行后的结果中第一行 seed=…
包括 11 种事件:
设置事件比例 : --pct-touch 80 会默认分配 ,但是 比如某 app 点击事件较多,就可以设置点击比例大一点 80% 不超100%
忽略异常 : monkey就是想长时间运行, 可以在有异常的时候继续执行,如果遇到异常就可以保存到日志中
保存日志 :
法一 : adb shell monkey 100 后面加 > 文件名字.log。查看: cat 文件名.log 有大量无用日志,占用空间
法二 : adb logcat -v time ‘*:E’ > monkey.log 获取 error 级别日志
练习: