見出し画像

タクシーアプリ『GO』のE2E自動テスト概要

はじめに

初めての方ははじめまして、そうでない方はこんにちは。
タクシーアプリ『GO』のGO株式会社、QAエンジニアの松見です。

『GO』のプロダクトでもご多分に漏れずテスト自動化に取り組んでおりますが、『GO』をE2Eでテストするには少なくとも2つ以上の異なるアプリを連携した自動テストを構築する必要がありました。これは筆者にとって未知の経験でしたので、概要レベルでまとめたいと思います。


E2Eテスト自動化の背景

まずそもそも何故わざわざE2Eでのテストを自動化するのか?という点はここでは割愛することにします。アプリ単体での自動テストは既に部分的に実現されていますが、今はE2Eでの自動テストが必要でした。

『GO』サービスE2Eテストの課題

プロダクト間連携

『GO』のサービスは複数のプロダクトが互いに連携して成立しています。
このため、E2Eで自動テストするにはそれぞれをいい感じに連携させる必要がありました。

GOのタクシー配車システム

特殊な機器構成

また、『GO』のプロダクトの中でも乗務員向けプロダクト群は専用端末と業務用機材によって構成されており、実機でテストできることが大きな要件の一つでした。

乗務員向けプロダクト群

やっぱりノーコードで自動化したい

そんなちょっと特殊なシステムの自動テストとなるとAppiumなりでスクラッチすることを考えると思いますが、運用を視野に入れると自分以外がメンテできないシステムを構築しても後で大変になることは火を見るよりも明らかなので誰でもメンテできることも大切でした。

そんな都合の良い自動テストプラットフォームがあるのか?
あるんですね。

MagicPodによるテスト自動化

MagicPodはノーコードでWebサイト&モバイルアプリの自動テストを作成できるクラウドサービスです。

イマドキのノーコードというのは思ったよりも快適で、『コレなら誰でも作れる』という確信を得られるものでした。ノーコードゆえの不便さのようなものを懸念される方も多いと思いますが、だいたいテストに必要なことははじめから備わっています。

今後実装予定の機能も多く、少なくとも複雑な『GO』のサービスを自動テストできるだけのポテンシャルを感じさせるには十分なものでした。

アプリ連携自動テストの構築

ここからはMagicPodのどのような機能を使って『GO』のE2Eテスト環境を構築したかについてお話しします。

『並列実行』を使う

異なるアプリを連携して動作させるにあたり、骨子となるのは並列実行機能です。一般的には自動テストの実行時間を短縮するために使うと思います。

並列実行のイメージ

この機能であれば異なる端末・異なるアプリ同士を同時に操作することができるため、一つのシナリオとして実行することができるようになります。

GOプロダクトの並列実行

もちろん、これだけでは 単に同時にテストが動いているだけ で思うように動いてはくれません。

『〇〇まで待つ』コマンドを使う

MagicPodには『〇〇まで待つ』といったコマンドが多数用意されているため、画面遷移や画面要素の変化をトリガーにテストシナリオを動作させることが出来ます。

MagicPod 待機コマンド群

マッチング後のユーザー向けアプリと乗務員プロダクトは相互に連動して画面遷移や画面の変化が起きるため、これらの検知をトリガーとした自動テストを構築することで無理なく連動したテストを構築することができました。

互いに連動しながらシナリオが進んでいく

もちろん、この方法はアプリ上で互いの状態を知ることができない状態では使うことができません。

『WebAPIコール』コマンドを使う(重要)

アプリ上で互いの状態を知ることができない状態でも連携させるために、テスト用のAPIを新たに作成し、疎通を行うことにしました。

MagicPodには『WebAPIコール』というコマンドが用意されており、一通りのAPIリクエストを自動テスト上任意のタイミングで行うことができます。

MagicPod WebAPIコールコマンド

『WebAPIコール』コマンドでは戻り値を変数に保存することができるので、対向アプリが特定の状態になるまで待機を続けたり、対向アプリの状態に応じて適切な変数をセットするなどより柔軟なテストが可能になりました。

テスト用APIによる疎通

テスト用APIの開発

『WebAPIコール』で叩くAPIはGAS(Google Apps Script)で実現しました。手軽にサーバーレスAPIを構築できるというのも一つの理由ですが、GASを用いることでGoogleカレンダーやスプレッドシート等のGoogle系サービスとの連携が容易であるということに可能性を感じたためです。

GASを介したテストパラメータ連携

一方で運用を視野に入れると、テスト用のAPIを開発し続けるという業を背負った気がしなくもありませんが………未来の私がなんとかしてくれるでしょう。

さいごに

『GO』のような特殊なサービスも標準機能を組み合わせるだけで(ほぼ)ノーコードで自動テストを構築できることがわかりました。

ノーコード開発環境での構築は必要な機能がプラットフォームに備わっているかどうかに大きく依存するという懸念があると思いますが、イマドキの自動テストプラットフォームはリリースサイクルが短く、近い将来必要な機能が実装されるだろうと楽観視できるのは追い風になっているのだと感じました。

多くのサービスにとって適切なタイミングで価値を提供することは重要な競争力であり、それを実現する技術を身に着けていくことが我々エンジニアのミッションなのだと思います。

GO株式会社では、私たちと一緒にチャレンジしてくれる仲間を募集中です。
興味のある方は採用ページからご連絡頂けると嬉しいです!


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