Android 自动化测试 adb

2017-01-02  本文已影响1156人  tackor

adb 介绍

adb 其实就是 Android Debug Bridge, Android 调试桥的缩写,adb 是一个 C/S 架构的命令行工具,主要由 3 部分组成:

注意:adb 使用的端口号,5037


adb 命令

adb 命令一般格式为:
adb 【-e | -d | -s<设备序列号>]<子命令>

1.帮助

adb help

2.获取设备列表以及设备状态

adb devices

3.获取设备状态

adb get-state
adb -s 设备名称 get-state      // 多设备时,获取指定设备状态

设备状态有3种:

    * device: 设备正常连接
    * offline: 连接出现异常
    * unknown: 没有连接设备

4.结束/启动adb服务

adb kill-server     // 结束adb服务
adb start-server    // 启动adb服务

5.日志相关 (用于分析错误)

adb logcat         // 打印Android系统日志
adb bugreport      // 打印dumpsys、dumpstate、logcat的输出
adb bugreport > d:\bugreport.log     // 输出比较多,建议重定向到一个文件中

6.安装卸载apk

adb install         // 后面跟 apk文件名, 覆盖安装使用参数 -r
adb install 相对路径    // 如: adb install Desktop/app-debug.apk
adb -s 设备名称 install apk绝对路径     // 多个设备同时存在时,指定设备进行apk安装
adb -s 设备名称 install -r apk绝对路径     // 多个设备同时存在时,指定设备进行apk 覆盖安装(覆盖之前的版本)

adb uninstall      // 卸载应用,后面跟的参数是应用的包名,请区别于 apk 文件名,卸载时保存数据和缓存使用参数 -k
adb -s 设备名称 uninstall 应用的包名   // 多个设备同时存在时,指定设备进行卸载应用

7.文件处理

adb pull           // 将 Android 设备上的文件或者文件夹复制到本地, 如:
                          例如复制 Sdcard 下的 pull.txt 文件到 D 盘:
                          adb pull sdcard/pull.txt d:\
                          
                          如果需要重命名为 rename.txt:
                          adb pull sdcard/pull.txt d:\rename.txt     // 与D盘同级(\)
                          adb pull sdcard/screen.png /Users/tacker/Desktop/screen.png    // 在Desktop 下面(/)

                注意:  注意权限,复制系统权限的目录下的文件,需要 root ,并且一般的
                 Android 机 root 之后并不能使用命令去复制,而需要在手机上使用类似于
                  RE 的文件浏览器,先对系统的文件系统进行挂载为可读写后,才能在手机上复
                  制移动系统文件,这里推荐使用小米手机的开发版本,IUNI 也可以
                  
db push           // 推送本地文件至 Android 设备, 例如:
                        adb push d:\push.txt sdcard/

8.重启设备

adb reboot        // 重启设备,进入fastboot模式
adb recovery      // 重启设备, 进入recovery模式(刷机)
adb shell input keyevent 26      // 唤醒设备

9.将宿主机上的某个端口重定向到设备的某个端口

adb forward tcp:1314 tcp :8888

执行该命令后所有发往宿主机 1314 端口的消息、数据都会转发到 Android 设备的 8888 端口上,
因此可以通过远程的方式控制 Android 设备。

10.远程连接 Android 设备

方法一:
前提: 手机, PC 处于相同的网络下, 手机root, 安装应用adbWireless。
步骤:
1. 启动adbWireless ,点击中间按钮。
2. adb connect 192.168.1.102 // 后面的连接是adbWireless 给的
3. 即可通过无线的方式连接手机,缺点是速度比较慢

方法二: (上面方法的补充)
前提: 手机, PC 处于相同的网络下
步骤:
1. 首先用USB链接上手机
2. adb tcpip 5555
3. adb connect 192.168.1.102 // 后面的连接是adbWireless 给的
4. 即可通过无线的方式连接手机,缺点是速度比较慢


adb shell 命令

adb 命令是 adb 这个程序自带的一些命令,而 adb shell 则是调用的 Android 系统中的命令,这些 Android 特有的命令都放在了 Android 设备的 system/bin 目录下

pm 命令

Package Manager , 可以用获取到一些安装在 Android 设备上得应用信息

adb shell pm list package          // 列出安装在设备上的应用
adb shell pm list package -s       // 列出系统应用
adb shell pm list package -3       // 列出第三方应用
adb shell pm list package -f       // 列出应用包名以及对应的apk 名称及存放位置
adb shell pm list package -i       // 列出应用包名及其安装来源
adb shell pm list features         // 列出硬件信息

命令最后增加 FILTER:过滤关键字,可以很方便地查找自己想要的应用,例如: 
adb shell pm list package -f -i tencent  // 可以找到tencent 相关的应用

adb shell pm path com.tencent.mobileqq  // 列出对应包名 .apk的位置

adb shell pm list instrumentation       // 列出含有单元测试 case 的应用,后面可跟参数 -f (与 pm list package 中一样),以及 [TARGET-PACKAGE]

adb shell pm dump 后跟包名         // 列出指定应用的 dump 信息,里面有各种信息,自行查看

adb shell pm install apk文件名     // 安装Apk, 区别于 adb install 安装,
目标apk 存放于PC端, 使用adb install 安装
目标apk 存放于Android 设备上, 使用pm install 安装

adb shell pm unistall 应用的包名      // 卸载应用,注意同adb uninstall 后面的参数是应用的包名

adb shell pm clear 包名                  // 清楚应用的数据

adb shell pm set-install-location       // 设置应用安装位置
adb shell pm get-install-location       // 获取应用安装位置
[0/auto]:  默认为自动
[1/internal]:  默认为安装在手机内部
[2/external]:  默认安装在外部存储

am命令

am命令 主要负责应用内部

adb shell am start -n com.android.camera/.Camera        // 启动系统相机的Camera Activity (实践中发现 包名 com.android.camera 如果是自己的项目可以在build.gradle 中找到, .Camera 可以在manifest 中查找, 暂时还未实践在他人的apk中如何查找)
adb -s 设备名称 shell am start -n com.android.camera/.Camera   // 多设备时,启动系统相机的Camera Activity, 其他操作同理
adb shell am start -S com.android.camera/.Camera        // 先停止相机应用,在启动相机应用(S 大写)
adb shell am start -W com.android.camera/.Camera        // 等待应用完成启动
adb shell am start -a android.intent.action.VIEW -d http://testerhome.com      // 启动默认浏览器打开一个特定网页
adb shell am start -a android.intent.action.CALL -d tel:10086         // 启动拨号器拨打 10086
adb shell am instrument                   // 启动一个 instrumentation , 单元测试或者 Robotium 会用到
adb shell am monitor                      // 监控 crash 与 ANR
adb shell am force-stop  包名              // 结束应用
adb shell am startservice  服务(类似于启动Activity)   // 启动服务
adb shell am broadcast  广播(类似于Activity)          // 启动广播

Input

这个命令可以向 Android 设备发送按键事件

adb shell input text abcd1234                 // 发送文本内容,不能发送中文, 且键盘要是英文键盘
adb shell input keyevent KEYCODE_HOME    // 发送按键事件(模拟 按下 Home键)
adb shell input tap 500 300              // 对屏幕发送点击事件(位置)
adb shell input swipe 300 100 1000 600   // 滑动事件, 需要注意的是在小的距离内,在较长的持续时间内进行滑动,最后表现出来的结果就是长按动作
adb shell screencap -p /sdcard/screen.png     // 截屏并保存到sdcard 目录下
adb shell screenrecord sdcard/record.mp4      // 录屏,结束后保存在sdcard 中,ctrl + c 结束录制

uiautomator

执行 UI automation tests , 获取当前界面的控件信息

adb shell uiautomator dump                 // 获取空间信息
adb shell uiautomator runtest              //

ime

输入法相关

adb shell ime list -s                     // 列出设备上的输入法
adb adb shell ime set com.baidu.input_mi/.ImeService      // 选择输入法(这里设置为百度输入法)

wm

设备相关

adb shell wm size                    // 获取设备分辨率 

补充:

补充连接: <a href='http://www.cnblogs.com/bravesnail/articles/5850335.html', target='__blank'>http://www.cnblogs.com/bravesnail/articles/5850335.html</a>

在 PC 端执行 monkey 命令,将信息保存至 D 盘 monkey.log,会这么写:

adb shell monkey -p com.android.settings 5000 > d:\monkey.log

在 PC 端执行 monkey 命令,将信息保存至手机的 Sdcard,可能会这么写:

这样写会报错 adb shell monkey -p com.android.settings 5000 > sdcard/monkey.log  这样写会报错
正确的如下:
adb shell "monkey -p com.android.settings 5000 > sdcard/monkey.log"
上一篇下一篇

猜你喜欢

热点阅读