テスト自動化をゼロから「イチ」にしようとしているお話
これはウイングアークAgile and DevOps Stories のAdvent Calendar 2019の第12弾(2019年12月17日)の投稿です!
現在ソフトウェアの開発でテスト自動化は様々なツールを駆使して行われています。
製品がビルドされればJenkinsなどのCI/CDツールからSeleniumやAppiumなどを使いテストを実行する……こういう流れでテスト自動化を行い、品質の基礎的なところは担保しています。
私は昨年(2018年)の10月に、MotionBoardのQAチームにjoinしました。
ちょうどMotionBoard 6.0のQAフェーズ中にjoinしたのですが、テストはほぼすべて手動での実施でした。
製品のバージョンアップのたびに新機能が増え続けるのに対して、現状ではリグレッションテストを手動で実施しているため、工数が多くかかってしまいます。
そこで今までQAフェーズでのテスト自動化をゼロから「イチ」にしようと動き始めました。
そもそもなんでテスト自動化をやってなかったの?~絶望と遭遇~
近年、Web系のソフトウェアの自動化であればSeleniumが主に使われています。
じゃあMotionBoardをSeleniumで操作してテスト自動化をしてみよう!と思い、何も考えずにChromeの拡張機能であるSeleniumIDEをインストールしてみました。
以下の画像のようなボードを準備して実際にSeleniumIDEで自動化できるかやってみました。
このボードはボタンをクリックすると円グラフが最大化表示されるというボードになります。
Seleniumでボタンをクリックして最大化表示がしっかりされるかの確認を自動化でやってみようと考えていました。
このときは本当にワクワクしながら「よし!これでテスト自動化してメンバーにこういうことできるんですよ!ってアピールしよう~」なんて思っていました。
が、この3分後ぐらいに絶望が待っていました。
MotionBoard上のボタンをクリックして最大化したり、円グラフをクリックしたりしてみました。
「え?どこをクリックしてもTargetが【id=view】で返ってくる・・・」
そうなのです。これが今までテスト自動化がゼロだった大きな理由の一つです。
MotionBoardはWebブラウザ上に1つのCanvasアイテムを配置し、その中にグラフやボタンアイテムを表示していました。
いわゆるJavaScriptで1枚の紙にお絵かきをしている状態です。
ですので、グラフをクリックしてもボタンをクリックしてもSelenium側では【id=view】という値で返ってきてしまうのです。
この結果、Selenium側でどこの部分をクリックすればよいのかがわからず、テスト自動化ができていなかったのです。
QAチームとMotionBoard開発チームとの協力でテスト自動化を実現!
バージョンアップすることで増える新機能、それに対応するためのQAチーム、増え続けるリグレッションテスト……
工数もかなりぎりぎりの状態でした。
そこでこの状況を打開しようと今まで触れることができなかったテスト自動化をやろう!と動き出しました。
まずQAチームとMotionBoard開発チームとの打ち合わせを実施しました。
その場で、テスト自動化を実現するための第1歩として実装してほしい機能を伝えたところ、すぐに追加してもらえました。開発チームのレスポンスの速さに感動しました。本当にありがとうございます!
その機能とは「MotionBoard上のオブジェクトの配置位置(座標)をJSON形式で出力する」という機能です。
これにより、ボタンアイテムがx座標のどの値のところにいるか?y座標はどこなのかが判別、Selenium側でその座標の値を利用してクリックを実行することが可能になりました。
また、グラフの集計値(画面上には表示されない値)もJSONで出力できるようになったので、バージョンアップした際に人間の目では確認することが難しい結果不正や、アイテム表示位置不正をテスト自動化で見つけることができるようになりました。
おわりに
やっとQAフェーズでのテスト自動化が始まり、何とか「イチ」の状態までにできるように日々奮闘しております。
また、テスト自動化の状況をこのブログでお伝えしていきたいと思います。
今までゼロだったものを「イチ」に変えるのはとてもパワーが必要になると感じましたが、それと同時に「やりがい」もあります。
今後ももっとテスト自動化を進めていき、みんなをハッピーにできるよう日々精進していきます!