【问题标题】:How do I stop the monkey madness?如何阻止猴子的疯狂?
【发布时间】:2012-04-03 18:18:22
【问题描述】:

我正在使用猴子工具运行我的 Android 应用程序的测试。例如,我可能会执行如下运行:

adb shell monkey -p com.myapp -v 10000

但是,如果我改变主意并需要取消测试,似乎没有一种方法可以不用等待几分钟让该死的猴子完成大部分或全部运行。

在我的 mac 上杀死 adb shell 进程并不能解决问题。使用 ddms 杀死我手机上的 com.myapp 进程不起作用。拔下我的手机不起作用。

如何取消猴子的疯狂?

【问题讨论】:

    标签: android testing


    【解决方案1】:

    你可以这样做杀死猴子进程:

    $ adb shell ps | awk '/com\.android\.commands\.monkey/ { system("adb shell kill " $2) }'
    

    【讨论】:

    • system("./adb shell kill " $2)
    • @RahulRastogi “没用”不足以理解您的问题
    • 我正在使用adb shell kill $(pgrep monkey)
    【解决方案2】:

    [Nitpick] 你把monkeyrunnermonkey 混淆了。

    monkeyrunner 工具与 UI/应用程序练习器无关 猴,又称猴工具。猴子工具在 adb 中运行 shell直接在设备或模拟器上并生成伪随机 用户和系统事件流。相比之下,monkeyrunner 工具通过发送从工作站控制设备和仿真器 来自 API 的特定命令和事件。

    [/挑剔]

    在我的 Android 2.2 设备上,当我启动 Monkey 时,我看到一个在 DDMS 中以名称“?”启动的进程。 (只是一个问号)。当我杀死那个进程时,猴子的疯狂停止了。

    【讨论】:

      【解决方案3】:
      adb shell
      ps | grep monkey
      kill process_id
      

      【讨论】:

      • kill 语句中提到的 process_id 是“ps | grep monkey”命令返回的第一个数字 - 这是有必要知道的
      【解决方案4】:
      adb shell kill $(adb shell pgrep monkey)
      

      感谢@deadfish

      【讨论】:

        【解决方案5】:

        为了它的价值,我在 2018 年在 Mac 上使用 Android Studio 3.1.4,我不得不像这样改变接受的答案:

        ./adb shell ps | awk '/com\.android\.commands\.monkey/ { system("./adb shell kill " $2) }'
        

        希望这有助于防止拉扯头发和铅笔折断!

        另外...说到猴子,一定要pin你的应用程序!!!否则,您可能会像我一样不小心将所有自拍照发送到中国的随机电子邮件中。 ¯\_(ツ)_/¯

        【讨论】:

          【解决方案6】:

          用shell杀死猴子会导致一个小问题,ActivityTaskManagerService中的IActivityController不会设置为null,它应该设置。并且 ActivityManager.isUserAMonkey() 仍然返回 true。

          如果monkey自动停止,它会正确重置Controller:

          Monkey.java{
              private int run(String[] args) {
                  ...
                  try {
                      mAm.setActivityController(null, true);
                      mNetworkMonitor.unregister(mAm);
                  }
                  ...
              }
          }
          

          【讨论】:

          • 您能补充一点细节吗?这应该在哪里运行?所有其他答案都建议使用 shell 命令,而这是 Java sn-p。
          • 猴子启动时,ActivityTaskManagerService初始化ActivityController,设置mControllerIsAMonkey为true。
          • 很明显,monkey stop 时会设置 null 和 false,除了猴子被杀。可能是 bug ╮(─▽─)╭。我也在使用 shell 命令。错误我修改了 ActivityTaskManagerService.isControllerAMonkey() 来修复它。
          猜你喜欢
          • 2010-12-12
          • 1970-01-01
          • 2023-04-08
          • 2013-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-01
          相关资源
          最近更新 更多