この記事はShell Script Advent Calendar 2016の20日目の記事として公開されました。

昨日は@MasWagさんの「Tech Hack: 最近見た不思議なシェルスクリプトを直してみた」でした。 シェルスクリプトは「知ってる・知らない」で長さもわかりやすさも全然違ってしまうということがよくわかる記事でした。

また、

良く考えてみて下さい。ただ再帰的に処理をするためだけにわざわざ気合を入れてawkでパースする必要があるなら誰かが便利な道具を作っているはずです。

ということを書かれていますが、こういう考え方は非常に重要だと私も思っています。

はじめに

ここでは、シェルスクリプトを使った、WEBアプリケーションのリファクタリング時の回帰テストについて書きます。 シチュエーションとしては以下の様なものを想定しています。

  • 対象は、サーバサイドレンダリングを扱うWEBアプリケーション
  • 言語は特に問わない(JavaでもPHPでもrubyでも、テンプレートエンジンを使っているものは何にでも適用可)
  • バックエンド処理のリファクタリングをしている
  • リファクタリング作業によって、バックエンドの処理は効率化するが、フロントエンドには全く影響を与えたくない

こういったときに、想定外の変更をしてしまっていないか、コードを修正しながら対応前後の画面を目で見て確認するか、Seleniumなどを使って自動テストを行うかと思います。しかしここでシェルスクリプトを書くことによって、フロントエンドに影響を全く与えないこと、与えたとしてもどんな影響を与えたのかということが簡単にわかるようになります。

用意するもの

  • 変更前のWEBアプリケーションの実行環境
  • 変更後(開発中)のWEBアプリケーションの実行環境

どうやって?

簡単です。両方のWEBアプリケーションに対して、curlしてdiffします。

簡単なスクリプトですが、ざっくりこんな感じです。

1
2
3
4
5
6
#!/bin/sh
curl http://対応前のWEBアプリケーション/hogehoge > before.html
curl http://対応後のWEBアプリケーション/hogehoge > after.html
echo ---------- diff before.html after.html ----------
diff before.html after.html

後はログイン処理を挟み込むなり、いろんなページを列挙するなりしてアレンジすれば、自分だけの最強のインテグレーションテストシェルスクリプトが完成します。 もちろんGETだけではなくPOSTで検証することもできるので、いろいろやってみるといいと思います。

実際に自分が仕事で使っているものでは、ログインしたり登録処理をしてみたり……なんていうものもありますが、その辺りは環境ごとに違うコードになるかと思います。

短いですがこの辺で。アイデアだけ投げつけて終了です。


次は@nmrmsysさんです。いつもLTで発表されているアレの話かな???