我使用以下指令让猴子在我的应用程序上运行(通过android模拟器):
Monkey -p <packagename> -v 5000
我收到以下错误:
01-28 11:45:55.392: ERROR/MediaPlayerService(34): error: -2
01-28 11:45:55.392: ERROR/MediaPlayer(58): Unable to to create media player
01-28 11:45:58.783: ERROR/MediaPlayerService(34): error: -2
01-28 11:45:58.783: ERROR/MediaPlayer(58): Unable to to create media player
01-28 11:46:13.742: ERROR/MediaPlayerService(34): error: -2
01-28 11:46:13.752: ERROR/MediaPlayer(58): Unable to to create media player
Run Code Online (Sandbox Code Playgroud)
这种情况每隔几秒就会一次又一次地发生,并且是唯一发生的错误.这很奇怪,因为我的应用程序根本没有触及任何媒体播放器功能.这是一个简单的笔记/待办事项应用程序.任何洞察猴子触摸的是什么导致错误以及我能做些什么来防止它?
或者可以安全地忽略它吗?
谢谢!
编辑:
我想我找到了问题的根源.显然,猴子设法将我的键盘放入某种亚洲语言中.每当在下面的软键盘图像中按下左下键(两个亚洲字符)时.我收到了媒体播放器错误.有谁知道这把钥匙做什么?

我对如何实际使用有点困惑monkey,我以为你应该打开你的模拟器并进入终端编辑器并键入:
$ adb shell monkey -p insert.my.package.name.here -v 500
Run Code Online (Sandbox Code Playgroud)
因为那不起作用(错误,adb: permission denied)
我试过monkey -p insert.blah.blah -v 500,这就是它被杀了,我做错了什么?
我正在尝试使用Monkey debuggin工具(来自adb)对我的应用程序的一部分进行压力测试.由于Monkey以完全随机的方式运行,我希望它专注于可能包含我正在寻找的错误的代码部分(非常罕见的错误,我不知道如何复制它).
因此,在我的主要活动中,我有6个按钮,每个按钮都会激活一个新活动.我想将猴子设置为只查看其中一个活动,并且每个活动都可以从中查看.我找不到合理的方法来做到这一点.
我已经尝试了
adb shell monkey -p my.package.name -c android.intent.category.MONKEY 1000
并且在我的清单文件中我已经进行了一些我感兴趣的活动:
<intent-filter>
<category android:name="android.intent.category.MONKEY"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
但它没有用.Monkey仍然会激活未按此标记分类的活动.猴子在选定的子活动中工作至关重要,因为在我实际想要测试的子活动之外,它浪费了大约95%的时间在我的应用程序中漫游.
此外,我尝试了一些简单的脚本来启动所需的子活动,但没有成功.
寻找任何帮助,
欢呼,
kajman
在使用Monkey调试我的应用程序时(这几乎和真实一样有趣),我设法崩溃了!是的,这就是它的用途,对吗?
看着日志(和观看时)我注意到猴子偶尔会这样做:
:Sending Flip keyboardOpen=true
Run Code Online (Sandbox Code Playgroud)
这似乎是我问题的一部分.发生这种情况时,模拟器中的屏幕旋转90度,但这与通过按KEYPAD_7获得的常规旋转不同.这是一张图片:

在我看来,模拟器正在模拟键盘开口(翻转),这与旋转略有不同.
所以问题是:我如何模仿自己?当然,运行Monkey很整洁,但是等待它随机选择发送一个keyboardOpen消息是无法调试程序的.
现在我得到一些如下的日志(log-1)
java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to ClassA$1
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1010)
...
Run Code Online (Sandbox Code Playgroud)
1010行
final LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) obj.method();//line 1010
Run Code Online (Sandbox Code Playgroud)
我想,日志应该是这样的(log-2)
java.lang.ClassCastException: ClassA$1 cannot be cast to android.widget.LinearLayout$LayoutParams
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我会得到log-1,是不是?
如果log-1是正确的,那么我如何编写代码来创建这样的异常?
ps:我知道ClassA $ 1是一个匿名类.
ps:我在猴子测试中得到了这个日志,而且很难重新出现
有人告诉我:
MyInterface my = ClassA$1;//$1 is an anonymous class which implements MyInterface
my.getClass().cast(lp);
Run Code Online (Sandbox Code Playgroud)
那么日志就像log-1
但为什么日志没有指出"cast"方法行?
我检查文件夹框架/ base/core,没有人调用方法"?java.lang.Class.cast(Object obj)"的
任何想法?
我正在运行猴子测试,我面临锁屏问题.
我尝试使用默认命令运行测试,如下所示
"monkey -p com.xyz -v 1500000 -s 10000 --throttle 15000"
测试开始很好,但最终锁定屏幕,从而无法解锁,因为我有字母数字密钥代码作为密码,很难通过猴子的随机事件猜测.我只想让猴子只在应用程序上运行并完全忽略锁屏事件
我正在启用永远不要从设置中进入睡眠状态,如果我可以避免猴子停止按电源键,请告诉我.
我在我的Android应用程序上执行Monkey测试.在执行事件时,Monkey会关闭通知面板并单击wifi /移动数据图标,从而将其关闭.
我正在使用此命令:adb shell monkey -p package_name --throttle 100 -s 999 -v 50000
我已经尝试了这里给出的所有选项:https://developer.android.com/studio/test/monkey.html
有没有办法阻止Monkey测试打开通知面板?
我有一个应用程序,同时使用grequests和multiprocessing.managers用于IPC通信和异步通信的RESTful HTTP上的组合。
似乎grequests在使用gevent.monkey的patch_all()方法中,破坏multiprocessing.connection了multiprocessing.manager.SyncManager类及其派生类使用的模块。
这显然不是一个孤立的问题,而是影响任何使用情况下实现multiprocessing.connetion,比如multiprocessing.pool,例如。
深入研究中的代码gevent/monkey.py,我发现与stdlib socket模块的交换gevent.socket是造成损坏的原因。可以在gevent/monkey.py以下patch_socket()功能的第115行找到:
def patch_socket(dns=True, aggressive=True):
"""Replace the standard socket object with gevent's cooperative sockets.
...
_socket.socket = socket.socket # This line breaks multiprocessing.connection!
...
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么此交换中断multiprocessing.connection,并且使用gevent.socket代替stdlib的socket模块有什么优势?也就是说,不修补socket模块会导致什么性能损失(如果有)?
Traceback (most recent call last):
File "clientWithGeventMonkeyPatch.py", line 49, in <module>
client = GetClient(host, port, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用猴子测试一些Android应用程序.但是使用Monkey进行测试已经证明并不总是如此直观,因为它不像人们所期望的那样开箱即用.我甚至读过其他一些类似问题的人,尽管这些评论没有明确解决问题.
因此,为了运行Monkey,我将LAUNCHER包含在AndroidManifest.xml中:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
事实上,当我使用Android文档源中的一个示例时,将LunarLander作为项目名称,我尝试了命令的所有可能组合,但是徒劳:
$ cd /home/user
$ adb shell monkey -p LunarLander -v 3
$ adb shell monkey -p lunarlander -v 3
$ adb shell monkey -p "LunarLander" -v 3
$ adb shell monkey -p "lunarlander" -v 3
Run Code Online (Sandbox Code Playgroud)
然后,我还将MONKEY包含在AndroidManifest中:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.MONKEY" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
在命令行中我再次尝试:
$ adb shell monkey -p lunarlander -v 3
:Monkey: seed=1398534940718 count=3
:AllowPackage: LunarLander
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
** No …Run Code Online (Sandbox Code Playgroud) 我运行了 Monkey 工具(在 Android 应用程序上执行压力测试的工具),我得到了一些具有以下形式的脚本文件:
type= raw events
count= -1
speed= 1.0
start data >>
LaunchActivity(com.amaze.filemanager,com.amaze.filemanager.activities.MainActivity)
DispatchPointer(6934862,6934862,0,517.0,124.0,0.0,0.0,0,1.0,1.0,0,0)
DispatchPointer(6934862,6934867,1,520.041,127.07279,0.0,0.0,0,1.0,1.0,0,0)
GUIGen(3)
DispatchTrackball(-1,6945789,2,1.0,-3.0,0.0,0.0,0,1.0,1.0,0,0)
...
Run Code Online (Sandbox Code Playgroud)
我想使用生成的脚本再次重新执行这样的事件序列。我怎样才能做到这一点?
monkey ×10
android ×9
java ×2
testing ×2
adb ×1
categories ×1
connection ×1
emulation ×1
flip ×1
gevent ×1
intentfilter ×1
keyboard ×1
lockscreen ×1
python ×1
shell ×1
subactivity ×1
xml ×1