マネーフォワード MEのiOSエンジニアの椎名です。
今回は、MEにテストツール Magic Pod
を導入した時の話と、そこで得た知見やMEでの活用方法をお話できればと思います。
テストでお悩みの方は是非御覧ください。
導入の経緯
MEではユニットテストのコードがほとんど無く、うまく自動テストが運用できているとは言えない状況で、品質の担保はQAテスターに頼っていました。 とはいえ、人によるテストには限界があります。テストのスコープが広がれば工数も大きくなりますし、その分ミスも増えます。
そこで、MEではE2Eテスト導入導入の試みがされることになりました。 なぜE2Eテストなのかというと、以下の理由があります。
- MEの運用ではユニットテストを網羅的に書く事は、過去の知見から得策ではなさそう
- そもそもQAの負荷を減らす事が発端なので、QAがしているテストに近い方法が良さそう
はじめにE2Eテストツールを自前で実装する事を考えましたが、想像以上に機能が複雑になる事と、WebViewは対応が難しい事、導入後のメンテが大変という課題がありすぐに断念... そんな時、Magic Podの記事を見つけました。
Magic Podとは
TRIDENTさんが提供する、WebとモバイルアプリのE2Eテストをノーコードで自動化するクラウドサービス
です。
(MEではWebへの導入はまだしていませんので、以下モバイル前提、主にiOSでの導入の話となります)
特徴として以下があります。
- 導入企業は500社以上
- クラウド実機テストは、BrowserStack/HeadSpinなどを使ってできる
- Magic Pod単体では実機でのテストは出来ない。基本シミュレーターでのテスト
- カメラや課金などの検証はできない
- Magic Pod単体では実機でのテストは出来ない。基本シミュレーターでのテスト
- 日本語対応していて、エンジニアでなくともテストケース作成できる
- UI変更があっても、一部AIが自動修復してくれる
- BitriseStepがある。CircleCIとも連携できる
- プラン
- 他社と比較してもお手頃な印象
- スタンダードから追加料金でテストケース数を足せる
- ユーザ数制限無し
Q&A
実際に導入にあたって、TRIDENTさんにヒアリングさせていただきました。 そのときのQ&Aの一部を共有しますので、ご参考になればと思います。
Q. SwiftUIでも対応できますか? A. おそらくできます(特に出来ないと報告は来ていないです)。Flutter,Unityは今は出来ないです Q. WebViewはテストできますか? A. 可能です。Cordovaでも実績があります (ASWebAuthenticationSessionやSafariViewControllerなども、MEで使用する範囲は問題ありませんでした) Q.表示までの待機は可能でしょうか? A.できます。リトライも出来ますし、待機時間が設定できます Q.ディープリンクはテストはどうすれば良いでしょう? A. 今無いです。要望があったことを課題登録します Q. テストの編集履歴を保存する機能はあります? A. 要望が多いので、今年中に対応する予定です Q. iOS/Android共通テスト可能ですか? A. ネイティブは難しいです。WebViewであればできます Q. プランに対して複数のプラットフォームのテストは可能ですか? A. できます Q. エンタープライズプランでない場合は、どういった方法で認証していますか?また二要素認証はありますか? A. 独自のものは無いです。GithubでOAuth認証できます
テスト方法
具体的なテスト方法や、環境構築については割愛します。 詳細は以下のTRIDENTさんの資料を御覧ください。
MEでの運用例
MEでは主にデグレ検出(リグレッションテスト)に活用していて、深夜にBitriseを使って定期実行されるようになっています。
当初は新規施策に対してもテストを回そうとしていたのですが、テストケースの作成
とテストの実行
は思ったより時間のかかる作業だったため、スピードが要求される状況ではQAによる手動テストを行うようにしています。
(テストの実行は、MEの場合だと最長90分程度)
テストケースの作成については、現在、QA(非エンジニア)が中心に行っています。 レビューや運用ルールはエンジニアも関わったほうが良さそうですが、作成作業に関してはエンジニアリングのスキルは特に必要無いので、大部分をお任せしています。
実際使ってみてどうだったか?
以下、QAから使用感をヒアリングしたり、実際使ってみてわかった事をPros / Consに分けて記載します。
Pros
- 非エンジニアでも問題なく作成できた
- 所々ハマるポイントがあるので、エンジニアのサポートは必要
- テスト実行時にスクリーンショットが保存される
- テスト失敗した場合、どこで失敗したのか見やすい
- テスト成功した場合も、ざっと見直すことで大きな表示崩れは目視で見つけられる
- Slackやフォームでのサポートが早い
- 全画面チェックするような、広範囲のテストでは手動より圧倒的に低コスト
- ドキュメントが充実している
- BitriseStepの導入も迷うこと無くできた
Cons
- 通信エラーのテストが出来ない
HTTPのstatusCodeが50Xのとき処理Aをする
みたいな検証が出来ないと困るので、MEでは通信をわざと失敗させるデバッグ機能を実装することで対応
- スクリーンショットからUIの要素を抽出する仕様上、TDDは難しいかもしれない
- 調整がシビアな箇所がある
- テストケースとしては合っているのに、失敗することがある
- 大抵は、待機時間やリトライ処理をすることで回避できる
- 共有ステップを解除できない
- 共有ステップをテストケースに取り入れたあとに、共有ステップ解除したいケースがある
テクニック
Magic Podを使ってみて、こうしたほうが良さそうな事、または上手くいった事をまとめました。 サービスによっては参考にならないものもあるかもしれません。
- テストケースを作成する際はローカル環境を使う
- クラウドだと遅い
- クラウドだと要素の抽出がうまくいかない事がある
- テスト実行はできるだけクラウド環境を使う
- ローカル環境だと、その場の通信環境によっては失敗してしまう
- ローカルでテスト実行すると、たまに不安定なときがある
- ログインが必要なサービスの場合、テスト専用のアカウントを用意する
- 表示内容がユーザによって変わるサービスの場合は、専用のアカウントでないとテストの精度が落ちたり、そもそも通らない事がある
- うまく要素が抽出出来ない場合は、要素情報のselectBoxで別のものを選択してみる
- それでも出来ないなら、ユニークIDを振る
- 共有ステップの始点は同じ状態にする
- MEではホーム画面にしている
- ログインなどの共通ロジックは除く
- 後始末の共有ステップを作成する
- ログアウト等、次のテスト実行ができる状態に戻す共有ステップを作成すると便利
マネーフォワードでは、エンジニアを募集しています。 ご応募お待ちしています。
【サイトのご案内】 ■マネーフォワード採用サイト ■Wantedly ■京都開発拠点
【プロダクトのご紹介】 ■お金の見える化サービス 『マネーフォワード ME』 iPhone,iPad Android
■ビジネス向けバックオフィス向け業務効率化ソリューション 『マネーフォワード クラウド』
■だれでも貯まって増える お金の体質改善サービス 『マネーフォワード おかねせんせい』