什么是adb(Android debug bridge)
Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。
备注:adb 只能操作Android
开启开发者选项
常用命令
adb 也可以连接手机。手机需要开启开发者选项,以及usb调试功能。
adb devices 查看连接的设备
adb devices
结果中有 127.0.0.1:62001
表示设备的串号。
- device 表示连接成功。
adb shell 进入手机
在手机中可以执行一些常用的Linux命令,android 系统内核是Linux系统。所以支持部分Linux命令。
exit 可以退出adb shell
adb push电脑文件上传到手机
adb push C:\Users\zengy\Desktop\01.png /sdcard/DCIM
- C:\Users\zengy\Desktop\01.png 电脑上的文件路径
- /sdcard/DCIM 手机上的文件路径
adb pull 从手机里下载文件到电脑
adb pull /sdcard/DCIM C:\Users\zengy\Desktop
adb install 安装app
adb install C:\Users\zengy\Desktop\app-release.apk
查看手机上安装的所有软件
adb shell pm list packages
默认会把本机安装的app已经自己安装的第三方app信息都会显示出来。
查看第三方app
adb shell pm list packages -3
卸载app
adb shell pm uninstall 包名
monkey 测试
monkey可以模拟当app 被胡乱操作的时候的场景。
adb shell monkey -p org.cnodejs.android.md 10000
- -p 指定运行app
- 10000 随机操作10000个事件
monkey测试主要测试app的稳定性,monkey执行的时候会做很多随机的动作,如果应用在胡乱操作的时候闪退或者崩溃。所以需要提测。
monkey运行出错
当app出现闪退的时候,app会报错。
adb shell monkey -p com.fanmao.crashtest 1000
// CRASH: com.fanmao.crashtest (pid 9796)
// Short Msg: android.content.ActivityNotFoundException
// Long Msg: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.example.app.mainactivity2 }
// Build Label: samsung/dream2qltezh/dream2qltechn:7.1/N2G48H/G9550ZHU1AQEE:user/release-keys
// Build Changelist: 700210421
// Build Time: 1619015543000
// android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.example.app.mainactivity2 }
// at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1809)
// at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523)
// at android.app.Activity.startActivityForResult(Activity.java:4238)
// at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)
// at android.app.Activity.startActivityForResult(Activity.java:4196)
// at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)
// at android.app.Activity.startActivity(Activity.java:4535)
// at android.app.Activity.startActivity(Activity.java:4503)
// at com.fanmao.crashtest.MainActivity$1.onClick(MainActivity.java:22)
// at android.view.View.performClick(View.java:5638)
// at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992)
// at android.view.View$PerformClick.run(View.java:22430)
// at android.os.Handler.handleCallback(Handler.java:751)
// at android.os.Handler.dispatchMessage(Handler.java:95)
// at android.os.Looper.loop(Looper.java:154)
// at android.app.ActivityThread.main(ActivityThread.java:6198)
// at java.lang.reflect.Method.invoke(Native Method)
// at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)
// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)
//
** Monkey aborted due to error.
Events injected: 70
## Network stats: elapsed time=796ms (0ms mobile, 0ms wifi, 796ms not connected)
** System appears to have crashed at event 70 of 1000 using seed 1634205140279
上面就是报错信息,只需将报错信息发给开发即可。
常用的monkey命令参数
adb shell monkey -s 1634159219306 --throttle 500 -p org.cnodejs.android.md -vv 100
—throttle 500 每两个事件中间的延迟时间未500毫秒
-s 1634159219306 种子值,保证每次生成的序列一样
-p org.cnodejs.android.md 运行的app
-vv 显示详细的日志
100 运行次数
更多adb命令
面试问题
手机端你们平时是怎么测试的?
平时最主要的还是做手工功能测试。以功能为主,
也会使用monkey 跑一下Android app的稳定性。
(注意:monkey 不能跑IOS)。