Build Verification Testのテスト自動化、始めました。

MotionBoardのUIテスト自動化第一弾

sato ryo
WingArc1st Inc.
6 min readJan 27, 2020

--

前回の記事の続きのお話となります。

MotionBoardのUIテスト自動化はブラウザ上のアイテムの情報をJSON形式で出力し、その情報を利用して行っています。

今回は、実際に出力されたJSONを利用して簡単なBuild Verification Test(以下BVT)を実装したというお話になります。

photo by sato ryo

今回のテスト自動化第一弾として、オブジェクトの表示座標が不正なものになっていないか?チャートの値が結果不正となってないか?というユーザーにとってインパクトが大きい不具合を早期に発見できるシステムをBVTとして構築しました。

BVTはビルドが検証可能なものかを判断するテストです。

そのビルドで基本機能に対してデグレが発生していないか?をテストします。

今までBVTのテストを実施することはなく、実施したとしてもビルドバージョンを確認してビルドが更新されているね・・・や、ログインできるね・・・程度しかありませんでした。

MotionBoardはビジュアル面も大事な要素です。

ユーザーがバージョンアップして、チャートやボタンなどのアイテムが今までと異なった場所に表示されていたらインパクトが大きいです。

実際にどうやってテストOKとするのか?

前回の記事で、ボード上のオブジェクトの座標を出力する仕組みをMotionBoard開発チームに作成してもらいました。

チャートや明細表、GEOを配置したボード
上画像のボードの情報をJSON形式で出力

この機能を利用し、MotionBoardがバージョンアップした際にオブジェクトの表示座標が不正になっていないか?チャートの値が結果不正になっていないかをSeleniumに判断してもらいます。

まず、バージョンアップする前の状態で、比較対象とするボードに配置されてあるオブジェクトの座標を取得します。

また、チャートアイテムですと画面上には値の数値は表示されませんが、この値はJSONで出力できるようになりました。

チャートのポイントの値をJSON形式で出力

ビルドバージョン1の状態で出力したJSONの情報をJSONファイルとして保存し、MotionBoardをバージョンアップします。

ビルドバージョン2の状態で再度比較対象とするボードに配置されてあるオブジェクトの座標を取得したり、チャートの値を取得したりします。

このときに出力されたビルドバージョン2のJSONファイルが、ビルドバージョン1に取得したJSONファイルと比較し、一致してあればOK!としてBVTを行います。

具体的には以下の図のような比較をしています。

比較対象は以下のものを利用します。

  • オブジェクトの座標位置
  • チャートの値

また、しっかりとMotionBoardにログインができているか?の判定や、リンクアイテムをクリックした際に、そのリンクにアクセスできているかの判定は、今表示されているURLをSeleniumで取得し期待値と一致しているか?で判定できます。

このテスト自動化により、人間の目でバージョンアップ前と後の画面をにらめっこする必要がなくなりました。

※人間の目で違いを見つけるなんて、難易度が高すぎる…

出力されるJSONはボタンアイテムの座標も出力できるため、Seleniumでボタンアイテムをクリックするという操作も自動化されます。

Seleniumでログイン処理とログアウト処理のテストを自動化

Jenkinsでデイリービルドに対して毎朝BVTを実施するようにしました!

テストコード作成して、朝出勤してビルドを更新してテスト実行・・・ということを手動で行っていました。

ですが、毎日実施するのは大変(めんどくさい)のでこの部分も自動化しようと思いました。

具体的には以下の流れになります。

  1. PowerShellのコマンドを利用して開発ビルドをコピー
  2. サイレントインストール
  3. BVTのJenkinsジョブを実行する

上記の流れの仕組みを作り毎朝自動でBVTが行われるようになりました。

また、テスト結果をチャットに送ることで、朝出勤中に見るだけでテストがOKかがわかります。

Jenkinsからチャットに結果が通知されます

BVTは、自動でテストを実施して早期にバグを検出することや、なにか新機能を実装した際に基本的な部分でデグレが起きていないかを検出することが目的になります。

毎日のテスト結果がNGゼロであれば、QAチームは基本的な機能ルートのテストにかける時間を少なくし、今回のビルドで変更があったところを検証する時間を確保できます。

第1弾としてBVTのテスト自動化をしてみました。

今後はテストケースを追加したりしてBVTをもっとよくしたいと思っています。

そして、QAチームはもちろんのこと、開発チームにも安心感が出るようにテスト自動化で貢献していきたいです。

--

--