Тестирование скриптов Bash с помощью Bats
Пишите автоматизированные тесты для скриптов оболочки с помощью среды тестирования Bats, чтобы выявлять регрессии до их попадания в рабочую среду.
«Тестирование скриптов Bash с помощью Bats» — бесплатный урок Linux Command Line & Bash Scripting Mastery на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Linux Command Line & Bash Scripting Mastery, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Linux Command Line & Bash Scripting Mastery содержит 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) и разблокировать остальной курс Linux Command Line & Bash Scripting Mastery, подпишись на CoddyKit PRO. Курс Linux Command Line & Bash Scripting Mastery содержит 4 уроков всего.
Чему я научусь в уроке «Тестирование скриптов Bash с помощью Bats»?
Пишите автоматизированные тесты для скриптов оболочки с помощью среды тестирования Bats, чтобы выявлять регрессии до их попадания в рабочую среду. Ты практикуешь Linux Command Line & Bash Scripting Mastery с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Linux Command Line & Bash Scripting Mastery?
Предыдущий опыт не требуется. Linux Command Line & Bash Scripting Mastery на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Тестирование скриптов Bash с помощью Bats»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Linux Command Line & Bash Scripting Mastery?
Да. Каждый урок Linux Command Line & Bash Scripting Mastery включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Отладка скриптов Bash (set -x, trap)
- Обработка ошибок и статус выхода
- Рекомендации по написанию скриптов и статический анализ
- Тестирование скриптов Bash с помощью Bats