LoginSignup
43
28

More than 5 years have passed since last update.

入門Visual Regression Test

Last updated at Posted at 2018-11-30

Visual Regression Test

画像回帰テストです
これの設定をある程度まで手順書に落とし、公開します
きっと手順通りにやったら10分ぐらいでできる。。。はず

DEMO

1. vue cli ui等で適当にプロジェクトを作成する

2. vue-cli-plugin-storybookを追加

https://github.com/storybooks/vue-cli-plugin-storybook
これだけで凄く簡単にstorybookをvueに追加できます。
一度起動してみて正常に起動できるか確認しましょう!

3. storybookからスクショを撮るライブラリを導入

日本での画像回帰テストの第一人者と言っても過言ではないQuramyさんがstorybookから簡単に画像を抽出してくれるzisuiという素晴らしいライブラリを作っています。
https://github.com/Quramy/zisui

install

$ yarn add zisui --dev

package.jsonにコマンド追加

こんな感じでコマンドを追加します。
このコマンドはstorybookのサーバーを起動して、そのstorybookのポート番号を6006番と期待して、スクレイピングし、ローカルに保存します。(勿論吸い出し終わったら自動でstorybookサーバーを閉じてくれます
デフォだと__screenshots__ディレクトリとかに保存されます。

"screenshot": "zisui --serverCmd \"yarn serve:storybook\" http://localhost:6006"

4. reg-suitを導入

reg-suitを導入します。
reg-suitでは、ローカルの画像と自身のs3やgcs等に保存されている画像との差分比較できます。
比較結果は主に3種類あって、新たな画像が追加された、画像に差分が出た、画像が削除された、です。
基本的に画像に差分が出たプルリクはreg-suitは警告を発します(勿論github連携前提)。そして、その警告が発されたプルリクがマージされた場合はその画像の差分が正しいという事になり、比較元画像が更新されます。
詳しくはreg-suitのドキュメントを参照してください。

install

reg-suit initで、今回自分の場合はgcsを選択しました。
gcsのバケットも作る?と聞かれますが、作りましょう。
もしgcloud認証がいるよーとか色々言われたら全て従います。
ローカルの比較元画像が格納されているディレクトリはどれか聞かれると思いますが、その時はzisui導入時に選択したディレクトリを指定してください。
zisuiのデフォルトは__screenshots__です。
また、githubとか各種サービスと連携したいと出ますが、連携しといてください。

$ npm install -g reg-suit
$ cd path-to-your-project
$ reg-suit init
# Answer a few questions...

一応npm内で完結するようにdevでパッケージも追加しときます

$ yarn add reg-suit --dev

package.jsonに追加

こんな感じで画像回帰テストするコマンドを追加します

"regression": "reg-suit run",

実際にテストしてみる

まずは画像を吸い出す

$ yarn screenshot

比較する

$ yarn regression

もしgcsの権限がないよーとかって叱られたら、権限がつくように、ローカルでgcloud loginとか正しいprojectを選ぶとか色々頑張ってやってください

circleciに組み込む

googleのサービスアカウントキー(jsonタイプ)を取得

以下のリンクをそれとなくやればすぐ手に入るはずです。
https://cloud.google.com/docs/authentication/getting-started

circleciの環境変数に埋め込む

先程ダウンロードしたjsonキーファイルをbase64エンコードします。

$ base64 your-project.json

出力された値をcircleciの環境変数に埋め込みます。

環境変数名はGCLOUD_SERVICE_KEYにしてください。

circleciでの埋め込み方

スクリーンショット 2018-11-11 11.27.16.png

既にあるプロジェクトの場合jobsタブのこの右上にある歯車をクリックすると、設定画面に飛べます
メニューでEnvironment Variablesをクリックして、keyをGCLOUD_SERVICE_KEYにして、valueをサービスキーをbase64エンコードした文字列を貼り付けてください

スクリーンショット 2018-11-11 11.32.44.png

以上で環境変数の設定は完了です

プロジェクトにcircleciの設定を追加する

一応vue cli uiのバージョンは以下の通りです。

$ vue -V
3.1.1

この手順通りの設定をやっていれば以下の設定で上手く動くと思います。

defaults: &defaults
  working_directory: ~/reg-suit
  docker:
    - image: kahiro/node-nightmare
      environment:
        DISPLAY: ":99"
        GOOGLE_APPLICATION_CREDENTIALS: "/root/gcloud-service-key.json"

version: 2
jobs:
  build:
    <<: *defaults
    steps:
      - checkout
      - run:
          name: setup GCP
          command: echo $GCLOUD_SERVICE_KEY | base64 -d > /root/gcloud-service-key.json
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "yarn.lock" }}
            - v1-dependencies-
      - run:
          name: Install dependencies
          command: yarn --pure-lockfile
      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "yarn.lock" }}
      - run:
          name: Lint
          command: yarn run lint
      - run:
          name: Test
          command: yarn run test:unit
      - run:
          name: Screenshot
          command: yarn run screenshot
      - run:
          name: Regression
          command: yarn run regression

image kahiro/node-nightmareの設定

Dockerfileは以下のとおりです
もしnodeのバージョンこれが良いとかあったら調整してdocker hubに上げて使うと便利そうです。

FROM node:9.8.0

RUN apt-get update -y
RUN apt-get install -y xvfb x11-xkb-utils xfonts-100dpi xfonts-75dpi \
    xfonts-scalable xfonts-cyrillic x11-apps clang libdbus-1-dev \
    libgtk2.0-dev libnotify-dev libgnome-keyring-dev libgconf2-dev \
    libasound2-dev libcap-dev libcups2-dev libxtst-dev libxss1 \
    libnss3-dev gcc-multilib g++-multilib

COPY ./xvfbd /usr/local/bin
RUN chmod 755 /usr/local/bin/xvfbd

設定完了

以上で設定は完了していると思います。
せっかくなので設定したブランチでプルリクを出してみましょう!

43
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
28