我正在尝试使用猴子练习工具来强调测试我的Android应用程序.
默认情况下,该工具将执行具有类别Intent.CATEGORY_LAUNCHER或 Intent.CATEGORY_MONKEY根据文档的活动.
package="my.android"
<activity android:name=".activities.MyApp">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".activities.MyScreen">
<intent-filter>
<category android:name="android.intent.category.MONKEY"/>
</intent-filter>
</activity>
<activity android:name=".activities.MySettings"/>
Run Code Online (Sandbox Code Playgroud)
我不想让 Monkey设置MySettings.
在我的实际情况中,这是因为该活动进行了注销.因此,在注销后,无法登录以便继续测试其余的屏幕,这是测试的全部概念.
./adb shell monkey -p my.android -v 500
:Monkey: seed=0 count=500
:AllowPackage: my.android
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
..
// Allowing start of Intent { cmp=my.android/.activities.MySettings} in package my.android
..
Run Code Online (Sandbox Code Playgroud)
它应该拒绝而不是允许我猜.任何想法如何避免猴子进入我不想要的活动?
我正在运行练习猴测试我的Android应用程序.作为我的应用程序的一部分,我播放媒体文件,提供单词的发音.我把这些文件放在Android的音乐播放器无法读取的目录中.然而,锻炼者猴子抛出一些似乎激活音乐播放器的事件序列,然后在测试期间重复播放另一个mp3文件(不是来自我的应用程序)的开头.它是如何做到的,这是我应该关注的事情吗?
附加信息:即使我在我的应用程序中禁用MediaPlayer,问题仍然存在.FWIW,这里是训练者猴子的一系列输出,直到产生声音的命令(最后一个):
// Rejecting start of Intent { act=android.intent.action.VIEW dat=http://www.myurl.com/ cmp=com.android.browser/.BrowserActivity } in package com.android.browser
:Sending Pointer ACTION_DOWN x=437.0 y=183.0
:Sending Pointer ACTION_UP x=450.0 y=158.0
:Sending Pointer ACTION_DOWN x=5.0 y=58.0
:Sending Pointer ACTION_UP x=-4.0 y=58.0
:Sending Pointer ACTION_MOVE x=2.0 y=-2.0 <=== sound generated from this one
Run Code Online (Sandbox Code Playgroud)
这是问题出现时logcat的输出:
I/AudioService( 101): AudioFocus requestAudioFocus() from android.media.AudioManager@40518af0com.android.music.MediaPlaybackService$3@405218f8
I/AudioService( 101): Remote Control registerMediaButtonEventReceiver() for ComponentInfo{com.google.android.music/com.android.music.MediaButtonIntentReceiver}
W/AudioFlinger( 68): write blocked for 159 msecs, 26 delayed writes, thread 0xea00
D/AudioHardwareQSD( 68): AudioHardware pcm playback is going to …Run Code Online (Sandbox Code Playgroud) android audio-player monkey android-music-player android-monkey android-mediaplayer
我的包名为com.mywebsite.banana.
我这样叫猴子:
adb shell monkey -s 13 -p com.mywebsite.banana -v 500
Run Code Online (Sandbox Code Playgroud)
我的输出:
:Monkey: seed=13 count=500
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
No activities found to run, monkey aborted
Run Code Online (Sandbox Code Playgroud)
我的AndroidManifest.xml中有这个:
<categoy android:name="android.intent.category.LAUNCHER"/>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?在运行猴子之前,我需要在应用程序中添加一些内容吗?主要活动位于com.mywebsite.banana中 - 是传递的正确路径,还是应该一直到这样的活动:com.mywebsite.banana.activityName?
从我所读到的,似乎我正确地做到了这一点:
编辑
尝试1:
adb shell monkey -p com.mywebsite.banana -c intent.CATEGORY_LAUNCHER -v 500
Run Code Online (Sandbox Code Playgroud)
结果1:
:Monkey: seed=13 count=500
:AllowPackage: com.mywebsite.banana
:IncludeCategory: intent.CATEGORY_LAUNCHER
// Warning: no activities found for category intent.CATEGORY_LAUNCHER
** No activities found to run, monkey aborted
Run Code Online (Sandbox Code Playgroud)
尝试2:
adb …Run Code Online (Sandbox Code Playgroud) 我使用以下指令让猴子在我的应用程序上运行(通过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)
这种情况每隔几秒就会一次又一次地发生,并且是唯一发生的错误.这很奇怪,因为我的应用程序根本没有触及任何媒体播放器功能.这是一个简单的笔记/待办事项应用程序.任何洞察猴子触摸的是什么导致错误以及我能做些什么来防止它?
或者可以安全地忽略它吗?
谢谢!
编辑:
我想我找到了问题的根源.显然,猴子设法将我的键盘放入某种亚洲语言中.每当在下面的软键盘图像中按下左下键(两个亚洲字符)时.我收到了媒体播放器错误.有谁知道这把钥匙做什么?

我尝试将猴子集成到我的APP中,而以下错误总是会出现:
10-13 09:16:24.682: INFO/System.out(274): :Monkey: seed=0 count=500...
10-13 09:16:24.682: INFO/System.out(274): :Monkey: seed=0 count=500...
10-13 09:16:24.704: INFO/System.out(274): :AllowPackage: org.example.tabdemo...
10-13 09:16:24.712: INFO/System.out(274): AllowPackage: org.example.tabdemo...
10-13 09:16:24.723: INFO/System.out(274): :IncludeCategory: android.intent.category.LAUNCHER...
10-13 09:16:24.762: INFO/System.out(274): IncludeCategory: android.intent.category.LAUNCHER...
10-13 09:16:24.773: INFO/System.out(274): :IncludeCategory: android.intent.category.MONKEYER...
10-13 09:16:24.783: INFO/System.out(274): IncludeCategory: android.intent.category.MONKEYER...
10-13 09:16:24.872: WARN/ActivityManager(58): Permission Denial: setActivityController() from pid=290, uid=10036 requires android.permission.SET_ACTIVITY_WATCHER
10-13 09:16:24.903: DEBUG/AndroidRuntime(290): Shutting down VM
10-13 09:16:24.912: WARN/dalvikvm(290): threadid=1: thread exiting with uncaught
exception (group=0x4001d850)
10-13 09:16:25.112: ERROR/AndroidRuntime(290): *** FATAL EXCEPTION IN SYSTEM PROCESS: main …Run Code Online (Sandbox Code Playgroud) 我正在使用monkey命令对我的应用程序进行压力测试.但是我希望在屏幕方向上更多地测试它,以便在改变方向时检测并捕获一些堆积更新.我在android官方网站上搜索了关于猴子命令/参数的信息,这些命令/参数将在任何app/activity上运行时进行屏幕方向.但没有运气,想过要问像你这样的专业人士.
如果有这个想法,请告诉我.
我有一个共同的问题:
java.lang.IllegalStateException: The content of the adapter has changed but List
View did not receive a notification. Make sure the content of your adapter is no
t modified from a background thread, but only from the UI thread. [in ListView(2
131427573, class android.widget.ListView) with Adapter(class android.widget.Head
erViewListAdapter)]
Run Code Online (Sandbox Code Playgroud)
但是适配器不是我的代码,而是在android.widget.HeaderViewListAdapter
使用Jellybean.
我通过对源代码的阅读HeaderViewListAdapter,ListAdapter和ListView.该IllegalStateException当项目在计数时,抛出ListView不等于所提供的计数ListAdapter.在这种情况下,ListAdapter是HeaderViewListAdapter.该HeaderViewListAdaptercount:伯爵是原来的数ListAdapter由客户端代码中传递,再加上页眉和页脚的大小.
我追查了我的代码.所有访问ListView都在UI线程上,并始终跟随notifyDataSetChanged()适配器.我正在使用一个页脚.
在正常使用中不会发生这种情况.是猴子吗?但是Monkey如何从其他线程修改我的变量?
我通过删除呼叫删除了页脚addFooterView() …
从命令行运行Test Monkey时如何更改详细级别?
这两个命令有效:
adb shell monkey -p com.my.package 5000
adb shell monkey -p com.my.package -v 5000
Run Code Online (Sandbox Code Playgroud)
开发人员文档说,"命令行上的每个-v都会增加详细级别.级别0(默认值)提供的信息几乎不包括启动通知,测试完成和最终结果.级别1提供有关测试运行的更多详细信息,例如发送到您的活动的个别事件.第2级提供更详细的设置信息,例如选择或未选择用于测试的活动.
但是,当我尝试adb shell monkey -p com.my.package -v -v 5000我得到一个segmentation fault monkey -p com.my....
我试过adb shell monkey -p com.my.package -v 2 5000,但是猴子读的2是计数,而不是值-v.
救命?:)