はてだBlog(仮称)

私的なブログど真ん中のつもりでしたが、気づけばWebサイト系のアプリケーション開発周りで感じたこと寄りの自分メモなどをつれづれ述べています。2020年6月現在、Elasticsearch、pandas、CMSなどに関する話題が多めです。...ですが、だんだんとより私的なプログラムのスニペット置き場になりつつあります。ブログで述べている内容は所属組織で販売している製品などに関するものではなく、また所属する組織の見解を代表するものではありません。

Webサイトの新旧比較試験(Phantom.js ※開発終了)

Webサイトの新旧比較

Webサイトの足回りの移行をしたが、サイトコンテンツ自体の変更はないため、新旧で見栄えが変わっていないことを比較したいという時の話。

いろいろあるが、ここでは、イビデンス取得もかねて画面キャプチャを保存しつつ問題があれば個別対応するというやり方が取れると嬉しい。

もちろんこんな話になるぐらいだから、確認しなければならない件数はそれなりにある状況。

まず、Selenium

qiita.com

思ったよりめんどくさい(注:上記の記事をdisっているのではない。Selenium自体の話。)

つまるところヘッドレスブラウザ

当時のヘッドレスブラウザと言えば、ということで、phantomjs。

http://phantomjs.org

超シンプルである。

var page = require('webpage').create();
page.open('https://www.example.com/', function(status) {
  console.log("Status: " + status);
   if(status === "success") {
     page.render('example.png');
   }
   phantom.exit();
 });

上記をhoge.jsなどと保存して、コマンドラインからphantomjsを起動。

コマンド起動すると、あっさりexample.pngにスクロール済みの一枚物の画像が取得。

が、2018年現在、開発が正式に終了しているみたい。 主要ブラウザのヘッドレスモードに移行していくのかな。

例. chrome 最新版のヘッドレスモード

Google\ Chrome --headless --screenshot --window-size=1280,6000

取得した新旧画面キャプチャを比較してみる

imagemagicのcompareコマンドには画像のdiff機能がある。 今なら画像認識を使う手もあるかもしれないが、冒頭に述べた用途からいうと、ゼロイチの動作の方がとりまわししやすいだろう。

compare -metric AE example_pre.png example_now.png diff.jpg

↓異なるピクセル数が出力

8673

あえて同じものを比較

compare -metric AE example_pre.png example_pre.png diff.jpg

0

新旧画像を比較して0が望ましいとして試験確認。

ただ、ちょっとは変わってても良いとか、あらかじめ少しだけ変わる場所があることが分かっている場合、 数値を決めて、100までは許容する、それを超えたら個別確認する...というやり方もあるかもしれない。

シェルスクリプトでループさせて、返却値が0でないものは個別確認する。

なお、diff.jpgをオープンしてみると、不一致部分が赤く表示される。

diff.jpgに通番をつけて保存しておき、これらをまたまたビューアーなどで1秒周期スライドショー表示して、目grepするのも、見て安心できるという意味ではありかもしれない。

(ただし個人的には5分が限界)