## adb简介及使用
**针对移动端 Android 的测试, adb 命令是很重要的一个点,必须将常用的 adb 命令熟记于心, 将会为 Android 测试带来很大的方便,其中很多命令将会用于自动化测试的脚本当中。**
**Android Debug Bridge**
**1 介绍** adb 其实就是 Android Debug Bridge, Android 调试桥的缩写,adb 是一个*C/S*架构的命令行工具,用于通过电脑端与模拟器或者真实设备交互。在某些特殊的情况下进入不了系统,adb就派上用场啦!下面我们学习一下常用的adb命令吧!
>[danger] ## 项目一:真机测试连接设备(由于不方便演示且不用设备连接方式有所不同 所以在本教程中仅仅演示连接方式,adb命令和模拟器是一样的)
1. 在桌面的应用列表中找到“设置”,点击进入。
![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/d400248ca608a50fe4b9f73810cec7f88b77ff99.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
2. 在列表中找到“关于”选项(一般在列表底部),点击进入。
![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/e6ae36066b0192dd4e0511471a87031c98c0f099.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
3. 找到“软件信息”选项,点击进入。
![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/359bee5e4a2379717258316c93196120a6cde399.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
4. 选择“更多”选项(有些设备的版本号可能在此目录下,请忽略此步骤)。
![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/bab5c45872dade49fb4a2ce226042e6816e9d599.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
5. 找到“内部版本号”或者“版本号”,快速连击数下(手机不同需要点击的次数可能也会有所不同),然后系统会有如图提示。
![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/d47cb624d8e9ccd21d23f6ed0e40102a05e2c999.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/a13bbe10bc33ec3885febe5b295f0c14c37b3c9e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
6. 这时回到设置主界面,发现“关于”上方出现了“开发人员选项”。
![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/87c8bf46b7b1eef9c4f8ebc8bfb33c4132ba329e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
7. 点击进入刚刚出现的“开发人员选项”,此功能默认为关闭,需要将右上角的开关打开。
![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/023cff37c97622bcb88068d3a05fd5460496289e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
8. 勾选“usb调试”,系统会例行提示,选择“确定”,此时您的安卓手机已打开了usb调试,您可以将手机连接到电脑进行数据备份、root、刷机等操作。
![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/b442d6d246fe474e12c6940bb0ef354f51b81f9e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
![安卓手机如何打开开发者模式进行usb调试](https://exp-picture.cdn.bcebos.com/b57fb6db574afa324ad98b4354b2dc19cf2c149e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fquality%2Cq_80)
>[danger] ## 项目二:使用模拟器测试连接设备
**2、连接设备**
打开cmd(如果使用MuMu自带adb,则cd C:\\Program Files (x86)\\Nemu\\vmonitor\\bin\\)
adb kill-server(MuMu自带:adb\_server.exe kill-server)
连接模拟器端口:adb connect 127.0.0.1:7555(MuMu自带:adb\_server.exe connect 127.0.0.1:7555)
列出已连接的设备:adb devices
![](https://img.kancloud.cn/1e/ae/1eae4a2ff95ba3b222e2496e41f98717_426x56.png)
注意:如果设备列表里没有显示127.0.0.1:7555设备,则可多次尝试adb kill-server和adb connect 127.0.0.1:7555连接,不同的模拟器端口号有所不同有的模拟器使用自带的adb命令可以直接连接成功的
**3、如何在连接多个设备下对MuMu模拟器进行操作**
命令格式:adb -s 模拟器端口 其他命令,如:adb -s 127.0.0.1:7555 shell pm list package -3
(注意:如果连接的设备数量超过1台必须在执行任何命令之前添加 此参数否则无法执行成功)
**4、安装与卸载apk**
在已连接MuMu设备下输入以下命令:
安装apk
adb install C:\\\\xx.apk
卸载apk
adb uninstall 包名
**5、获取已安装应用包名**
所有应用包名列表
adb shell pm list packages
第三方应用包名列表
adb shell pm list packages -3
系统应用包名列表
adb shell pm list packages -s
正在运行应用包名
adb shell dumpsys window | findstr mCurrentFocus
![](https://img.kancloud.cn/29/28/292859061ff0bdf2a1a92e5616e4a15d_568x131.png)
**6、获取已安装应用Activity类名**
adb logcat ActivityManager:I \*:s | findstr "cmp"后启动目标应用
如启动第五人格:
![](https://nie.res.netease.com/r/pic/20190129/0328e8b1-3297-4e69-8669-a2009bbc86ab.png)
第一个cmp=com.netease.dwrg/.Launcher则表示:应用包名/应用Activity类名,完整Activity名=com.netease.dwrg.Launcher
**7、启动应用**
adb shell am start -n 应用包名/应用Activity类名
如启动第五人格应用:
adb shell am start -n com.netease.dwrg/.Launcher
若想查看启动应用耗时,则可使用adb shell am start -W 应用包名/应用Activity类名,如:
![](https://img.kancloud.cn/52/00/52006f362ac9e865679ec5a72cb224b7_972x134.png)
**8、关闭应用**
adb shell am force-stop 应用包名
如关闭第五人格应用:
adb shell am force-stop com.netease.dwrg
**9、查看应用版本号**
adb shell dumpsys package 应用包名 | findstr version
如查看第五人格版本号:
![](https://img.kancloud.cn/27/9c/279c6a38c77e73ec408ffad54e2c300c_797x60.png)
**10、清理应用数据**
adb shell pm clear 应用包名
**11、模拟输入**
按键输入
adb shell input keyevent 键值
如:adb shell input keyevent 3表示按下HOME键,其他键值对应键位可网上搜索
字符输入
adb shell input text 字符
如:adb shell input text test则表示输入了test字符串
ps:字符不支持中文
鼠标点击
adb shell input tap X Y
X Y分别为当前屏幕下的x和y轴坐标值
鼠标滑动
adb shell input swipe X1 Y1 X2 Y2
X1 Y1 和X2 Y2分别为滑动起始点的坐标
**12、从电脑上传文件至模拟器**
adb push C:\\test.apk /data
**13、从模拟器复制文件至电脑**
adb pull /data/test.apk C:\\
**14、截图**
将模拟器当前显示截图
adb shell screencap /data/screen.png
将截图文件下载至电脑
adb pull /data/screen.png C:\\
**15、录制视频**
开始录制
adb shell screenrecord /data/test.mp4
结束录制
可按CTRL+C结束录制
导出视频文件
adb pull /data/test.mp4 C:\\
**16、查看设备信息**
设备型号
adb shell getprop ro.product.model
设备品牌
adb shell getprop ro.product.brand
设备处理器型号
adb shell getprop ro.product.board
设备安卓版本号
adb shell getprop ro.build.version.release
设备引擎渲染模式
adb shell dumpsys SurfaceFlinger|findstr "GLES"
**17、其他**
adb logcat 获取系统的比较及时的日志信息(是整个系统的日志所有程序包括系统程序)
1. dumpsys:
dumpsys命令可以提供非常多的系统信息。可以通过**adb shell service list**来查看dumpsys能提供查询信息的服务,常用的有:
![](https://img.kancloud.cn/f8/c3/f8c3860eb2c6a2fbf4ac58962cf2ecf6_856x393.PNG)
例如,要查看电池信息,命令行输入**adb shell dumpsys battery**,可以看到如下图:
![](https://img.kancloud.cn/a9/59/a9590e5b80b58f492c3c30f8d3ba603a_647x329.PNG)
* 使用**adb shell dumpsys activity**查看信息,会有很长的代码,分析其结构,可以把上述命令得到的信息拆分为:
```
dumpsys activity intents
dumpsys activity broadcasts
dumpsys activity providers
dumpsys activity permissions
dumpsys activity services
dumpsys activity recents
dumpsys activity activities
dumpsys activity processes
```
补充的几个常用的命令
adb shell am start -W 包名/xxxActivity
执行结果解释:
1、ThisTime:一般和TotalTime时间一样,除非在应用启动时开了一个透明的Activity预先处理一些事再显示出主Activity,这样将比TotalTime小。
2、TotalTime:应用的启动时间,包括创建进程+Application初始化+Activity初始化到界面显示。
3、WaitTime:一般比TotalTime大点,包括系统影响的耗时。
**【如何抓包】**
**步骤一,**分别下载最新版本的“fiddler”和”mumu模拟器”;
**步骤二,**启动 fiddler Tools -> Options -> Connections 勾选 allow remote computers to connect (允许远程计算机连接) 重启程序,切记:一定要重启;
![](https://img.kancloud.cn/62/1e/621e3453e0bdca1cf15c824c16c3f951_813x552.png)
![](https://img.kancloud.cn/97/8a/978a2b0eff9f68546f656cc6b891bfd1_813x552.png)
![](https://img.kancloud.cn/d0/cb/d0cbb84e81c137166e81689a3747b0af_813x552.png)
**步骤三,**查看IP,如果有虚拟网卡,所以需要ipconfig /all查看真实IP;
![](https://img.kancloud.cn/5b/ba/5bbacf56f1b51ef6fc586931d00b219c_513x383.png)
![](https://img.kancloud.cn/ce/2a/ce2a8957e91f9e57ed5364173a0bb1e5_820x349.png)
**步骤四,**启动mumu模拟器,设置代理;
![](https://img.kancloud.cn/81/2f/812f6349a4e9e407dbde4d6233458d35_1024x576.png)
![](https://img.kancloud.cn/03/fc/03fcd79821f69cacef19f52f01118eae_1024x576.png)
![](https://img.kancloud.cn/7a/a6/7aa62f14aac100f3da8b5831ff4a51aa_1024x576.png)
![](https://img.kancloud.cn/a0/c1/a0c1905e47cdacb7079b485172ae077a_1024x576.png)
![](https://img.kancloud.cn/55/79/5579dbd44b7588540555b520d75e5c66_1193x702.png)
**步骤五,**保存后即可操作。
![](https://img.kancloud.cn/6b/d6/6bd64a2687f4bcd75c516512a3c00bb0_1024x584.png)
>[danger] # Monkey的使用
Monkey是Android SDK提供的一个命令行工具,可以简单方便的发送伪随机的用户事件流,对Android APP做压力(稳定性)测试。主要是为了测试app是否存在无响应和崩溃的情况。
# 一、环境搭建
只要按照配置Android SDK环境和环境变量即可。
# 二、Monkey的使用
## 1、进入adb shell环境
## 最近经常提到命令一词那究竟什么事命令呢?其实任何一个命令都是其平台下个一个文件而已(win平台,Linux平台,Mac平台)那在我们学习monkey之前来找一下这个文件究竟在哪里?执行下面的命令试试看
```
find / -iname monkey
```
有时候在cmd窗口中输出的日志太多时可以使用重定向输出到文件中
```
命令 + >D://aa.txt
```
![](https://img.kancloud.cn/3f/6d/3f6d2d724bbeee606f3f23ec45d8dd27_620x373.png)
在windows环境中,进入DOS界面,在界面中,输入adb shell即可进入adb shell环境
(注意:adb shell服务使用的5037的端口,如果此端口被其他进程占用时,将不能正常启动adb shell,问题处理方法见:[启动adb shell报错](https://www.cnblogs.com/smallstone2018/p/10024438.html))
如:
![](https://img2018.cnblogs.com/blog/1459388/201811/1459388-20181127091437089-1048473024.png)
表示adb shell启动成功,shell@\*\*\*\*:/$中,\*\*\*\*表示设备id。$:表示普通用户;#表示root用户。
## 2、在adb shell环境下输入monkey的相应命令即可。
如:
![](https://img.kancloud.cn/c6/30/c6307f903831a9c6c538957673332076_259x27.png)
## 3、查看需要测试的包名
如果有root权限,可以进入/data/data/下使用ls/ls-a查看(不能使用ll)
如果无root权限,可以使用:pm list packages查看
(需要控制monkey执行的时间,可以通过设置执行时长/事件发送延时,计算出需要执行的次数。如:想要monkey运行24小时,每100毫秒发送一个事件。24\*60\*60\*1000/100=864000(次)
monkey -p \*\*\* --ignore-crashes --ignore-timeoutss --throttle 100 864000
表示:此次monkey将会运行24小时
# 三、Monkey的命令参数详细说明
monkey的命令参数分为:
基础参数:\-v、\-s、\-p、\--throttle等
调试选项:\--ignore-crashes等
事件类型:\--pct-touch等
![](https://img.kancloud.cn/6a/e1/6ae10d5dc14a4c049b2e1b76210e5f19_548x435.png)
## (一)基础参数
### 1、最简单的monkey命令(monkey 100)
表示:在设备上,针对整个系统发送100个伪随机事件。
![](https://img.kancloud.cn/a0/ea/a0eae2c097b1df83ac583f342ad794dc_553x109.png)
### 2、\-v参数
用于指定反馈信息级别(信息级别就是日志的详细程度)总共分为3级,默认为\-v(对应:level0)
\-v:只提供启动提示、测试完成提示和最终结果等少量信息。
\-v -v:较为详细的日志,包括每个发送到activity的时间信息。
\-v -v -v:最详细的日志,包括测试中选中/未选中的activity信息。
![](https://img.kancloud.cn/f4/42/f442f0c3d162ea4504bd89e219406f94_553x304.png)
![](https://img.kancloud.cn/ee/66/ee66c4df4937b31f9a5842ca732c55c6_553x297.png)
注意:在monkey测试完成时,最后一定会有一个:monkey finished标识。
### 3、\-p参数
在我们测试时,是针对具体的app进行测试的,所以在使用monkey测试时,我们需要提供具体的app包名给monkey,此时就需要用到参数\-p。在\-p后跟随app包名。
在测试时,可以不指定包名,此时monkey会在测试设备上随机启动app进行操作;如果只需要测试一个app,使用一个\-p即可;如果有多个app同时测试,可以直接使用\-p包名1 -p包名2指定具体要测试的app。
如:
![](https://img.kancloud.cn/f7/f4/f7f4d1d846eab56e857a1e65ee220e8a_553x374.png)
### 4、\-s参数
种子值(seed),因为monkey是发送的是伪随机的事件流,但是如果两次seed值相同,那两次monkey测试所产生的事件序列也相同。(所以一般在测试时要记录seed值,以防出现无响应和crash,不容易验证。)
注意:\-s需要跟在包名后,次数前
### 5、\--throttle参数
设置执行操作的延迟时间(毫秒)\--是指两个事件之间的间隔,如果没有指定此参数,会尽可能快的生成和发送事件。
## (二)调试选项
### 1、\--ignore-crashes
用于指定当应用程序崩溃时,Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,monkey依然会发送事件,直到事件计数完成。
### 2、\---ignore-timeouts
用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。
### 3、\--ignore-security-exceptionss
用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。
### 4、\--kill-process-after-error
用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。
### 5、\--monitor-native-crashes
用于指定是否监视并报告应用程序发生崩溃的本地代码
### 6、\--hprof
该选项设置后,将会在monkey事件序列前后立刻生成report,大小为大于5MB,存储在/data/misc
## (三)事件类型
```
public static final int FACTOR_TOUCH = 0;
public static final int FACTOR_MOTION = 1;
public static final int FACTOR_PINCHZOOM = 2;
public static final int FACTOR_TRACKBALL = 3;
public static final int FACTOR_ROTATION = 4;
public static final int FACTOR_PERMISSION = 5;
public static final int FACTOR_NAV = 6;
public static final int FACTOR_MAJORNAV = 7;
public static final int FACTOR_SYSOPS = 8;
public static final int FACTOR_APPSWITCH = 9;
public static final int FACTOR_FLIP = 10;
public static final int FACTOR_ANYTHING = 11;
```
monkey在发送伪随机事件时,是有不同的类型的。默认随机分配比例,也可以指定其百分比。如果不设置会是\--pct-anyevent为100%,也就是纯随机事件;如果配置了其他参数,但是不够100%,余下的百分比部分也是\--pct-anyevent事件。
如:
![](https://img.kancloud.cn/41/47/41473e85d889accf237f22cd1d7860ec_218x219.png)
目前共包含11中类型的事件。
分别为:
**0:触摸事件\--pct-touch**
调整touch触屏事件的百分比,触碰事件就是指在屏幕上的一个单独位置的一次点击/抬起的事件。
**1:滑屏事件\--pct-motion(手势事件)**
(手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯)
**2:--pct-pinchzoom**
**3:轨迹球\--pct-trackball**
(轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现在智能手机上已经没有了,就是类似手柄的方向键一样)
**4:旋转(\--pct-rotation)**
旋转屏幕
**5:--pct-permission**
**6:导航\--pct-nav**
(导航事件包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有)
**7:主导航\--pct-majornav**
调整主要导航事件的百分比(如中间键、取消、确定或菜单引发的图形接口的动作)
**8:系统按键\--pct-syskeys**
调整 “系统” 按键事件的百分比 (这些按键通常被保留,由系统使用,如 Home、Back、Start Call、End Call 及音量控制键)
**9:app切换\--pct-appswitch**
调整启动activity的百分比,在随机间隔中,执行一个startActivity()方法调用,作为一种最大化的覆盖安装包的所有的activity的方法
**10:键盘翻转(\--pct-flip)**
**11:随机\--pct-anyevent**
调整其他类型的事件的百分比,比如按键或其他不太常用到的一些事件的百分比
- 第一章-测试理论
- 1.1软件测试的概念
- 1.2测试的分类
- 1.3软件测试的流程
- 1.4黑盒测试的方法
- 1.5AxureRP的使用
- 1.6xmind,截图工具的使用
- 1.7测试计划
- 1.8测试用例
- 1.9测试报告
- 2.0 正交表附录
- 第二章-缺陷管理工具
- 2.1缺陷的内容
- 2.2书写规范
- 2.3缺陷的优先级
- 2.4缺陷的生命周期
- 2.5缺陷管理工具简介
- 2.6缺陷管理工具部署及使用
- 2.7软件测试基础面试
- 第三章-数据库
- 3.1 SQL Server简介及安装
- 3.2 SQL Server示例数据库
- 3.3 SQL Server 加载示例
- 3.3 SQL Server 中的数据类型
- 3.4 SQL Server 数据定义语言DDL
- 3.5 SQL Server 修改数据
- 3.6 SQL Server 查询数据
- 3.7 SQL Server 连表
- 3.8 SQL Server 数据分组
- 3.9 SQL Server 子查询
- 3.10.1 SQL Server 集合操作符
- 3.10.2 SQL Server聚合函数
- 3.10.3 SQL Server 日期函数
- 3.10.4 SQL Server 字符串函数
- 第四章-linux
- 第五章-接口测试
- 5.1 postman 接口测试简介
- 5.2 postman 安装
- 5.3 postman 创建请求及发送请求
- 5.4 postman 菜单及设置
- 5.5 postman New菜单功能介绍
- 5.6 postman 常用的断言
- 5.7 请求前脚本
- 5.8 fiddler网络基础及fiddler简介
- 5.9 fiddler原理及使用
- 5.10 fiddler 实例
- 5.11 Ant 介绍
- 5.12 Ant 环境搭建
- 5.13 Jmeter 简介
- 5.14 Jmeter 环境搭建
- 5.15 jmeter 初识
- 5.16 jmeter SOAP/XML-RPC Request
- 5.17 jmeter HTTP请求
- 5.18 jmeter JDBC Request
- 5.19 jmeter元件的作用域与执行顺序
- 5.20 jmeter 定时器
- 5.21 jmeter 断言
- 5.22 jmeter 逻辑控制器
- 5.23 jmeter 常用函数
- 5.24 soapUI概述
- 5.25 SoapUI 断言
- 5.26 soapUI数据源及参数化
- 5.27 SoapUI模拟REST MockService
- 5.28 Jenkins的部署与配置
- 5.29 Jmeter+Ant+Jenkins 搭建
- 5.30 jmeter脚本录制
- 5.31 badboy常见的问题
- 第六章-性能测试
- 6.1 性能测试理论
- 6.2 性能测试及LoadRunner简介
- 第七章-UI自动化
- 第八章-Maven
- 第九章-测试框架
- 第十章-移动测试
- 10.1 移动测试点及测试流程
- 10.2 移动测试分类及特点
- 10.3 ADB命令及Monkey使用
- 10.4 MonkeyRunner使用
- 10.5 appium工作原理及使用
- 10.6 Appium环境搭建(Java版)
- 10.7 Appium常用函数(Java版)
- 10.8 Appium常用函数(Python版)
- 10.9 兼容性测试