見出し画像

スペースマーケットアプリのテスト自動化の取り組み

こんにちは、スペースマーケットでエンジニアをしているほりです。
サーキットでドリフトしたらガードレールに当たってしまい車を修理中です。

画像1

今回は、スペースマーケットが展開しているモバイルアプリでのテスト自動化についての取り組みを紹介したいと思います。

前提

今回モバイルアプリでテスト自動化を導入した目的は、大きく3つあると考えています。

・現状の品質(技術的な品質)を知り、次回リリースに品質を落とさないようにするため
・手動テストの工数を削減するため
・リファクタリングをしやすくし、更に品質向上を目指すため

iOSアプリ

UIテストフレームワークとして、XCUITestを採用しています。
ただ、テストの数が多くなってくると、どうしてもテストの実行時間やテストコードのメンテナンスがネックになってきます。

そのため現状Fatなコントローラーに対してXCUITestを入れている部分は、適切なモジュールに分けるようにリファクタリングして、モジュールごとにXCTestでテストを書いていくことで、UIとロジックを分離して、テストの実行時間を短縮できるようにするのがポイントかと思います。

そのため、検討中ですがWebで採用実績があり、使い勝手もいいことからUIテスト兼E2EテストのSaaSであるAutify for Mobileの採用も今後視野に入れています。
https://autify.com/ja/mobile

Androidアプリ

UIテストフレームワークとして、Espresso + テストレコーダーを採用しています。
https://developer.android.com/studio/test/espresso-test-recorder?hl=ja

テストの作成はレコーディングで行うことができ、自動でテストコードが組み立てられるので、そのテストコードをカスタマイズするなどの対応をしています。

Firebase TestLab

複数のデバイスでの実行確認としてFirebase TestLabを使用しています。
https://firebase.google.com/docs/test-lab?hl=ja

任意の操作の自動実行の他にも、Roboによるモンキーテストも行ってくれるため、予期しない操作などによるエラーやクラッシュが無いか等を確認することができます。

(ただ、動作的に不安定な部分があったり、CIと連携しづらいなど、使い勝手がいまいちな部分があるのも、個人的に感じます。)

まとめ

UIテストを導入することで、リファクタリングに大きく踏み込むことができるようになります。

リリース前に自動でリグレッションテストを行うことで、既存への影響を最小限の工数で確認することができるようになります。

また、今後の課題として

・CIでの実行
・カバレッジ不足

等があり、しっかり日々の運用に乗せられるように解消していこうと思います。

選定、導入で気をつけたポイント

以下のことについて気をつけました。

・テストを書くことで工数が爆増することは防ぎたい
・新規画面/既存画面どちらでも導入ハードルが低いこと

となると、やはり実際の操作をレコーディングしながらテストを用意することができる、AutifyやEspressoテストレコーダーであれば、負担が少ないのではと判断しています。

最後に

バックエンドエンジニア積極採用中です!
マイクロサービスに関心がある方、ぜひ一度お話できればと思います!

今回、キャンプができる/キャンプが味わえるスペースのリストを作成してみました。
ぜひ、焚き火でもしながら好きな本を読んでみましょう。
https://www.spacemarket.com/shared/favorite_lists/BWx5eMmBed130W81

この記事が気に入ったらサポートをしてみませんか?