[iOS]MonkeyTalkの導入と挫折

こんにちは。エンジニアの藤原です。

マネーフォワードでは、iOSアプリのUIテストの自動化を行っています。
以前は、UIテストを手動で行っていた時期もありましたが、アプリが大きくなり修正によるデグレッションを効率的に回避するために、UIテストを自動化して継続的にテストしています。

その流れのなかで、MonkeyTalkを使いUIテストを実施しようとしました。
が、テストスクリプト実行中にアプリがクラッシュしてしまう不具合があり、使用断念に至りました。

ということで、失敗談の経緯と不具合の内容をご紹介します。
iOSアプリへのMonkeyTalk導入を検討中の方々のご参考になれば幸いです。
 

UIテストフレームワークの選定

iOSのUIテストのフレームワークはAppiumKIFCalabashなどがありますが、社内で検討した結果MonkeyTalkを導入することにしました。

選定の決め手となったのは、初期設定のしやすさ、テストスクリプトのレコーディングができることの2点でした。
 

テストの作成

導入にはそれほど手間はかからず(※下記「参考」参照)、テスト自体も
1. シミュレータの動作をレコード
2. スクリプトを修正
の流れで簡単にテストが書け、テストの作成が苦になりません。
 

クラッシュ

しかし、何種類かテストを書いてみたところ、あるテストで必ずアプリがクラッシュしてしまう現象が発生しました。
テスト自体は簡単なもので、あるUI要素をタップすると画面が遷移する、というものでした。

その他のテストではそれまでクラッシュすることはなかったので、差異を調べ問題を切り分けていったところ、タップしている要素がUIGestureRecognizer付きのUIViewである場合に発生することが分かりました。

下記のようなUIViewControllerを用意し、下記のMonkeyTalkScriptを走らせるとEXC_BAD_ACCESSが発生しアプリがクラッシュします。
(XCode 6.3, libMonkeyTalk-2.0.10, MonkeyTalkIDE 2.0.10で確認)

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTappped:)];
    [self.tappableView addGestureRecognizer:tapGesture];
}

- (void)viewTappped:(UIGestureRecognizer *)sender {
    NSLog(@"tapped");
}
@end

View tappableView Tap

公式フォーラム等を調べても類似する報告はなかったため調査が難しく、弊社のアプリではUIViewをタップ可能にしている箇所が複数あるため、クラッシュが回避できない限り使用することが難しいと判断し、別のフレームワークを使用することを検討しています。

レコーディング機能が使いやすいだけに残念です。
 

まとめ

今回は導入後に不具合が見つかり導入を断念しましたが、そもそも選定の時点で実際に書くテストを幾つか書いてみていれば避けられた可能性がありました。

UIテストにかぎらずフレームワーク選定時には実用してみることが大事だと感じました。

この不具合は公式フォーラムに投稿し、返信がありましたら結果を追記する予定です。

MonkeyTalk導入検討の一助になりましたら幸いです。
 

参考

※ MonkeyTalkの初期設定は以下のサイトを参考にさせていただきました。
スマホ向け無料システムテスト自動化ツール(1):システムテスト自動化の基礎知識とMonkeyTalkの使い方(1/4) – @IT http://www.atmarkit.co.jp/ait/articles/1407/16/news037.html
 

最後に

マネーフォワードでは、失敗を恐れずチャレンジするエンジニアを募集しています。
下記サイトにてご応募お待ちしております!

【採用サイト】
『マネーフォワード採用サイト』 https://recruit.moneyforward.com/
『Wantedly』 https://www.wantedly.com/companies/moneyforward

 
【プロダクト一覧】
家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 https://moneyforward.com/
家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 iPhone,iPad
家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 Android
クラウド型会計ソフト『MFクラウド会計』 https://biz.moneyforward.com/
クラウド型請求書管理ソフト『MFクラウド請求書』 https://invoice.moneyforward.com/
クラウド型給与計算ソフト『MFクラウド給与』 https://payroll.moneyforward.com/

Pocket