0Pricing
DevOps Bootcamp · Урок

Тестирование скриптов Bash с помощью Bats

Пишите автоматизированные тесты для скриптов оболочки с помощью среды тестирования Bats, чтобы выявлять регрессии до их попадания в рабочую среду.

«Тестирование скриптов Bash с помощью Bats» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.

Зачем тестировать сценарии оболочки

Сценарии, работающие без участия пользователя (cron, CI), могут завершаться без сообщений об ошибке. Автоматизированные тесты проверяют поведение, чтобы изменения не нарушали работающий код.

Знакомство с Bats

Bats (система автоматизированного тестирования Bash) — совместимый с 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, когда команда должна завершиться с ошибкой.

@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 возвращает ненулевой код завершения при ошибке, его можно напрямую подключить к конвейерам CI как проверку перед развёртыванием.

# CI step
bats --tap test/ || exit 1

Быстрая проверка

Проверьте свои знания о Bats.

Итоги

Теперь Вы умеете тестировать Bash с помощью Bats:

  • Определяйте тесты с помощью @test; тест пройден, если все команды завершаются с кодом 0
  • Используйте run для сохранения $status и $output
  • Подготавливайте тестовые объекты с помощью setup/teardown
  • Загружайте сценарии для тестирования функций и используйте результаты как условие прохождения CI

Часто задаваемые вопросы

Урок «Тестирование скриптов Bash с помощью Bats» бесплатный?

Да — полный текст урока «Тестирование скриптов Bash с помощью Bats» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «Тестирование скриптов Bash с помощью Bats»?

Пишите автоматизированные тесты для скриптов оболочки с помощью среды тестирования Bats, чтобы выявлять регрессии до их попадания в рабочую среду. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Тестирование скриптов Bash с помощью Bats»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Отладка скриптов Bash (set -x, trap)
  2. Обработка ошибок и статус выхода
  3. Рекомендации по написанию скриптов и статический анализ
  4. Тестирование скриптов Bash с помощью Bats
← Назад к DevOps Bootcamp