0Pricing
DevOps Bootcamp · 课时

使用 Bats 测试 Bash 脚本

使用 Bats 测试框架为 Shell 脚本编写自动化测试,在问题进入生产环境前及时发现回归。

使用 Bats 测试 Bash 脚本 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

为什么要测试 Shell 脚本?

无人值守运行的脚本(cron、CI)可能会静默失败。自动化测试可以验证行为,确保修改不会破坏正常工作的代码。

Bats 简介

Bats(Bash 自动化测试系统)是一个符合 TAP 的 shell 代码测试框架。测试本身也是 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 的了解。

回顾

现在您可以使用 Bats 测试 Bash:

  • 使用 @test 定义测试;所有命令都以 0 退出才算通过
  • 使用 run 捕获 $status 和 $output
  • 使用 setup/teardown 准备测试夹具
  • 加载脚本来测试函数,并根据结果控制 CI 是否继续

常见问题解答

「使用 Bats 测试 Bash 脚本」课时是免费的吗?

是的 — 「使用 Bats 测试 Bash 脚本」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「使用 Bats 测试 Bash 脚本」这节课中我会学到什么?

使用 Bats 测试框架为 Shell 脚本编写自动化测试,在问题进入生产环境前及时发现回归。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 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. 脚本编写最佳实践与代码检查
  4. 使用 Bats 测试 Bash 脚本
← 返回 DevOps Bootcamp