TestArchitectでの結果画像確認のための画像の比較はOpenCVに入っているSIFTという技術を使うことを推奨します。なぜなら

  • ビットマップで比較すると、ちょっとずれただけでエラーと判定されてしまう
  • 解像度が違うコンピュータを使うとまったくビットマップ比較が機能しない

画像の比較はOpenCVに入っているSIFTという技術を使う。基本的にはこの技術の詳細を知る必要はありません、自動化テストで使えればいい話なので、なので細かい説明は省きますが、ビットマップでの比較ではビットとビットで比較しているが、SIFTでは特徴点で比較します。特徴点とは特徴のある点なのだが(言ってることは矛盾していますが)、いわゆる角の部分や色が大きく変化する部分が特徴点になる。その特徴点の数や、その座標をSIFTが出してくれるので、どのくらいの誤差を許容して、2つの画像が等価かを判断する。なので比較するという行為とどこまで誤差を許容するかを決めないといけない。
例えば←の図では文字周りでの特徴点を抽出している。

シンプルな画面比較

まずSIFTの使用例として、新バージョン旧バージョンの画像を比較する場合を考えてみましょう。SIFTをフルに使う場合もありますが、往々にしてある程度絞った形でテストすることをおすすめします。一般的に新しいバージョンで画面崩れを起こすときは、画面の一部ではなく画面全体が崩れる場合が多いです。その場合は画面のいくつかのテキストを拾って(一般的にはOCR)、それをまずは比較することをおすすめします

次に全てのテキストの文字列を比較する自動化をおすすめします、画面の総崩れだけのチェックではなく新しいUIで文字列が欠けているまで見ることができます。

SIFTを使った複雑な画面比較

さてやっとここで完全に近いかたちでの画面比較になります。SIFTの技術では特徴点を抽出することができます。ただこのような図形だとテキストがたくさんはいっているので、まずテキストを消して特徴点の数を減らします。減らさないとテキストがあるとたくさん特徴点が増えてしまいます、英語ならいいですが漢字だとたくさんの特徴点があるのは想像に難しくないと思います。なのでOCR機能を使い文字列の先頭座標を抽出し、その文字列を背景色で消していきます。

背景色で消してしまえばあとは四角の図形郡なので、SIFTを使えば簡単に座標で比較することができます。

ただSIFTでは特徴点だけなので、文字の認識は厳密にはできません、なのでこの技術で自動化する場合はOCRを用いての文字比較の自動化を外すのではなく、OCRとSIFTと両方で画面比較を行います。

画面比較実際の例

ここではSAPの旧SAP(ECC)の画面と新SAP(Fiori)の比較をしてみます。

上記のことを行うソースコードはgithub上に公開していますので、必要な方はお使いください。

旧SAP(ECC)の画面

新SAP(Fiori)の画面

画像のテストのお問い合わせ