• Monkey 命令收集相关 --追加Monkey自动化测试开源工具


    .1、环境配置

    MONKEY测试使用的是ADB命令,因此只需要配置ADB环境即可。

    2、测试准备与执行

    在Monkey测试前,必须进行以下准备

    Ø  手机屏幕超时设置为30分钟或者永不超时,防止手机进入锁屏状态。

    Ø  插入SIM卡和存储卡后将手机开机,开启开发者模式,开启ADB模式,连接到PC(存储卡剩余空间尽量留大,建议1G以上)

    Ø  在PC上执行 运行—>CMD,在弹出的命令窗口中,输入adb devices,检查设备是否连接

      这一步很多人会遇到连接不上设备,解决方法如下:

        一、检查开发者选项USB调试是否开启

        二、重新插拔USB看是否有授权提示

        三、重启adb

      1.   adb kill-server
      2.     adb start-server


        四、添加设备ID至电脑文件中adb_usb.ini

      1. adb_usb.ini文件位置:Win(C:UsersAdministrator.android)、Mac(/Users/user/.android/)、linux(/root/.android/)
      2. Win获取(USB连接设备以后查看控制面板->系统->设备管理器->Android Phone->设备名称->详细信息->硬件ID->VID)

    Ø  在弹出的命令窗口中,输入adb shell,进入Linux Shell

    Ø  输入常用的 Monkey命令。如下:

        问题: 如何获取APP的package?

          1.CMD命令模式下,切到目录(build-tools下),

           以本人的为例    D:AndroidTestandroid-sdk_r24.4.1-windowsandroid-sdk-windowsuild-tools28.0.0  

          2.执行: aapt dump badging E:apkapp-release.apk

          3.从获取的信息中copy  (一个是启动的activity,安卓编程初始化用到,一个是packageName ,monkey用到):

            launchable-activity: name='com.XXXXX.hamapp.MainActivity'
            package: name='com.XXXXXX.hamapp.test' versionCode='100' versionName='1.0.0' platformBuildVersionName='8.1.0'

    monkey -p com.XXXXXX.hamapp.test --ignore-crashes --ignore-timeouts --ignore-native-crashes --pct-touch 20 -s 1 -v -v --throttle 200 100000 2>/sdcard/error.txt 1>/sdcard/info.txt

    参数

    描述

    -p com.lenovo.ideafriend

    只仅针对特定包名进行测试

    --ignore-crashes

    忽略应用程序崩溃(Force & Close错误),继续发送执行事件,直到事件数执行完成

    --ignore-timeouts

    忽略应用程序发生ANR(Application No Responding)错误时,直到事件数执行完成

    --ignore-native-crashes

    忽略本地应用程序发生奔溃,直到事件数执行完成

    --pct-touch 20

    调整触摸事件为30%。即整个事件过程中触摸事件占20%

    -s 1

    伪随机数生成器seed值。Seed值为1。相同的seed值再次执行monkey,将产生相同的事件序列。

    -v -v

    日志级别为Leve1 1。将提供较为详细的日志,包括每个发送到Activity的事件信息

    --throttle 200

    事件之间延时200毫秒。可以控制monkey的执行速度,如果不指定该选项,monkey事件间将不会延时。

    10000

    执行事件数为1万次

    2>/sdcard/error.txt

    Leve1 2日志保存到sdcard上的error.txt中

    1>/sdcard/info.txt

    Leve1 1日志保存到sdcard上的info.txt中

    3、结果检查与分析

    测试结束后,需要将手机连接PC,拷贝以下文件:

    Ø  info.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时发送的各种事件,如触摸事件的位置等等。

    Ø  error.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时产生的一些ANR、强制关闭等异常。

    Ø  LOG文件:此文件在手机上的LOG文件夹中中,主要主要记录程序对MONKEY测试时的响应情况。

    Ø  将手机里面的monkey log文件拉取到电脑

    adb pull /sdcard/error.txt E:monkeyLogerror1.txt
    adb pull /sdcard/info.txt E:monkeyLoginfo1.txt

    我们需要对这2个文件进行分析整理,以便提交开发人员处理。

    如何分析?

    1. 在error.txt 文件里面搜索关键字----ANR, crash, Exception 然后将相关的上下文内容copy到BUG描述,如下:

    // CRASH: com.luojilab.player (pid 13876)
    // Short Msg: java.lang.IllegalStateException
    // Long Msg: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.luojilab.player.action.INIT cmp=com.luojilab.player/com.luojilab.base.application.LauncherService }: app is in background uid UidRecord{e2c6761 u0a147 RCVR idle procs:1 seq(0,0,0)}
    // Build Label: HUAWEI/FLA-AL10/HWFLA-H:8.0.0/HUAWEIFLA-AL10/131(C00):user/release-keys
    // Build Changelist: 131(C00)
    // Build Time: 1522683921000
    // java.lang.RuntimeException: Unable to create application com.luojilab.base.application.LuojiLabApplication: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.luojilab.player.action.INIT cmp=com.luojilab.player/com.luojilab.base.application.LauncherService }: app is in background uid UidRecord{e2c6761 u0a147 RCVR idle procs:1 seq(0,0,0)}
    // at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6532)
    // at android.app.ActivityThread.-wrap2(Unknown Source:0)
    // at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1963)
    // at android.os.Handler.dispatchMessage(Handler.java:108)
    // at android.os.Looper.loop(Looper.java:166)
    // at android.app.ActivityThread.main(ActivityThread.java:7425)
    // at java.lang.reflect.Method.invoke(Native Method)
    // at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
    // at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
    // Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.luojilab.player.action.INIT cmp=com.luojilab.player/com.luojilab.base.application.LauncherService }: app is in background uid UidRecord{e2c6761 u0a147 RCVR idle procs:1 seq(0,0,0)}
    // at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1701)
    // at android.app.ContextImpl.startService(ContextImpl.java:1657)
    // at android.content.ContextWrapper.startService(ContextWrapper.java:644)
    // at com.luojilab.base.application.LauncherService.start(SourceFile:48)
    // at com.luojilab.business.welcome.a.a(SourceFile:129)
    // at com.luojilab.base.application.LuojiLabApplication.onCreate(SourceFile:112)
    // at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1122)
    // at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6517)
    // ... 8 more

     2. 在info.text 里面搜exception ,然后搜索上下文的switch(两个switch之间是一个操作组,如果出现了exception证明出现了崩溃),如下:

    :Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.XXXXXe.hamapp.test/com.evergrande.hamapp.MainActivity;end
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.evergrande.hamapp.test/com.evergrande.hamapp.MainActivity } in package com.XXXXX.hamapp.test
    :Sending Flip keyboardOpen=false
    Got IOException performing flipjava.io.IOException: write failed: EINVAL (Invalid argument)
    // Injection Failed
    Sleeping for 200 milliseconds

    4、杀monkey进程与其他

    如果想中断运行中的monkey   CTRL+C

    adb shell ps | grep monkey  返回进程号

    adb shell kill [刚才查到的进程号]

    app包名查看:

    a.手机安装包名查看器'

    b.aapt命令  aapt dump badging *.apk

    c、源码下的AndroidManifest.xml文件查看

    d.adb logcat抓取当前Android机运行的app的包名(  I/ActivityManager(数字): Displayed 包名/类
    名: +ms )

      命令行输入 adb logcat >e:ag.txt

      手机操控app,ctrl+c停止

      去e:ag.txt这个文件下搜索关键字如Displayed ,一般都能找到

    参考资料:

    【1】Monkey官网

    http://developer.android.com/tools/help/monkey.html

    【2】百度文库 Monkey测试介绍

    http://wenku.baidu.com/view/476c79b8fd0a79563c1e72b6.html

    【3】 monkey 自动化开源工具:

      1. swiftmonkey
        https://github.com/zalando/SwiftMonkey
        因其直接使用了 苹果的私有api 如XCEventGenerator.tapAtTouchLocations 故执行速度极快。同时也用类似android monkey的事件生成机制,自身源源不断的产生如 tap,swipe,pinchIn等事件使其对被测app产生了极大的压力
        缺点:需要插桩

      2. XCTestWD 
        https://github.com/macacajs/XCTestWD
        类似facebook wda的方式,在xcode中执行xcuitest时启动一个监听server,可通过外部发送命令来创建待测app对应session并启动app,同时也实现了dump tree 和依据xpath,id等来定位某个控件并操作这些控件

      3. Fastmonkey
        Xcode9.0(https://github.com/zhangzhao4444/Fastmonkey
        Xcode8.3(https://github.com/zhangzhao4444/Fastmonkey/tree/xcode8.3
        结合两者优点并改造两者,在XCTestWD基础上实现一个server路由,外部命令时可引导启动app 并执行monkey

  • 相关阅读:
    获取所有部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary
    获取所有员工当前的manager,如果当前的manager是自己的话结果不显示
    String笔记02
    String笔记
    ArrayList笔记
    猜数字小游戏
    标准类
    封装
    面向对象
    方法
  • 原文地址:https://www.cnblogs.com/Ronaldo-HD/p/9283670.html
Copyright © 2020-2023  润新知