こんにちは、ヤプリでQAを担当している望月です。
子育てに生命を燃やす一方で、最近はDjangoとSREがマイブームです。
今回はヤプリにおけるテスト自動化の取り組みについて紹介したいと思います。
なぜ自動化?
現行体制のQAが発足して半年ほどになりますが、これまでは主にQA文化の定着・各種QA/リリースプロセスの構築を中心に進めてきました。
その間にも会社の成長に伴って多数のエンジニアがジョインし、開発スピードがどんどん上がっています。
そのためQAもさらに強化すべく、体制強化は進めながらも今の段階から自動化で解決できる課題にも取り組んでいきたいと考えています。
まずは直近の課題を解決
ヤプリをご利用いただいている各アプリは、ページのデザインなどこだわって作り込まれていることが多いです。
そのため、プログラム修正により表示が1pxずれるような不具合が混入しても、アプリユーザーのUI/UX上で大きな問題が生じる可能性があります。
しかし、リリース毎にピクセル単位まで考慮してパターンを網羅することは実質不可能なため、実際に運用中のアプリを用いて影響がないかをチェックすることが現実的です。
ただ現時点で250を超えるアプリがあり、また今後も増え続けることを考えると、目視でのチェックは難しい状況です。
この課題に対して、まずは取り組み第一弾として自動化での解決を試みています。
なるべくシンプルな処理に
最初なのでなるべくシンプルに、各ページのスクリーンショットを自動で取得して、前バージョンと比較する方針としました。
- AppiumでiOS/Androidアプリの各ページを表示
- 各ページでスクリーンショットを取得
- 前バージョンのスクリーンショットと比較
- 差異があるページはSlackに通知して目視でチェック
作っただけで終わらせない
各アプリは定期的にセール情報が掲載されたり、季節物のページが追加されたり、ページ構成が頻繁に変わります。
自動化にあたって運用後のメンテナンス性は重要ですが、上記変化への対応ができないといずれ利用されなくなってしまいます。
今回は2段階の対応により、メンテナンス性の向上を図っています。
「Appiumの実行スクリプト」と「ページ構成の情報」を別管理
各アプリでページ構成の情報をyamlで定義して、Appiumの実行スクリプトはyamlをロードして順番にページ表示・スクリーンショット取得するだけの流れにしました。
これにより、
- ページ構成が変わっても、実行スクリプトに手を入れず定義情報の変更のみで対応可能
- 新しくアプリが増えても、定義情報の追加のみで対応可能
- yamlなので非エンジニアでもある程度の調整が可能
などの効果を狙っています。
「ページ構成の情報」を自動生成
こちらはToBeですが、アプリのページ構成などの情報が更新されたら、その更新データを元にyamlの定義情報を自動生成する仕組みを検討中です。
ここまで実現すればメンテナンスの自動化にも繋がるため、意欲的に取り組んでいます。
最後に
まだ開始したばかりで効果計測はこれからですが、今後も手動/自動それぞれが有効な箇所を見極めながら自動化を促進していきたいと考えています。
既にこれ以外にプッシュ通知の到達確認を自動化したり、ブラウザベースのスモークテストをSeleniumで実行したり、アナリティクスデータを自動で検証するなどの取り組みを開始していますので、また機会がありましたら紹介できればと思います!