(゜д゜)ノやぁーどもです。
今回は、割と結構実用的なプログラムを作ってみましたよ!
1年くらい前に↓の記事で、Android端末でアプリケーションをpython+Appiumで自動実行させることをしましたが、今回、これを使って作った自動実行プログラムで、新アプリと旧アプリそれぞれで貯めたエビデンス画像をExcelファイルに新と旧で並べて貼っていって、「新と旧で差異がないよね」ってことの確認を支援するプログラムを作ってみました。
背景
私が担当したエンハンスプロジェクトで、現在のアプリ(以降、旧アプリ)で使っていたAPIの全てを別のAPI(そのとき開発中のもの)に置き換えるという案件を実施しました。新APIでは、単純に置きなおしすればよいというものではなく、その1つ1つの動作仕様が違うものやパラメーターも違うものもあり、こちら側のプログラムロジックもだいぶ修正することになったのです。そして、旧アプリと新アプリでまったく同じ動作を保証しなければなりませんでした。
まず、この連結試験で、以前使ったpython+Appiumで自動実行プログラムを開発して、旧アプリと新アプリで実行してみて、そのエビデンス画像の比較をすればテスト工数がだいぶ省けると考えたのですが、さらに、そこで、そのエビデンス画像を手作業でExcelファイルに貼って、その結果を人の目で確認していくという作業に工数が掛かっているという所に目を付けたのです。
人が判断する箇所も必要でしょうが、新と旧の画像で同一の名前のものを確認してExcelファイルに貼っていくというのは、人でなくてもできることです。なので、そこをpythonにさせようと思いました。さらに、人の目で判断する上で、2画像の差分を示してあげることでより確認作業が楽になるのではないかと思い、比較した類似度と、比較した差異画像を生成するということも同時に行ったのです。
以下、pythonにさせた事と人がやることにした作業の切り分けです。
今回作ったプログラムの概要
【前作業】
python+Appiumで作った自動実行プログラムを新アプリと旧アプリで動作させ、それぞれのエビデンス画像を別フォルダで貯め込んでおく。
【今回の範囲】
1,pythonで、新アプリ、旧アプリの結果フォルダを参照して、同一名称の画像を並べてExcelファイルに貼りつける。
2,pythonで、その2画像の類似度を算出して、Excelファイルに記録
3,pythonで、その2画像の差異を示す画像を作成して、Excelファイルに貼り付ける
(※この時点でExcelファイル完成)
4,人(開発メンバー)がExcelファイルを開いて、新と旧の差異を見て確認していく
結果となるExcelファイルを開くと、↓このような感じで差異を示すことができます。
上部にファイル名と算出した類似度を示すとともに、
新と旧のエビデンス画像を左右に貼り付け、真ん中に差異を示す画像を貼り付けてます。
技術解説
類似度の算出
↓類似度の算出は、「02_2画像の画素値を比較し類似度を算出」の方で実装しました。
理由は、今回は新アプリと旧アプリで同じ端末を利用するつもりなため、同じ動きであったならば画素的なズレは全く無いはずだからです。もし、新アプリと旧アプリで別端末を利用するのであればヒストグラムでの算出の方が得たい結果に近くなるのではないかと思います。
差異画像の生成
↓の「02_画像比較して異なる箇所が分かる画像を生成するプログラム」の「03_diff_center.png」のやり方の方で、実装しました。
Excelファイル作成
pythonでExcelファイルを作成するに当たっては、「openpyxl」というライブラリを利用しました。
ググったら色々サンプル見つかります。
プログラム
↓Gitに格納しておきました。
ダウンロードして頂いて実行環境がWindowsの方は「install_library.bat」を実行することで、必要なライブラリがインストールされるはずです。LinuxやMacの方は「install_library.bat」の中身を実行してみてください。
そのあと、「main.py」を実行していただければ、動作するはずです。
「tmp01」と「tmp02」に新アプリと旧アプリを想定したサンプル画像が入ってます。
まとめ
今回、新アプリと旧アプリの動作比較という割とありがちな案件で使えるプログラムを作ってみました。
実は、まだ実運用で利用していなくって、この記事を書いている1~2カ月後くらいに実行する予定なのです。
実案件で利用後にまたレポート書いてみます。
この記事を読んでて、新アプリと旧アプリの比較という用件のある方は是非使ってみて頂きたいです。