BatsによるBashスクリプトのテスト
Batsテストフレームワークを使ってシェルスクリプトの自動テストを作成し、回帰が本番環境に到達する前に検出します。
「BatsによるBashスクリプトのテスト」はCoddyKit上の無料Linux Command Line & Bash Scripting Masteryレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLinux Command Line & Bash Scripting Mastery学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Linux Command Line & Bash Scripting Masteryコースには全4レッスンが含まれています。
シェルスクリプトをテストする理由
cronやCIで無人実行されるスクリプトは、問題が起きても気付かないまま失敗することがあります。自動テストで動作を検証すれば、変更によって動作中のコードが壊れるのを防げます。
Batsの概要
Bats(Bash Automated Testing System)は、シェルコードをテストするためのTAP準拠フレームワークです。テスト自体もBashファイルとして記述します。
# Install on Debian/Ubuntu
sudo apt-get install batsテストファイルの構成
Batsファイルの拡張子は.batsで、@testキーワードと説明を使ってテストを定義します。
@test "addition works" {
result=$(( 2 + 2 ))
[ "$result" -eq 4 ]
}テストを実行する
batsコマンドで、ファイルまたはディレクトリ全体を実行します。内部のすべてのコマンドが0で終了すると、テストは成功します。
bats test/
bats math.batsrunヘルパー
runコマンドはコマンドを実行し、テストを中断せずに終了コードを$statusへ、出力を$outputへ取得します。
@test "ls succeeds" {
run ls /tmp
[ "$status" -eq 0 ]
}出力をアサートする
$outputを期待するテキストと比較します。${lines[0]}を使って特定の行をインデックスで指定することもできます。
@test "echo prints hello" {
run echo hello
[ "$output" = "hello" ]
}失敗するケースをテストする
適切なテストでは、エラーになる経路も確認します。コマンドが失敗するはずの場合は、$statusが0以外になることをアサートします。
@test "missing file fails" {
run cat /no/such/file
[ "$status" -ne 0 ]
}セットアップと後処理
setup()関数とteardown()関数を定義すると、各テストの前後に実行して、フィクスチャの準備と後片付けを行えます。
setup() {
TMP=$(mktemp -d)
}
teardown() {
rm -rf "$TMP"
}テスト対象コードを読み込む
関数をテストするには、スクリプトを読み込んでその関数を使用できるようにし、テスト内で直接呼び出します。
setup() {
source ./lib/utils.sh
}
@test "slugify lowercases" {
run slugify "Hello World"
[ "$output" = "hello-world" ]
}テストをスキップおよび保留にする
skipを使用すると、未実装または現在のプラットフォームで未対応のテストとしてマークできます。理由を任意で指定することもできます。
@test "windows-only feature" {
skip "not supported on Linux"
}CIと統合する
batsは失敗時に0以外の終了コードを返すため、デプロイ前のゲートとしてCIパイプラインにそのまま組み込めます。
# CI step
bats --tap test/ || exit 1理解度チェック
Batsについての理解度を確認します。
まとめ
Batsを使ってBashをテストできるようになりました。
@testでテストを定義します。すべてのコマンドが0で終了すれば成功ですrunで$statusと$outputを取得しますsetupとteardownでフィクスチャを準備します- スクリプトを読み込んで関数をテストし、結果をCIのゲートに利用します
よくある質問
「BatsによるBashスクリプトのテスト」レッスンは無料ですか?
はい。「BatsによるBashスクリプトのテスト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Linux Command Line & Bash Scripting Masteryコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Linux Command Line & Bash Scripting Masteryコースには全4レッスンが含まれています。
「BatsによるBashスクリプトのテスト」で何を学びますか?
Batsテストフレームワークを使ってシェルスクリプトの自動テストを作成し、回帰が本番環境に到達する前に検出します。 ブラウザで直接実行するハンズオンコードでLinux Command Line & Bash Scripting Masteryを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Linux Command Line & Bash Scripting Masteryを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLinux Command Line & Bash Scripting Masteryは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「BatsによるBashスクリプトのテスト」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLinux Command Line & Bash Scripting Masteryレッスンでコードを書いて実行できますか?
はい。すべてのLinux Command Line & Bash Scripting Masteryレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Bashスクリプトのデバッグ(set -x、trap)
- エラー処理と終了ステータス
- スクリプトのベストプラクティスとLint
- BatsによるBashスクリプトのテスト