シェルスクリプトで複数機器を利用した試験の自動化

2021年5月10日

皆さん、試験の自動化を実施していると思います。
単体ではなく複数機器を跨いだ結合試験、総合試験の自動化を行う場合、シェルスクリプトで柔軟に行うことができますので、ご紹介します。

スクリプトでログイン

sshで接続する端末にログインするshellスクリプトを作成します。
パブリッククラウドには、キーを利用してログインするため、「-i」でキーを指定しています。
また、ログイン時にフィンガープリントを残すのが一般的ですが、VIPでログインする場合はエラーが発生するので、フィンガープリントを無視するよう’StrictHostKeyChecking no’オプションを指定しています。
その他、-t をつけることで、擬似端末としてコマンドを実行させます。

◆login.sh

#!/bin/bash
sudo ssh -i ~/.ssh/id_rsa -o 'StrictHostKeyChecking no' -t user@x.x.x.x

作成したスクリプトが使えるか実際に実行するとログインできます。

% sh login.sh

実行したいスクリプトを作成

実行したいスクリプトを作成してみます。

ここではシンプルに日時を取得しています。

◆work.sh

#!/bin/bash
date >> test_work.txt
date
exit

shellスクリプトを実行

実行したい内容を記述したwork.shスクリプトを準備します。ログイン時にこのスクリプトファイルを渡します。
複数のshell実行後に、実行結果を出力しているファイルをダウンロードして、結果を受けとるようにします。

◆auto.sh

sh login.sh 'sh' < work.sh
sudo scp -P 22 -i ~/.ssh/id_rsa user@x.x.x.x:/home/user/test_work.txt ./

実行すると、自動でファイルを取得することができます。

sh auto.sh

また、複数のshellを同時に動かすこともできます。
バックグラウンド(&)で動作させ、プロセスが終わるまでwaitさせることでsshで同時接続ができます。

◆auto2.sh

sh login.sh 'sh' < work.sh &
sh login2.sh 'sh' < work.sh &
wait
sudo scp -P 22 -i ~/.ssh/id_rsa user@x.x.x.x:/home/user/test_work.txt ./
sudo scp -P 22 -i ~/.ssh/id_rsa user@y.y.y.y:/home/user/test_work.txt ./

シェルスクリプトを実行します。

sh auto2.sh

スクリプトでログ取得

これを応用してログファイルを取得しながら、Webにアクセスしてログを取得する例をあげます。
以下のようなスクリプトで、10秒間新たなNginxのaccessログを取得します。

◆work2.sh

(sleep 10 ;kill $$) &
exec sudo tail -n 0 /var/log/nginx/access.log > ~/access.log

◆auto3.sh

work2.shでアクセスしながら、curlで自端末からアクセスし、ログを取得する一連の流れを自動化することで、試験を行う事ができるようになります。

sh login.sh 'sh' < work2.sh &
curl http://x.x.x.x
wait
sudo scp -P 22 -i ~/.ssh/id_rsa user@x.x.x.x:/home/user/access.log ./

以下にて実行する事ができます。

sh auto3.sh

結果の検査

最終的には期待値と結果を比較する場合、ダウンロードしてきたログファイルをエクセルにまとめて、Excelで比較することで試験を自動化できると思います。