0Pricing
DevOps Bootcamp · レッスン

BatsによるBashスクリプトのテスト

Batsテストフレームワークを使ってシェルスクリプトの自動テストを作成し、回帰が本番環境に到達する前に検出します。

「BatsによるBashスクリプトのテスト」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全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.bats

runヘルパー

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チューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「BatsによるBashスクリプトのテスト」で何を学びますか?

Batsテストフレームワークを使ってシェルスクリプトの自動テストを作成し、回帰が本番環境に到達する前に検出します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「BatsによるBashスクリプトのテスト」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDevOps Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Bashスクリプトのデバッグ(set -x、trap)
  2. エラー処理と終了ステータス
  3. スクリプトのベストプラクティスとLint
  4. BatsによるBashスクリプトのテスト
← DevOps Bootcampに戻る