こんにちは、カケハシでMusubi Insightのバックエンドエンジニアをしている末松です。
こちらの記事はカケハシ Advent Calendar 2021の 14 日目の記事になります。
半年ほど前の話にはなりますが、Musubi Insight チームにおいてローコードテスト自動化の SaaS であるmablを導入することで、リリースにかかっていた工数を半減させることに成功しました。
今回は、その mabl を導入した背景や実運用に至るまでの工程、そして学びを紹介したいと思います。
mabl の向き不向きなテストやつまづきポイントなども記載してますので、最後まで読んでいただけると嬉しいです。
mabl とは
早速ですがまずは mabl について軽く。
mabl はローコードでテストを自動化できる SaaS で、E2E(End to End)テストだけでなく API テストの自動化も可能なサービスとなっています。
mabl のデスクトップアプリから立ち上げることができるmabl Trainer
上でブラウザアプリを操作するだけで、その操作を実行するテストを作成可能です。
操作の記録だけでなく、以下のようなテストや処理を作成することもできます。
- html 要素のテキストや選択状態の評価
- 条件分岐や繰り返し処理
- 特定の要素が表示されるまで待機
その他複数ブラウザでのテスト実行やAI によるテストの自動修正などが特徴的です。
詳細はリンクを参照ください。
チームの課題感
Musubi Insight チームではリリースサイクルを 1 週間と定めており、毎週検証作業を行った上でリリースを行なっています。
検証作業では、Musubi Insight における全ての機能の検証手順が記載されたチェックリストを元にチームメンバーで分担して確認作業を行なっていましたが、Musubi Insight の機能増加に伴い検証作業量とそれに要する時間も増加していきました。
また増えた検証作業を時間内に終わらせようとするあまり、1 つ 1 つの検証の質が落ちていることも課題でした。
検証項目の肥大化
mabl 導入を検討していた 2021/04 時点で Musubi Insight は開発開始から 1 年半ほど経過しており、約 20 ページもの機能を有していました。
合計すると 700 近くにも及ぶ検証項目を、当時は 4 名(エンジニア 3 名・スクラムマスター 1 名)で毎週検証作業を行なっていました。
E2E テスト作成の属人化
検証項目の肥大化を受け、E2E テストを実装することで検証作業の削減を目指す方針にチームは舵を切りました。
Musubi Insight は Angular フレームワークで実装されていたため、Angular のテストフレームワークであるProtractorを採用。
しかしチームのエンジニア構成がフロントエンド 1 名・バックエンド 2 名ということもあり、Angular の成熟度に少なからず差が。
3 名でのモブプロを定期的に開催して E2E テストの作成やメンテナンスを行うなどしてその差を埋めようと試みましたが、自然とフロントエンド担当の 1 名に E2E テストの作成とメンテナンスが偏っていってしまいました...
チームの課題にどう mabl がフィットしたか
ここまでのチームの課題感はこちら。
- 機能増加による検証項目の肥大化
- 特定の技術領域への依存による属人化
このような状況下でカケハシ全社として mabl の導入検討が始まり、Musubi Insight チームでも mabl のテスト導入を進めていくことに。
そのテスト導入の中で、チームの課題に対して mabl がフィットすることがわかってきました。
1. 特定の技術領域に依存せずローコードでテストが作成できるため、誰でもテストを作成することができる
シンプルなテストであればコードを書くことなくテストを作成することができるため、アプリケーションやその技術に精通していないメンバーでもテスト作成を任せることができます。
エンジニア以外のメンバー(スクラムマスターやプロダクトマネージャー)でもテスト作成は可能です。
2. 直感的にテストを作成することができる
Protractor などのテストフレームワークで E2E テストを作成する場合、テストしたい要素を開発者ツールなどから探し出す必要がありました。
mabl ではテストしたい要素をクリックするだけで特定することができるため、直感的にテストを作成することができます。
(CSS セレクタによる要素の特定も可能)
mabl を導入して運用を回すまで
テスト導入を経て本格的に mabl の導入を進めることになりました。
この章では、どのような工程で実際に運用を回すまでに至ったのか紹介したいと思います。
フローを活用して共通部分を使い回し
mabl ではFlow
を作ることで複数のTest
で使いまわすことが可能です。
Musubi Insight においても各ページのテストで共通の要素がありました。
ログイン
mabl の
Test
はそれぞれログイン画面に遷移するところから始まるため、毎回ログインが必要です。薬局・薬剤師選択
どの薬局・どの薬剤師にフォーカスして各種指標を確認するかを検索・選択することができます。
表示期間の選択
どの粒度でグラフを表示するのか選択することができます。
ページによって若干仕様が異なる場合でも、以下のように対応することができました。
Flow
のパラメータをTest
ごとにオーバーライドする(下画像)Test
の中でパラメータを参照してロジックを分岐する
このように共通のテストをFlow
で作成して使いまわすことで、効率的にTest
を作成していきました。
Plan を作成してテストを列挙
次に複数のTest
をまとめるPlan
を作成していきます。
Plan
を実行することで、複数のTest
を並列で処理させることができるため効率的です。
(参考: 1Test
の所要時間は大体 5~15 分くらいなので直列で実行すると数時間かかる)
また、後述の CI/CD インテグレーションで使用するためラベルを付与します。
GitHub・Slack との連携
運用を回すためには、CI/CD に乗せることが大事です。
mabl も CI/CD インテグレーションには力を入れており、様々なツールと連携が可能です。
Musubi Insight チームでは、GitHub Actions と連携して mabl のPlan
を実行させるように組み込みました。
- リリース前に mabl テストを動かしたいため、プロダクションブランチである
main
ブランチへの PR 作成をトリガーにする Plan
につけたラベルMusubiInsightPlans
を指定
その他の設定項目に関してはこちらを参照ください。
name: mabl E2E Test on: pull_request: types: [opened, reopened] branches: - main jobs: test: name: Mabl Tests runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v2 - name: Run mabl Flow id: mabl-test uses: mablhq/github-run-tests-action@v1 env: MABL_API_KEY: ${{ secrets.MABL_API_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: environment-id: <environment-id> plan-labels: | MusubiInsightPlans
GitHub から実行されたPlan
の結果は、Slack に通知されるように設定しています。
詳細な設定手順は省きますが、mabl 側で設定するだけでその設定内容に基づいて自動で通知されます。設定手順
運用開始
毎週の検証の準備段階でプロダクションブランチへの PR を作成しておくだけで、mabl によって自動でテストが実行されるようになりました。
膨大な検証手順書から mabl によって自動化できた項目を除外し、残りの項目をチームで分担して検証していきます。
そして mabl のテスト作成を恒常化させるため、新規機能を開発する際の簡単なルールを設定しました。
- リリースする前には必ず検証手順書を作成すること
- その手順書を元に、可能な範囲で mabl によるテストを作成すること(ただしリリースには間に合わなくても OK)
mabl の運用を開始してから約半年が経過しましたが、結果的にその間に追加された 9 つの機能全てにおいて mabl テストが作成されており、カバレッジを維持することに成功しています。
mabl を導入した結果・学び
mabl を導入したことで、700 あったテスト項目のうち約 300 を mabl によって自動化させることができました。
カバレッジは約 40%と高くありませんが、Protractor で実装した際は 10%にも満たなかったことを考えるとチームにとっては大きな進歩でした。
mabl の向き不向き
カバレッジの残り 60%の中には、
- mabl による自動化の余地があるテスト
- mabl では自動化が難しいテスト
の 2 種類が存在します。
どんなテストだと mabl で自動化しやすくてどんなテストだと難しいのか、mabl を半年間触ってきて分かったことの一部を紹介します。
自動化しやすいテスト ① 単純で工程が多いテスト
クリックやテキスト入力を行った上で、要素がどうなったのかを検証するテストは mabl で自動化しやすいです。
Musubi Insight で例えると、薬局名での絞り込みが該当します。
こういったテストは様々な操作を経て状態を検証するため、工程が長くなりがちで人が検証するには単純作業でつらいものがあります。
上画像は Musubi Insight における薬局名での絞り込みをしている様子。
絞り込みをするとどうなるのか、絞り込みを解除するとどうなるのか、存在しない薬局名を入力するとどうなるのか、など工程が長くなりがちです。
自動化しやすいテスト ② 日付表示の正しさを検証するテスト
例えば、アプリケーション上で先週の月曜の日付が表示されていることを検証したいケースなどが該当します。
人がそれを検証する場合、カレンダーを開いて先週の月曜がいつか確認したり頭の中で計算したりと面倒で、これまたつらいものがあります。
mabl では javascript を動かすことができ、その結果を mabl 上で利用することができる変数として扱うことができます。
Musubi Insight では表示期間の絞り込みにおいて「昨日」「先週」「先月」といった選択肢があり、その選択によって画面に表示される期間が動的に変化します。
この表示期間が正しいことを人の目で確認するのは非常に大変だったため、自動化されたことでその作業から解放されることができました。
自動化が難しいテスト ① canvas 要素内のテスト
Musubi Insight は薬局経営のための所謂 BI ツールであるため、グラフが多く表示されます。
グラフは canvas 要素内に配置・表示されているのですが、canvas 要素の中の情報を mabl で取得することは難しいようでした。
そのためグラフ内の表示内容や色分けなどを自動化することはできておらず、現在も手作業で確認をしています。
自動化が難しいテスト ② テーブル内の数値のテスト
Musubi Insight ではグラフ以外にも、テーブル上に数値が列挙されているページが存在します。
そのテーブル内での数値の整合性をテストしたい場合、
- テーブルのデータをまるまる変数として取得する
- テーブルの列と行を指定して 1 つの数値を変数として取得する
などの方法が考えられますが、これらの方法はまだ mabl では対応していなさそうでした。
少し補足をすると、
1 つの数値を変数として取得する
これは mabl で実現できるのですが、列と行の指定をすることができないためテストの度に違う数値を取得する可能性があり安定性に欠く印象です。
(例えば「薬歴当日完了率」=「薬歴当日完了数」/「処方箋受付回数」x 100
であることを検証したい)
mabl のつまづきポイント
mabl を導入する中でつまづいたポイントも紹介します。
mabl のつまづきポイント ① local 実行はうまくいくのに cloud 実行をすると失敗する
mabl には local 実行と cloud 実行がありますが、cloud 実行ではマルチブラウザでのテストや AI によるテストの自動修正などの他、個人の環境に左右されないなどのメリットがあります。
そのためチームでは mabl のテストを全て cloud 実行するようにしているのですが、cloud 実行が成功するまでにいくつかの壁がありました。
- cloud 実行は海外のサーバー上で動作するため、地理的制限をかけているとログインすらできない
- mabl のサーバーは 3 種類の固定 IP アドレスが使われているため、それらを許可することで回避
- cloud 実行がされるサーバーの時刻は UTC(協定世界時)に設定されているため、JST(日本標準時)を前提にしているとテストが失敗する
- 地理的に遠いからか処理が若干重くなり、画面表示が全て終了する前に次のテスト項目に進んでしまい失敗する
- とりあえず Wait 処理を入れることで対応
mabl のつまづきポイント ② なかなかチームに mabl が浸透せず、テスト作成が進まない
mabl は今までにあまりない SaaS であるため、自分含めてチームが慣れるまでに時間がかかった印象があります。
エンジニアメンバー全員で一緒に mabl を触る機会を何度か作り、その後分担して各自テストを作ってみることでようやくスタート地点に立つことができた気がします。
一度テストが作れるようになると mabl に興味が湧くようになり、他にはどんな機能があってそれはどのように活かすことができるかを各自が考えるようになってからはスムーズでした。
また社内で mabl に関して情報共有をする slack チャンネルが作られたり、チームで作った mabl テストを見せ合うデモ会が開催されていたのも成功への大きな要因だったかもしれません。
今後の展望
mabl によるテストカバレッジを向上させることはもちろん、
頻繁にアップデートされる mabl の機能をキャッチアップしてメンテナンス性の向上などに努めていきたいと思っています。
今興味がある機能・アップデートはこの 2 つです。
mabl では API のテストも作成できるようなので、そちらにもチャレンジしていきたいですね。
最後に
ここまで記事をご覧いただき、ありがとうございます。
カケハシではアプリケーションエンジニア、フロントエンドエンジニア、デザイナーをはじめ、多くの業種で採用を強化しています。
- 運用改善や開発環境の改善にも積極的に取り組んでいきたい
そんなエンジニアの方と一緒に仕事できると嬉しいです!