• adb&monkey


    目录

    一、adb

    1.1 win 安装adb

    1.2 mac使用homebrew安装adb

    1.3 adb常用命令

    二、查看应用的包名papackage与页面的Activity

    三、monkey

    3.1 monkey命令模版

    3.2 seed值,标记

    四、monkey日志分析

    4.1  ANR 应用程序无响应对话框

    4.1.1 ANR分析:

    4.1.2   traces.txt 文件

    4.2  Monitor&DDMS

    5.2  Exception & Crash

    5.3 monkey日志分析步骤

    六、MonkeyScript脚本

    6.1  MonkeyScript 常用命令

    6.2   MonkeyScript 脚本编写

    七、MonkeyRunner介绍

    7.1 环境搭建&启动:

    ​编辑

    7.2 MonkeyRunner API介绍&常用命令

    7.2.1 MonkeyRunner类

    7.2.2 MonkeyDevice类

    7.2.3 MonkeyImage类

    八、MonkeyRunner脚本实战

    8.1、测试场景

    8.2、思路分析

    8.3、代码(考研帮)

    九、性能脚本

    十、python adb交互

    十一、python adb 工具编写

    十二、编写bat工具


    一、安装Android studio

    1.1  mac电脑安装Android studio

    mac电脑安装Android studio_遛马的博客-CSDN博客_mac安装android studio

    1.2 

    一、adb

    adb全称是Android Debug Bridge,它是一个命令行工具,通过它可以与Android设备进行交互,可以进行常见的安装/卸载app、打开app、查看app的日志等操作。

    官网:Android Debug Bridge (adb)

    1.1 win 安装adb

    通过Android sdk安装,

    1.下载AndroidSDK

    下载地址:

    www.android-studio.org

    2.配置adb环境变量。

    具体的安装方式自行百度。

    1.2 mac使用homebrew安装adb

    MAC下使用homebrew安装adb

    如果已经安装了homebrew,就不用执行安装homebrew命令了


    安装homebrew:

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    

    安装adb:

    使用以下命令,如果第一个命令报错,就使用第二个。

    brew cask install android-platform-tools
    
    brew install android-platform-tools --cask

    安装成功:

    再次输入adb devices 显示安装成功

    其他mac安装方式:

    https://www.jianshu.com/p/744fc5946627

    1.3 adb常用命令

    1. 1.adb常用命令
    2. #连接手机
    3. adb devices -l
    4. #安装APP
    5. adb install name.apk
    6. #卸载APP
    7. adb unnistall 包名
    8. #解锁屏幕
    9. adb shell input keyevent 26
    10. #点击触屏
    11. adb shell input tap 500 500
    12. #输入字符
    13. adb shell input text abc
    14. #登录android
    15. adb shell
    16. #从Android拷贝资料到PC
    17. adb pull /sdcard/DCIM/Camera/文件名 /Users/lenov
    18. #从PC端拷贝资料到设备
    19. adb push /Users/lenov/文件名 //sdcard/DCIM/Camera

    二、查看应用的包名papackage与页面的Activity

    1、aapt

    aapt dump badging apk名称

    2、adb logcat 获取

    adb shell "logcat | grep START"

    输入这个命令,然后去启动app。

     3.dumpsys

    (1)启动要查看的程序;

    (2)命令行输入:adb shell dumpsys window w |findstr \/ |findstr name=

    (3) 命令输入:adb shell dumpsys window | findstr mCurrentFocus  

    命令查看当前运行的包名和Activity

    三、monkey

    3.1 monkey命令模版

    一般在做monkey时,使用以下这个命令就可以了,日志尽量详细一点,将来好分析定位问题。

     adb shell monkey -p packagename --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000>c:\test.log

    --throttle 500

    每个时间间隔500毫秒

    --ignore-crashes

    忽略crash,当指定的应用程序发生崩溃时(Force&Close错误),Monkey继续执行事件。

    --ignore-timeouts

    忽略超时,当指定的应用程序发生ANR 错误时,Monkey事件继续执行。

    --ignore-security-exceptions

    当应用程序发生许可错误时(如证书许可,网络许可等),Monkey继续执行事件。

    --ignore-native-crashes

    忽略本地的crashes

    --monitor-native-crashes

    监视并报告应用程序发生崩溃的本地代码

    --kill-process-after-error 

    当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进行)

    -v

    日志详细程度,三个-v,是最详细的。

    为什么要加忽略:

    如果不忽略crash,出现crash,monkey就停了。

    3.2 seed值,标记

    如果seed值相同,则两次执行monkey的事件顺序是相同的。

    应用场景:

    我们在执行monkey时,给一个seed标记。等我们下次需要复现上一次的执行过程时,我们执行monkey命令,带上这个标记,则这一次执行的事件顺序与上一次事件顺序是一致的,就可以复现上一次的步骤。

    注意:

    两次执行命令,使用相同的seed值,执行过程并不是严格意义上一致的,可能会有不一致的地方,不过这个不重要,我们可以忽略这个。

    示例:

    第一次执行,1000次。seed值为666

     adb shell monkey -p packagename -s 666 1000

    第二次执行,为了与上一次执行的逻辑一样,同样适用666为seed值。

     adb shell monkey -p packagename -s 666 1000

    seed值,如果执行的命令里不指定,在monkey执行时,会生成一个seed值。

    四、monkey日志分析

    4.1  ANR 应用程序无响应对话框

    ANR(Application Not Response)是指在Android上,应用程序响应不够灵敏时,系统会向用户显示的一个对话框。 用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。

    4.1.1 ANR分析:

    教你如何 分析 Android ANR 问题 - 走看看

    1、安装可以引起ANR的app

    2、执行压力命令

    3、分析ANR的Exception

    1、查看monkey的log

    2、/data/anr/traces.txt

    3、查看log cat日志ANR

    1、anr发生的页面

    2、每个进程的CPU 利用率

    3、

    4.1.2   traces.txt 文件

    adb shell

    进入linux 系统

    在/data/anr/目录下,有个traces.txt文件

    取出这个文件,在电脑终端执行命令

    adb pull /data/anr/traces.txt .

     分析这个文件

    4.2  Monitor&DDMS

    Monitor 集成了DDMS,也可以单独使用DDMS

    在终端输入Monitor ,启动Monitor

    看log cat日志

     集成了DDMS

     1、1点击,出现log cat

    2、双击log cat放大

    5.2  Exception & Crash

    异常Exception 通常伴随着Crash

    5.3 monkey日志分析步骤

    1、按关键字进行搜索,ANR、Exception、Crash

    2、找到有问题的地方,查看上下文信息

    3、注意第一个switch上下文信息,有没有报错之类的

    4、查看monkey里面出错钱的一些事件动作,可以手动执行该动作

    5、进行问题复现,可以使之前执行的monkey命令再执行一遍,注意seed值要一致

    搜ANR,如果搜索出来的量 很大,那么搜索的时候,ANR后加一个空格,这样结果就会减少。

    六、MonkeyScript脚本

    MonkeyScript使用教程 - 清风软件测试 - 博客园

    MonkeyScript 是官方提供的,除了像Monkey一样随机乱点之外,还可以通过编写脚本的形式,完成一系列固定的操作。

    MonkeyScript 提供一整套完善的 API 来进行支持,主要还是基于坐标点的操作,包含常用的:点击、长按、输入、等待等操作。

    MS脚本只要是文本即可,不关心后缀是什么,所以编写时不要添加后缀,保存文本格式即可。

    MonkeyScript 执行命令:

    adb shell monkey -f <scriptfile> <event-count>

    MonkeyScript 脚本

    执行次数

    6.1  MonkeyScript 常用命令

    一、DispatchTrackball 轨迹球事件

    DispatchTrackball(long downtime,long eventtide,int action,float x,float y,float pressure,float size,int metastate,float xprecision,float yprecision,int device,int edgeflags)

    注意:按一个键需要两个轨迹球事件 。

    轨迹球常用命令:

    1、int action

    指具体操作的动作。action: 0代表按下,1代表谈起,一个点击事件,需要执行0和1两个。

    2、float x,float y

    x 与y 的坐标

    以上2个是轨迹球常用命令,需要根据具体情况进行修改。

    轨迹球非常用命令:

    以下几个命令,在实际使用时,直接复制用就可以了,不用进行修改,所以也不用关注这几个命令是啥意思。

    long downtime指键最初被按下的时间

    long eventtide 指事件发生的时间

    float pressure 压力事件的大小(0-1)

    float size 触摸的记事值(0-1)

    int metastate 当前按下mate键的标识

    二、DispatchPointer 点击事件

    按一个键需要2个点击事件

    三、DispatchString 输入字符串命令

    DispatchString(String text)

    四、LaunchActivity 启动应用

    LaunchActivity(package,Activity)

     五、UserWait 等待事件

    UserWait(1000)

    单位毫秒

    六、DispatchPress 按下键值

    DispatchPress(int keycode)

    如按下回车键:

    DispatchPress(66) 

     DispatchPress 与 DispatchPointer 区别:

    DispatchPointer 点击的是屏幕(坐标)

     DispatchPress 点击的是键盘,如点击回车键、点击a键、f键等。

    Android KeyCode 列表:

    Android KeyCode 列表 - 狐狸已化妖 - 博客园

    遇到不知道的键,需要自己去百度一下,以下是部分键的int值。

    KEYCODE_CALL 拨号键 5
    KEYCODE_ENDCALL 挂机键 6
    KEYCODE_HOME 按键Home 3
    KEYCODE_MENU 菜单 82
    KEYCODE_BACK 返回键 4
    KEYCODE_SEARCH 搜索 84
    KEYCODE_CAMERA 拍照键 27
    KEYCODE_FOCUS 拍照对焦键 80
    KEYCODE_POWER 电源键 26
    KEYCODE_NOTIFICATION 通知键 83
    KEYCODE_MUTE 话筒静音键 91
    KEYCODE_VOLUME_MUTE 扬声器静音键 164
    KEYCODE_VOLUME_UP 音量增加键 24
    KEYCODE_VOLUME_DOWN 音量减小键 25

    6.2   MonkeyScript 脚本编写

    下面以测试登录功能为例:

    模板:

    1. type=user
    2. count = 1
    3. speed = 1.0
    4. start data >>
    5. LaunchActivity(Activity)
    6. UserWait(1000)
    7. DispatchPointer(0,0,0,303,312,0,0,0,0,0,0,0)
    8. DispatchPointer(0,0,1,303,312,0,0,0,0,0,0,0)
    9. UserWait(1000)
    10. DispatchString(1234566)
    11. UserWait(100)
    12. DispatchPointer(0,0,0,345,393,0,0,0,0,0,0,0)
    13. DispatchPointer(0,0,1,345,393,0,0,0,0,0,0,0)
    14. UserWait(100)
    15. DispatchString(1234567)
    16. UserWait(1000)
    17. DispatchPointer(0,0,0,100,100,0,0,0,0,0,0,0)
    18. DispatchPointer(0,0,1,100,100,0,0,0,0,0,0,0)
    19. UserWait(1000)
    20. DispatchPointer(0,0,0,361,507,0,0,0,0,0,0,0)
    21. DispatchPointer(0,0,1,361,507,0,0,0,0,0,0,0)
    22. UserWait(3000)

    注意:

    顶部4行命令,是MonkeyScript 固定的脚本头,需要写在脚本的最前面。

    1. type=user
    2. count = 1
    3. speed = 1.0
    4. start data >>

    在脚本中,脚本头是一直不变动的,为了避免写错,可以直接复制粘贴最保险。

    在 start data>> 之后就可以正式开始编写 monkey 脚本了。

    在脚本中,使用 # 号,对单行进行注释。

    例子二:

    1、启动APP

    2、点击地址栏

    3、删除原有地址

    4、输入www.baidu.com

    5、点击回车

    6、点击回车

    7、点击搜索框

    8、输入字符串test

    9、点击回车

    10、点击搜索按钮

    11、等待搜索结果

    1. type=user
    2. count = 1
    3. speed = 1.0
    4. start data >>
    5. LaunchActivity(com,android.browser,com.android.browser.BrowserActivity)
    6. UserWait(1000)
    7. DispatchPointer(10,10,0,200,100,1,1,-1,1,1,0,0)
    8. DispatchPointer(10,10,1,200,100,1,1,-1,1,1,0,0)
    9. DispatchPress(112)
    10. DispatchString(www.baidu.com)
    11. DispatchPress(66)
    12. UserWait(1000)
    13. DispatchPointer(10,10,0,300,400,1,1,-1,1,1,0,0)
    14. DispatchPointer(10,10,1,300,400,1,1,-1,1,1,0,0)
    15. UserWait(1000)
    16. DispatchString(test)
    17. UserWait(1000)
    18. DispatchPress(66)
    19. UserWait(1000)

    写完脚本后,必须将脚本放到手机里。

    adb push 

    执行:

    adb push 

    七、MonkeyRunner介绍

    https://www.jianshu.com/p/30532d06306b

    MonkeyRunner工具使用Jpython(使用Java编程语言实现的Python)写出来的。MonkeyRunner是安卓SDK提供的功能。MonkeyRunner在Android_sdk中的位置:tools目录下。

    MonkeyRunner 跟monkey没有任何关系。Monkey通过在设备直接运行adb shell命令来生成随机事件进行测试。MonkeyRunner通过API发送特定的命令和事件来控制设备。

    MonkeyRunner提供了多个API,通过MonkeyRunner API可以编写一个Python程序来模拟操作控制Android设备App,测试其稳定性并通过截屏记录出现的问题。

    MonkeyRunner工具主要设计用于在功能/框架级测试应用程序和设备。支持java脚本和python脚本。

    7.1 环境搭建&启动:

    安装好Android SDK后,配置MonkeyRunner环境变量(将MonkeyRunner的路径放入Path)。在cmd中输入MonkeyRunner出现如下显示内容说明安装成功,使用Ctrl+D退出。

    7.2 MonkeyRunner API介绍&常用命令


    MonkeyRunner主要分为三个类:

    1、MonkeyRunner:它是一个MonkeyRunner程序提供工具方法的类,这个类提供了用于连接MonkeyRunner到设备或模拟器的方法,同时还提供了用于创建一个MonkeyRunner程序的用户界面以及显示内置帮助的方法。

    2、MonkeyDevice:它是一个设备或模拟器的类,这个类提供了安装和卸载程序包、启动一个活动以及发送键盘或触摸事件到应用程序的方法,同时提供也可以用这个类来运行测试包。

    3、MonkeyImage:它是一个截图对象的类,这个类提供了截图、将位图转换成各种格式、比较两个MonkeyImage对象以及写图像到文件的方法。

     官方文档:http://www.android-doc.com/tools/help/monkeyrunner_concepts.html#
     

    7.2.1 MonkeyRunner类

    提供连接真机和模拟器、输入、暂停、警告框等方法

    API 功能
    alert() 警告框
    choice() 选项列表框
    help() API帮助文档
    input() 输入
    sleep() 暂停
    waitFor Connection() 等待设备连接

    常用方法:

    1. from com.android.monkeyrunner import Monkeyrunner as mr
    2. print("connect devices...")
    3. device=mr.waitForConnection(5,'127.0.0.1:62001')

    1、alert 警告框

    MonkeyRunner.alert(String message,String title,String okTitle)

    message: 弹出对话框内容

    title:对话框的标题栏显示内容,默认值为“Alert”

    okTitle: 对话框的按钮,默认值为“OK"

     2、waitForConnection

    等待设备连接,多个设备,需要指明哪个设备。

    MonkeyRunner.waitForConnection(float timeout,string deviceId)

    timeout: 等待超时时间,默认值为永久等待

    deviceId:通过设备ID识别手机,如果只有一台手机,不需要输入。

    7.2.2 MonkeyDevice类

    提供安装和卸载程序包、开启activity、发送按键和点击事件、运行测试包等

    API 功能
    broadcastIntent() 发送广播
    drag() 拖动
    getProperty() 获取当前设备属性
    getSystemProperty() 获取当前设备属性
    installPackage() 安装应用
    instrument 执行测试用例
    press() 按键
    reboot() 重启
    removePackage() 删除指定Package
    startActivity() 启动应用
    touch() 点击

    常用方法:

    1. installPackage(string path)
    2. removePackage(string package)
    3. startActivity(string uri, string action, string data, string mimetype, iterable categories dictionary extras, component component, flags)

    touch(integer x, integer y, integer type)

    touch参数说明:

    • integer x:x坐标值
    • integer y:y坐标值
    • integer type:key event类型(如: DOWN:按下事件 UP:弹起事件 DOWN_AND_UP:按下弹起事件 )
    drag(tuple start, tuple end, float duration, integer steps)

    drag参数说明: 

    • tuple start:拖拽起始位置,为tuple类型的(x,y)坐标点。
    • tuple end,拖拽终点位置,为tuple类型的(x,y)坐标点。
    • float duration,拖拽手势持续时间,默认为1.0s。
    • integer steps,插值点的步数,默认值为10。

    7.2.3 MonkeyImage类

    用来保存各种格式的测试截图,并可以进行图像对比

    API 功能
    convertToBytes() 转换图像格式
    getRawPixel() 获取当前坐标像素元组
    getRawPixellnt() 获取当前坐标像素值
    sameAs() 图像对比
    writeToFile() 保存图像文件到指定的文件路径
    getSubImage() 截取子图像
    takeSnapshot() 屏幕截图

    常用方法:

    • takeSnapshot():屏幕截图
    • writeToFile():保存图像文件到指定的文件路径

     编写Python测试代码:

    1. # coding=utf-8
    2. # 引入本程序所用到的模块
    3. from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
    4. # 连接手机设备
    5. device = MonkeyRunner.waitForConnection()
    6. # 截图
    7. result = device.takeSnapshot()
    8. # 将截图保存到文件
    9. result.writeToFile('E:\\manage\\Test1_001.png', 'png')
    10. # 卸载APP
    11. device.removePackage('com.baidu.searchbox')
    12. print('Uninstall Success!')
    13. # 暂停5秒
    14. MonkeyRunner.sleep(5)
    15. # 截图
    16. result = device.takeSnapshot()
    17. result.writeToFile('E:\\manage\\Test1_002.png', 'png')
    18. # 安装新的APP
    19. device.installPackage(r'E:\Android_apk\baidusearch1006979t.apk')
    20. print('Install Success!')
    21. # 暂停5秒
    22. MonkeyRunner.sleep(5)
    23. # 截图
    24. result = device.takeSnapshot()
    25. # 将截图保存到文件
    26. result.writeToFile('E:\\manage\\Test1_003.png', 'png')

    八、MonkeyRunner脚本实战


    作者:Cyzhouke
    链接:https://www.jianshu.com/p/30532d06306b


     

    8.1、测试场景

    使用MonkeyRunner连接设备,进行自动安装并启动APP,完成登录功能,并截图保存到指定目录下

    8.2、思路分析

    步骤:
    1、连接设备
    2、安装App
    3、启动App
    4、点击用户名,密码输入框,完成输入
    5、点击登录
    6、截图

    8.3、代码(考研帮)

    1. from com.android.monkeyrunner import MonkeyRunner as mr
    2. from com.android.monkeyrunner import MonkeyDevice as md
    3. from com.android.monkeyrunner import MonkeyImage as mi
    4. #启动服务
    5. print("-----connect devices-----")
    6. device=mr.waitForConnection()
    7. print("-----succeed start-----")
    8. print("-----install app-----")
    9. device.installPackage(r"F:\kaoyan3.1.0.apk")
    10. print("-----succeed install-----")
    11. print("-----start App-----")
    12. package="com.tal.kaoyan"
    13. activity="com.tal.kaoyan.ui.activity.SplashActivity"
    14. runComponent=package+"/"+activity
    15. device.startActivity(component=runComponent)
    16. mr.sleep(3) #等待
    17. #点击取消更新按键
    18. print("-----click cancel update-----")
    19. device.touch(726.2,1096.4,"DOWN_AND_UP") #对取消更新按钮执行点击弹起操作
    20. mr.sleep(3)
    21. #点击跳过
    22. print("---click skip button---")
    23. device.touch(982,69,"DOWN_AND_UP") #对跳过按钮执行点击弹起操作
    24. mr.sleep(3)
    25. #输入账号
    26. print("input username and password")
    27. device.touch(194,381,"DOWN_AND_UP") #对用户名输入框执行点击弹起操作
    28. mr.sleep(1)
    29. device.type("zxw1234") #输入登录账号
    30. device.touch(194,472,"DOWN_AND_UP") #对密码输入框执行点击弹起操作
    31. mr.sleep(1)
    32. device.type("zxw123456")
    33. #点击登录
    34. device.touch(550,628,"DOWN_AND_UP")
    35. mr.sleep(3)
    36. print("-----screen shot-----")
    37. screenshot=device.takeSnapshot() #截屏
    38. screenshot.writeToFile(r"C:\Users\k.zhou\Pictures\Saved Pictures\kyb.png","png") #保存图片


     

    九、性能脚本

    十、python adb交互

    十一、python adb 工具编写

    十二、编写bat工具

  • 相关阅读:
    EasyNLP 开源中文 NLP 算法框架
    jsp常问面试题
    位图bitset及其应用——【C++实现】
    内存模型和线程规范
    在 CentOS 8 上为Apache HTTPD 配置 HTTPS
    2023辽宁工程技术大学计算机考研信息汇总
    30V-STM32设计项目
    ATFX汇市:日本9月核心CPI年率降低至2.8%,创出13个月以来新低
    在VMware中安装CentOS 7并配置Docker
    PostgreSQL创建数据库及修改参数文件
  • 原文地址:https://blog.csdn.net/qq_39208536/article/details/126353610