山奥の自宅勤務エンジニアブログ

システム開発技術、データ分析関連でお勉強したことや、山奥生活を綴る、テンション低めなブログです。

自動でiOSアプリのモンキーテストをやってくれるCrashMonkeyを試してみた

CrashMonkeyとは

iOSシミュレーターにインストールしたアプリをランダムに操作して、いわゆるモンキーテストを自動的に繰り返し実行して、エビデンスを残してくれるツールです。

mokemokechicken/CrashMonkey · GitHub

iOS 向けモンキーテストツール CrashMonkey を公開しました (ゆめ技:ゆめみスタッフブログ)

動作イメージ


Crash Monkey Demo

インストール

rubyで動くので、以下のようにgemをインストールするだけです。

$ gem install crash_monkey

使い方

gem をインストールしたら、iOSシミュレーターにインストールしてあるアプリを指定して起動するだけです。アプリのソースコードに手をいれる必要はないです。

$ crash_monkey -a Hogehoge.app

起動オプション

-nでテストを行う回数、-t で1回のテストの秒数を設定できるようです。

% crash_monkey
Usage: crash_monkey [options]
    -a app_name                      Target Application(Required)
    -n run_count                     How many times monkeys run(default: 2)
    -d result_dir                    Where to output result(default: ./crash_monkey_result)
    -t time_limit_sec                Time limit of running(default: 100 sec)
    -c config_path                   Configuration JSON Path
        --show-config                Show Current Configuration JSON
        --list-app                   Show List of Installed Apps in iOS Simulator

結果の見方

テストを実行したフォルダの直下にcrash_mokeny_resultというフォルダができ、そのフォルダの直下にindex.htmlが作成されているので、これをブラウザで見ると各テストの結果を一覧で見ることができます。

f:id:sessan:20131012164356p:plain

ランダムな操作の特徴を設定する

JSON形式で設定ファイルを作成すれば、ランダムな操作の特徴をある程度指定できます。
設定ファイルのフォーマットは--show-configオプションで確認できます。
タップを多めに、とか、そういった設定ができそうです。

$ crash_monkey --show-config
{
    "numberOfEvents": 100000,
    "delayBetweenEvents": 0.05,
    "result_detail_event_num": 20,

    "eventWeights": {
        "tap": 500,
        "drag": 100,
        "flick": 100,
        "orientation": 1,
        "clickVolumeUp": 1,
        "clickVolumeDown": 1,
        "lock": 3,
        "pinchClose": 50,
        "pinchOpen": 50,
        "shake": 1,
        "deactivate": 3
    },

    "touchProbability": {
        "multipleTaps": 0.05,
        "multipleTouches": 0.05,
        "longPress": 0.05
    }
}

注意点

ログイン画面などがあるアプリでは、指定したユーザーID/パスワードを入力して欲しいところですが、それらを指定する手段は用意されていないようです。

もし、そのアプリが、一度ログインすればログイン情報をKeyChainなどに保存して、しばらくログイン操作なしでセッションが継続するような作りになっていれば、一度、CrashMonekyを使う前に手動でログインして、セッションを作っておく、などの準備をすればその後のランダムな操作はCrashMonkeyに任せることができます。

あと、コマンドラインから起動時に、テストの繰り返し毎に毎回OSのユーザー名とパスワードが聞かれてしまうので、シェルスクリプトなどでそれを入力するようなものを作っておくと良さそうです。

これで、夜中とかにモンキーテストを実施しておき、細かいバグを見つけさせる、などができそうです。試していませんが、JenkinsなどのCIツールと連携もすることができるようです。