zoukankan      html  css  js  c++  java
  • 测试人员一定要懂的ADB操作,赶紧来看一看~

    前言

    ADB,即 Android Debug Bridge (安卓调试桥)。它就是一个命令行窗口,用于通过电脑端与模拟器或者真机设备进行交互。

    对于Android开发和测试人员来说,它都是不可替代的强大工具。所以今天,我们将跟同学们一起来聊一聊一些常用的ADB操作和Airtest给我们封装好的一些ADB接口。

    一些使用ADB命令的场景

    作为一名测试人员,相信大家对使用ADB的场景都不陌生了。比如在做真机或者模拟器测试之前,我们常用 adb devices 命令去查看被测设备是否已经跟我们的电脑建立了连接:

    >>> adb devices
    List of devices attached
    PFT4PBLF75GQHYBM        device
    emulator-5554   device
    

    再比如,我们在使用Airtest进行测试自动化时,经常遇到ADB版本冲突的报错:

    raise AdbError(stdout, stderr)
    airtest.core.error.AdbError: stdout[] stderr[adb server version (36) doesn't match this client (40); killing...
    could not read ok from ADB Server
    

    而我们不清楚电脑里面那么多ADB,究竟哪些是40版本,哪些是36版本时,我们就可以使用 adb version 查看当前的ADB版本,然后将电脑里面所有的ADB替换成同一个版本,从而解决这个版本冲突的问题:

    >>> adb version
    Android Debug Bridge version 1.0.40
    Version 4986621
    Installed as C:Usersxiaojuanadb.exe
    

    常用的ADB操作及使用示例

    当然,除了上面已经提到的查询已连接的设备/模拟器命令 adb devices, 和查看ADB版本的命令adb version ,ADB操作可以做的事情还非常多:

    1.应用管理

    1)查看应用列表

    # 查看设备上的所有应用
    adb shell pm list packages
    
    # 查看设备上的第三方应用
    adb shell pm list packages -3
    
    # 查看设备上的系统应用
    adb shell pm list packages -s
    

    2)安装APK

    adb install "D:/demo/tutorial-blackjack-release-signed.apk"
    

    3)卸载应用

    adb uninstall com.netease.cloudmusic
    

    4)查看应用详细信息

    adb shell dumpsys package com.netease.cloudmusic
    
    2.文件管理

    1)复制设备里的文件到电脑

    # adb pull <设备里的文件路径> [电脑上的目录]
    adb pull /sdcard/sr.mp4 ~/tmp/
    

    2)复制电脑里的文件到设备

    # adb push <电脑上的文件路径> <设备里的目录>
    adb push ~/sr.mp4 /sdcard/
    
    3.模拟按键输入

    1)模拟电源键: adb shell input keyevent 26

    2)模拟HOME键: adb shell input keyevent 3

    3)模拟返回键: adb shell input keyevent 4

    4)点亮/熄灭屏幕:

    # 点亮屏幕
    adb shell input keyevent 224
    
    # 熄灭屏幕
    adb shell input keyevent 223
    

    5)模拟滑动解锁

    # 300 1000 300 500 分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标
    adb shell input swipe 300 1000 300 500
    

    6)输入文本

    adb shell input text airtest
    
    4.查看设备信息

    1)查看设备型号

    >>> adb -s PFT4PBLF75GQHYBM shell getprop ro.product.model
    OPPO A83
    

    2)查看屏幕分辨率

    >>> adb -s PFT4PBLF75GQHYBM shell wm size
    Physical size: 720x1440
    

    3)查看Android系统版本

    >>> adb -s PFT4PBLF75GQHYBM shell getprop ro.build.version.release
    7.1.1
    
    5.更多ADB命令详解

    想了解更多详细的ADB操作的同学,我们推荐大家阅读这篇GitHub文档:https://github.com/mzlogin/awesome-adb

    Airtest封装好的ADB接口及使用示例

    在Airtest库中,大部分的ADB操作我们已经帮大家封装好了,所以同学们可以不用再单独去执行ADB命令。

    举个简单的例子,利用Airtest封装好的ADB接口打印设备序列号和设备所有的第三方应用:

    image

    可以看到,我们只需要调用一些封装好的airtest接口,即可替代完整的ADB命令,另外在log查看窗的运行日志中,我们还可以看到这个接口实际执行的ADB命令:

    # android.get_default_device()对应的ADB命令
    adb.exe devices
    
    # android.list_app(third_only=True)对应的ADB命令
    adb.exe -s PFT4PBLF75GQHYBM shell pm list packages -3
    

    另外Airtest还有很多常用的封装好的ADB接口:

    1)返回应用的完整路径:path_app()
    android = Android()
    android.path_app("com.netease.cloudmusic")
    
    2)检查应用是否存在于当前设备上:check_app()
    android = Android()
    android.check_app("com.netease.cloudmusic")
    
    3)停止应用运行:stop_app()
    stop_app("com.netease.cloudmusic")
    
    # 启动应用:start_app()
    start_app("com.netease.cloudmusic")
    
    # 清除应用数据:clear_app()
    clear_app("com.netease.cloudmusic")
    
    4)安装应用:install_app()
    install(r"D:demo	utorial-blackjack-release-signed.apk")
    
    # 卸载应用:uninstall_app()
    uninstall("org.cocos2dx.javascript")
    
    5)关键词操作:keyevent()
    keyevent("HOME")
    keyevent("POWER")
    
    6)唤醒设备:wake()
    wake()
    
    7)返回HOME:home()
    home()
    
    8)文本输入:text()
    text("123")
    
    9)检查屏幕是否打开:is_screenon()
    android = Android()
    android.is_screenon()
    
    10)检查设备是否锁定:is_locked()
    android = Android()
    android.is_locked()
    
    11)获取当前设备的分辨率:get_current_resolution()
    android = Android()
    android.get_current_resolution()
    
    12)其它adb shell命令:shell()
    shell("ls")
    shell("pm list packages -3")
    

    image

    实际上,airtest的 shell() ,就是帮忙补充了 adb -s 手机序列号 shell 这一部分,后面的内容同学们就按正常shell指令来传就行了。

    13)更多Airtest封装好的ADB接口介绍

    若同学们需要了解更多详细的Airtest封装好的ADB接口介绍,可以到你本地的Airtest库里面查找这个文件查看:airtest/core/android/android.py


    AirtestProject官方答疑Q群:654700783

    Airtest官网http://airtest.netease.com/
    Airtest教程官网https://airtest.doc.io.netease.com/
    搭建企业私有云服务https://airlab.163.com/b2b

    呀,这么认真都看到这里啦,帮忙点个推荐支持一下呗,灰常感谢~

  • 相关阅读:
    批量新增百万条数据 十百万条数据
    sqlserver 组内排序
    EF ++属性会更新实体
    Entity Framework Core: A second operation started on this context before a previous operation completed
    abp Cannot access a disposed object. A common cause of this error is disposing
    abp xunit Can not register IHostingEnvironment. It should be a non-abstract class. If not, it should be registered before.”
    hangfire enqueued but not processing(hangfire 定时任务入队列但不执行)
    EF 更新实体 The instance of entity type 'BabyEvent' cannot be tracked because another instance
    datatable to entiy list 不支持可空类型和枚举类型
    webapi 设置不显示接口到swaggerUI
  • 原文地址:https://www.cnblogs.com/AirtestProject/p/14177833.html
Copyright © 2011-2022 走看看