「自動化できたらうれしいテスト、してみたいテスト by T-DASH Advent Calendar 2023」4日目の記事になります。
自動化したい!
小さく迅速にスタートし、その後、細かいリリース単位で段階的なバージョンアップを繰り返していくという開発・デプロイスタイルが一般化している今日のプロダクト開発において、デグレードを防ぐためにE2Eテストの自動化は欠かせないものとなっています。
そのときに往々にして自動化できる対象から外れてしまうのが、実行環境のサーバ構成や端末、OS等プラットフォームによる動作の問題がないかという検証です。
しかし、これこそが手動テストでコストがかかる最大のポイントでもあり、エミュレータやコンテナ環境によって簡単にテストを自動化できるツールがあればいいのに、、と思います。
サーバ構成・ネットワーク構成
インフラに近いところで動作するある種のミドルウェアなどでは、サーバ構成によらず動作することの検証が不可欠となります。
しかし、テストのためのいろんな構成のサーバを社内(クラウド上も含め)に保持しておくのは経済的・人的コストになります。
Kubernetesなどを駆使して実現できる部分もあると思いますが、個人的にはなかなか設計も管理もハードルが高いと感じるところです。
(単に自分が弱いだけで、わかる人にとってはそうでもない?)
マルチプラットフォーム
React Navite や Flutter のようなマルチプラットフォームなフレームワークの開発では、いくらワンソースで開発可能であるとはいえ、iPhone, Android, Windows Desktop といった各プラットフォームでの動作検証が必要になります。
.NET Core 等でサーバーサイドで動作するアプリについても、Windows と Linux とそれぞれで挙動を確認する必要があります。
あるいはブラウザで動作するWebアプリケーションであっても、やはりブラウザ毎、少なくともレンダリングエンジン毎にはテストしておきたいところでしょう。
マルチプラットフォームで動作しますというテストツールはありますが、テストを動かすための環境をそれぞれ自分で用意する必要があるとなると、嬉しさは半分。
テストしたい全環境を全部テストツール側でエミュレートなどしてくれることが望みです。
マルチブラウザのテストでいうと、Playwright が Node.js 上で実行でき、Chrome, Firefox だけでなく Safari (WebKit) 上でもテストを動かすことができました。
十分に枯れていない部分もありますが、マルチブラウザでのテストとなると今のところこれが第一選択肢になるのかなと思います。
OSレベルでは、CI/CDパイプライン上でいろんなDockerイメージを使ってテストを動かす感じなら、ある程度実現できる部分もありますね。
マルチデバイス
マルチプラットフォームとも関連しますが、スマホ、タブレットやIoTデバイス向けのアプリケーションでは、基本的なAPIの動作が開発言語やフレームワークで担保されているとはいえ、細かい表示の調整やデバイス固有の動作に絡む部分では、それなりに一通りのデバイスでのテストを避けるわけにはいきません。
リリース前に外部の多端末テスト業者に検証を委託するという手もありますが、CIとしてはやはりテストの自動化を考えたくなります。
スマホに関していえば、クラウド経由で実機を操作できる有料のサービスというのがいくらか見つかるようです(試したことはありません)。
まとめ
前述のとおり、既存のツール&工夫によってある程度実現できる部分もありますが、個人的にはこのあたりの管理にリソースを割く必要なく、シンプル&安価に一元管理してくれるツールがあれば嬉しいなという欲張りな理想があります。
ちょうどT-DASH様ブログ記事 Windowsアプリをテスト自動化するメリットとデメリット においても、マルチプラットフォームなフレームワークに対するテスト自動化ツールの開発は労力がかかり、そのツールの選定や使い方の工夫を強いられることこそがそういうフレームワークに対するテスト自動化のデメリットになるということが書かれていました。
このことは本来、テスト自動化自体のデメリットではなく、単に現状の技術的課題であり、簡単に自動化できるようになればハッピーなのは間違いありません。