美文网首页
Android 自动化测试 adb

Android 自动化测试 adb

作者: tackor | 来源:发表于2017-01-02 08:14 被阅读1156次

    adb 介绍

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

    • 运行在 PC 端的 Client : 可以通过它对 Android 应用进行安装、卸载及调试
    • 运行在 PC 端的 Service : 其管理客户端到 Android 设备上 adb 后台进程的连接
    • 运行在 Android 设备上的 adb 后台进程, 可以通过该指令查看该进程adb shell ps | grep adbd windows 请使用 findstr 替代 grep

    注意: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"

    相关文章

      网友评论

          本文标题:Android 自动化测试 adb

          本文链接:https://www.haomeiwen.com/subject/xlhwvttx.html