シェルスクリプトでお手軽REST APIのE2Eテストコード

author potpro(ぼとぷろ)
2019/06/08

シェルスクリプトでお手軽REST APIのE2Eテストコード

本番にデプロイする前に最低限の接続できるかのテストやっておきたくない?という気持ちで。

最低限httpステータスコード200が返ってくるかを確認したい。簡単に。

APIエンドポイントが増えてくると追加した部分以外の確認忘れで不具合になっちゃったりしますもんね。

でもpuppeteerなどのE2Eテストコードを実行させるにはいろいろと設定が必要だし、

そこまで神経質にならなくていいし大体のサーバで動いたらいいよねということでシェルスクリプト。

Bashで動かしているけどたぶんshでも動く。

#!/bin/bash
url=http://localhost/api
endpoints=(
    "/health-check"
    "/v1/user"
    "/v1/user?id=100"
)

for endpoint in "${endpoints[@]}"
do
    res=$(curl --silent --write-out "HTTPSTATUS:%{http_code}" -X GET $url$endpoint)
    body=$(echo $res | sed -e 's/HTTPSTATUS\:.*//g')
    status=$(echo $res | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
    echo "$endpoint[$status]: ${body:0:100}";
    if test $status -ne 200; then
        echo "Test Failed!"
        exit 1;
    fi
done
echo "Test OK!"
exit 0;

endpointsというところにパスを入れて、200が返ってくるか確認。目視でBodyも確認できるように。

全部Passで正常終了。

上はGETしか使えないようになっていますが、少し弄ればPOSTも軽く実装できるはずですし、Bodyを見る厳密なテストも割とできる。シェルスクリプトは凄いのだ。

これをDockerで起動後にE2Eテストして、終わったら破棄みたいな簡単なコードも組めます。

docker run -d -p 8080:80 --detach --name test_api_container test_api_image
sleep 5;
./test.sh
docker rm -f test_api_container

当然普通のユニットテストも別にあった方がいいですけどね。念には念を入れて。

という小ネタでした。