問題タブ [monkey]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
624 参照

android - モンキーは本当に意味がありますか?

新しい Android アプリケーションの一部として、完全な継続的インテグレーションをセットアップしています (Jenkins を使用しますが、問題ありません)。

現在、JUnit と UI テストを自動化しており、追加の品質ステップとして、各ビルドの後に Monkey テストを追加することを考えていました。

しかし、Monkey に対する私たちのフィードバックは、今のところ非常に否定的です。新しく空の Android アプリケーション (Android Studio で空のプロジェクトを作成したときの基本的な Hello World アプリ) を作成しましたが、それでも、Monkey テストは定期的にクラッシュします (エミュレーターで実行されます)。私たちのアプリケーション。

私が試したコマンド:

しかし、途中でクラッシュします (ステップ 6000 あたり)。

これは、エミュレーターが過度に要求していることが原因である可能性があると考えたため、エミュレーターが呼吸できるように調整を追加しました。

それでも、クラッシュします (さらに、ステップ 8000 あたり)。

もっと呼吸が必要かもと思ったので、念のため1秒のスロットリングを入れてみました(人間でもそれ以上の速さで行動できます)

それでも、クラッシュします (ステップ 48 000 あたり)。

を追加して--ignore-native-crashesも何も変わりませんでした。

つまり、私の要点は次のとおりです。とにかくモンキーは本当に理にかなっていますか? 関連性がないようです (Android Studio 自体が提供する空の Hello World アプリが根本的な原因である場合、実際のアプリで何が起こるか見たくありません)。

Monkey のテストを安定させ、適切なものにする方法を見つけた人はいますか? どのような構成 (イベント数、スロットリング、追加フラグ) を使用していますか?

150 ミリ秒のスロットリングで発生するクラッシュの 1 つ:

// クラッシュ: com.android.launcher (pid 1838) // 短いメッセージ: java.lang.IllegalArgumentException // 長いメッセージ: java.lang.IllegalArgumentException: 幅と高さは > 0 でなければなりません // ビルド ラベル: generic_x86/sdk_google_phone_x86/ generic_x86:5.1/LKY45/1737576:eng/test-keys // Build Changelist: 1737576 // Build Time: 1423932217000 // java.lang.IllegalArgumentException: width and height must be > 0 // at android.graphics.Bitmap.createBitmap (Bitmap.java:810) // android.graphics.Bitmap.createBitmap(Bitmap.java:789) // android.graphics.Bitmap.createBitmap(Bitmap.java:756) // com.android.launcher2. Cling.dispatchDraw(Cling.java:201) // android.view.View.updateDisplayListIfDirty(View.java:14162) // android.view.View.getDisplayList(View.java:14189) // android.view .ViewGroup.recreateChildDisplayList(ViewGroup.java:3389) // android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3368) で // android.view.View.updateDisplayListIfDirty(View.java:14127) で // android.view.View で.buildLayer(View.java:13979) // com.android.launcher2.AppsCustomizeTabHost.enableAndBuildHardwareLayer(AppsCustomizeTabHost.java:359) // com.android.launcher2.AppsCustomizeTabHost.onLauncherTransitionStart(AppsCustomizeTabHost.java:403) // com.android.launcher2.Launcher.dispatchOnLauncherTransitionStart(Launcher.java:2538) // com.android.launcher2.Launcher.hideAppsCustomizeHelper(Launcher.java:2852) // com.android.launcher2.Launcher.showWorkspace(Launcher. java:2900) // com.android.launcher2.Launcher.showWorkspace(Launcher.java:2893) // com.android.launcher2.Launcher.startSearch(Launcher.java:1642) // com.android.launcher2.Launcher.onSearchRequested(Launcher.java:1766) // com.android.launcher2.Launcher.onKeyDown(Launcher.java:891) // Android .view.KeyEvent.dispatch(KeyEvent.java:2619) // android.app.Activity.dispatchKeyEvent(Activity.java:2707) で // com.android.launcher2.Launcher.dispatchKeyEvent(Launcher.java:1973) で / / com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2276) // android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4020) // android.view. ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3982) // android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544) で // android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597) // android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563) // android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3680) // android.view.ViewRootImpl $InputStage.apply(ViewRootImpl.java:3571) // android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3737) で // android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544) で / / android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597) // android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563) // android.view.ViewRootImpl$InputStage.apply( ViewRootImpl.java:3571) // android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544) で // android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597) // android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563) // android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3713) // android.view.ViewRootImpl$ImeInputStage .onFinishedInputEvent(ViewRootImpl.java:3874) // android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2208) で // android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1849) で / / android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1840) // android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2185) // android.view.InputEventSender.dispatchInputEventFinished( InputEventSender.java:141) // android.os.MessageQueue.nativePollOnce(Native Method) // android.os.MessageQueue.next(MessageQueue.java:143) // android.os.Looper.loop(Looper.java:122) // android.app.ActivityThread. main(ActivityThread.java:5257) // java.lang.reflect.Method.invoke(Native Method) // java.lang.reflect.Method.invoke(Method.java:372) // com.android. internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) // com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) で //android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) // com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) で //android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) // com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) で //

1000 ミリ秒のスロットリングで発生するクラッシュは、SO に投稿するには膨大な量 (数万行) になるのではないかと心配しています。

0 投票する
0 に答える
379 参照

android - 自動再起動モンキー テストを使用した Android Jenkins CI

私は未使用の Mac mini を持っているので、それに Jenkins をインストールし、最新の Android ビルドで常にモンキー テストを実行するように構成しようとしています。私はそれを行う方法を見つけることができません。エミュレーターの起動とビルドでのモンキー テストの実行を可能にするAndroid Emulator Pluginを見つけましたが、時間ベースではなく、特定の数のイベントに対してのみ構成できるようです。

理想的な Jenkins 構成は、git サーバーをポーリングします。特定のブランチで新しいコミットを確認すると、APK をビルドし、エミュレーターを実行してから、モンキー テストを開始します。クラッシュが発生すると確信しており、クラッシュが発生するたびにテストを再開する必要があります。このように無期限に実行し続ける必要があります。その後、新しいコミットが検出されると、エミュレーターがシャットダウンされ、ビルドが最初からやり直されます。

モンキー テストを継続的に実行するように Jenkins ビルドを構成できる創造的な方法はありますか?

0 投票する
2 に答える
4941 参照

android - 携帯電話の Android > データ フォルダにアプリ パッケージが表示されない

私は Android Studio で作業していますが、実行時にデバイスのAndroid>Dataフォルダー内にパッケージが表示されませんapk。それなしではモンキーを走らせることはできません。installLocation="auto"マニフェストでも言及しましたが、WRITE_EXTERNAL_STORAGE許可を与えてもまだパッケージ名を表示できません。

0 投票する
2 に答える
855 参照

android - Monkey test は時々設定に入り、再起動ボタンをクリックしてデバイスを再起動しますか?

AndroidデバイスでMonkeyテストを行うとき、私は送信します

次に、Monkey はデバイスにランダムなイベントを大量に送信します。画面をスワイプしたり、ボタンをクリックしたりすることがよくあります。Monkey は時々設定に入り、再起動ボタンをクリックしてデバイスを再起動しますか? しばらく走っていると気がついたので、デバイス自体が再起動します。モンキー テスト クリックの再起動ボタン自体を回避できますか。ありがとう。

0 投票する
1 に答える
1040 参照

android - Androidプロセスを強制終了するときに保証付きで生成された墓石ファイルを取得する方法

既存の Android プロセスが強制終了され、その結果、tombstone ファイルがすぐに生成される状況をシミュレートする必要があります。

それを達成するために、次のコマンドシーケンスを使用します。

残念ながら、"-6" シグナル (およびその他の可能なシグナル) は、トゥームストーンが生成されるという事実を保証しません。

アプリケーションを変更せずに保証付きで生成された墓石を取得する方法についてのアイデアはありますか?

ありがとう!

0 投票する
2 に答える
1031 参照

android - Monkey Test 使用時に設定に入らないようにする方法

Androidデバイス(LG G4)でアプリケーションを使用してモンキーテストを行っています。

コマンドは

adb shell monkey -p {package name} -v 2000

しかし、誤って設定に入り、デバイスのデフォルト値を変更する可能性があります。

それを防ぐ方法は?

0 投票する
1 に答える
195 参照

monkeyrunner - monkey_recorder.py の実行エラー: 不一致の入力 'monkey_recorder' が NEWLINE を期待しています

レコーダーを実行するために monkeyrunner コマンドを使用しようとすると、エラーが発生しました。これが私のコマンドのスクリーンショットです。 ここに画像の説明を入力

0 投票する
1 に答える
202 参照

java - モンキーテストjava.io.filenotfoundexception

コードのどこでスローされた例外を知る方法は? ログから、ファイルが作成されていないと推測するかもしれませんが、どのファイルを見つけるか

0 投票する
1 に答える
483 参照

android - モンキーコマンドの「1」の意味

私は最近、Android に関する本を読みました。その本では、サル スクリプトを実行するための以下のコマンドが導入されました。

このコマンドを検索して、 f の意味を見つけました。しかし、「1」について検索したところ、何も見つかりませんでした。この「1」はどういう意味ですか?