見出し画像

テスト自動化の道のりは険しい!ハードウェアを含めたテストを完全自動化している話

SETエンジニアの坂口です。日々あらゆるテストを自動化すべく自動テストを構築しています。

テスト自動化というと主にソフトウェアのテスト自動化が主題になるかと思われます。プロダクトがすべてソフトウェアを提供していれば、理論上はCI/CDですべて自動化できます。

一方弊社の「O:derプラットフォーム」は基本ソフトウェアで提供しているものの、「O:der Table」のオプションでは注文をキッチンスタッフに伝えるためプリントアウトするハードウェアを提供していたり、「O:der ToGo」のオプションではPOSとの連携しています。そして「O:der Kiosk」のオプションでは店頭に置く注文機なども取り扱っており、ソフトウェアだけで完結するプロダクトではございません。

画像1

このソフトウェアとハードウェアが密に結合された環境でもなんとかテスト自動化できないか、そのお話をします。

自動テストレベル

ちょっと話は変わって、下の図は私が勝手に作ったテストレベルです。

画像2

Level0はまったく自動化されていない状態、Level4はテストがほとんど自動化されている状態です。もちろんすべてでLevel4の到達を目標としていますが、現在一部ハードウェアとのテストはLevl3、そのほかのハードウェアとはLevel1までこぎつけることができました。

テスト自動化の挑戦

「O:derプラットフォーム」はハードウェアと連携しつつ、ソフトウェア側のアップデートや構成の変化、そしてハードウェア自体のアップグレードなど様々な箇所で発生する差異を吸収しながら連携する必要があります。そのためハードウェアとの連携は定期的に回帰テストを行い、うまく連携できているかをみる必要があります。

今回はその中でPOSと連携する場合のテストに挑戦してみました。

画像3

POSと連携してPOS側で会計する場合は当たり前ですがPOSを操作する必要があります。このPOSレジ機材は開発・テスト用のために社内で管理されており、当然持ち運ぶわけにもいきません。なのでPOS操作を自動化できなければテスト自動化失敗です撤収〜!となってしまいます😢
一見自動化は無理そうに見えますが、コロナ禍ということもあり、リモートワークでもPOSの状況が確認できるよう特別な環境を準備しました。詳細は言えないのですが、これで最低限の操作はリモートから可能になりました。

リモート操作はできるので「リモート接続用の踏み台とするPCのマウス操作を自動化すれば遠隔で操作できるのでは・・・?」と考え、マウス操作を自動化するツールをいろいろ探した結果、Microsoftから最近無料で公開されたPower Automate Desktop for Windows10を使ってみることにしました。

このツールはWindows上でほぼなんでもオートメーションできるものすごいツールです。しかもただ自動化するだけでなく、画面上のUIを認識してピンポイントにボタンを押すといった補助系の機能も充実しています。

この中で最もお世話になったのは、スクリーンショット上の画像をもとに、その画像と同じ座標を取得するという機能です。リモート操作経由では接続先のUI情報は取得できませんので、これでマウスを絶対座標で指定しなくても操作が可能となります。画像で座標取得 -> クリック -> 数秒待つ を繰り返せばシナリオが完成します!

画像4

残りはテストのタイミングでこの操作するための環境を構築します。Power Automateを動かすWindowsはPOS用の踏み台サーバでもあるので、セキュリティの懸念上グローバルからアクセスできるWebhookを作るわけにはいきません。なので別途キューを受け付ける環境を用意し、サーバはキューがないか定期的にポーリングするようにしました。

画像5

これで自動化はだいたい目処がつきました。あとはPower Automateのシナリオをタスクスケジューラで実行させればOKです。

とここで重大な事実が判明!なんとPower Automate、2021年5月31日現在では コマンドラインからの実行に対応しておりません! POSの操作が自動化できてもそのシナリオを流すには結局マウス操作が必要、でもそのマウス操作は自動化しないといけないのですが、自動化するためのPower Automateはマウスによる自動化が必須......という無限ループに陥ってしまいました。

結局Power Automateの起動だけであればより簡易なマウス自動操作ツールで問題ないので、コマンドラインから実行できるツールを使って起動させるようにしました。

これでテストに必要なPOS操作の自動化が完了しました。各操作の動作確認も済ませ、さて最後の通しテストを......

とここでまたもや重大な事実が判明!なんとPower Automate、これまで踏み台サーバにRDP(Remote Desktop)でログインしながら作業していたのですが、このセッションを切断するとシナリオもストップしてしまうことが判明しました!原因はわかりませんが、おそらくクラウド上のWindowsはディスプレイが物理的に接続されておらず、画面解像度はRDP中のウィンドウサイズに依存していたため、セッションを切ると解像度が不明、結果Power Automateはシナリオを続行できなかったのでは......と見ています。

結論、Power Automateを使った自動化は現時点ではほぼ不可能ということがわかりました。

それでも自動化を諦めない

今回のテストはハードウェアが絡むため、どうしても相容れない箇所が出てしまうというのは仕方のないことです。ですがハードウェアとも密接につながっていることが弊社の強みでもあるため、ここを乗り越えて自動化することそれが弊社のSETとしての使命であるとさえ思っています。

今回試した方法もクラウドPCではなく物理PCを用意すればいけるのでは、と睨んでいます。私は諦めませんよ!

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