1.はじめに
あるシェルスクリプトの単体テストを実施することになりました。
参画しているプロジェクトでは、
シェルスクリプトの単体テストを行ったことがなかったため
そこで初めて「ShellSpec」というテストフレームワークを知りました。
この記事では、シェルスクリプトの単体テストを初めて行う方向けに
ShellSpecの導入方法を分かりやすく解説します。
2.ShellSpecって何?
シェルスクリプトをテストするためのツールで、
簡単にシェルスクリプトの単体テストを実行することができます。
テスト結果は簡潔なレポートとして出力されます。
さらに、カバレッジも取得できます。
3.実際にShellSpecを導入してみよう!
前提条件
こちらの記事では、Amazon Linux 2023をプラットフォームに持つ、
AWS Cloud9環境上でテストを行います。
プラットフォームは、AWS Cloud9のコンソール画面から
使用する環境を押下すると確認できます。
なお、既にCloud9のインスタンスがあるAWSアカウントでは新規作成が可能ですが、
まだCloud9のインスタンスが存在しないAWSアカウントでは新規作成ができませんので
ご注意ください。
Cloud9の新規受付終了について
ShellSpecのインストール
以下のコマンドをターミナルで実行してください。
wget -O- https://git.io/shellspec | sh
cd /YOUR/PROJECT
shellspec --init
下記2ファイルが作成されていることを確認してください。
.shellspec
spec/spec_helper.sh
4.ShellSpecの基本的な使い方
以下のようなシェルスクリプトをテストする場合を例に説明します。
#!/bin/bash
echo 'Hello ShellSpec!'
echoで出力された内容を検証するテストは以下のように書きます。
Describe 'hello.sh'
It 'hello.sh'
# hello.shを実行して、その出力内容を検証するテスト
When run shell/hello.sh # hello.shを実行
The output should equal 'Hello ShellSpec!' # 実行結果が期待通りか確認
End
End
フォルダ構成は以下の通りです。
テスト対象のシェルスクリプトはshell配下に作成し、
テスト仕様のシェルスクリプトはspec配下に、
_spec.shで終わるファイル名で作成しました。
/projectX
├── spec/
│ ├── hello_spec.sh
│ └── spec_helper.sh
├── shell/
│ └── hello.sh
└── .shellspec
実行結果
.shellspecのある階層で$ shellspec
を実行します。
実行結果が以下のように表示され、テストが成功していることが分かります。
{自分の環境名}:~/environment/projectX $ shellspec
Running: /bin/sh [bash 5.2.15(1)-release]
.
Finished in 0.23 seconds (user 0.19 seconds, sys 0.00 seconds)
1 example, 0 failures # 成功した場合は"0 failures"となります。
失敗した場合は、以下のように表示されます。
{自分の環境名}:~/environment/projectX $ shellspec
Running: /bin/sh [bash 5.2.15(1)-release]
F
Examples:
a) ERROR: An error occurred in hogehogehoge (exit status: huga)
hoge.sh: line 44: huga: hogehogehoge
# spec/hello_spec.sh:3
1) hello.sh
1.1) hogehogehoge
# spec/hello.sh:1
Finished in 0.23 seconds (user 0.15 seconds, sys 0.04 seconds)
1 example, 1 failure, 1 error
ポイント
- シェバンはbashを推奨します
シェバンとは、スクリプトを実行する際に使われるシェルを指定する記述のことで、
スクリプトファイルの先頭に書かれている#!/bin/bash
を指します。
推奨する理由は以下の2点です。
- Amazon Linux 2023のデフォルトシェルがbashであること
※$ echo $SHELL
で確認できます - 次の記事で投稿予定のカバレッジを取得するためにはbashである必要があること
- spec/hoge_spec.shというファイルがテスト仕様と認識されます
デフォルトでは、 specフォルダ配下の_spec.shで終わるファイルが
テストとして認識されます。
5.まとめ
シェルスクリプトのテストフレームワーク「ShellSpec」を
Amazon Linux 2023で導入し、簡単なテストの実行方法をご紹介しました。
Ubuntuで解説されている記事が多かったため、
RedHat系のAmazon Linux 2023での試行結果として、ご参考になれば幸いです。
次の記事では、カバレッジの取得方法をご紹介いたします。