使用 Bats 测试 Bash 脚本
使用 Bats 测试框架为 Shell 脚本编写自动化测试,在问题进入生产环境前及时发现回归。
使用 Bats 测试 Bash 脚本 是 CoddyKit 上的免费 Linux Command Line & Bash Scripting Mastery 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Linux Command Line & Bash Scripting Mastery 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Linux Command Line & Bash Scripting Mastery 课程共包含 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.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 为非零值。
@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 导师)并解锁 Linux Command Line & Bash Scripting Mastery 课程的其余内容,请升级到 CoddyKit PRO。 Linux Command Line & Bash Scripting Mastery 课程共包含 4 节课。
「使用 Bats 测试 Bash 脚本」这节课中我会学到什么?
使用 Bats 测试框架为 Shell 脚本编写自动化测试,在问题进入生产环境前及时发现回归。 你通过在浏览器中直接运行的动手代码来练习 Linux Command Line & Bash Scripting Mastery,全天候 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)
- 错误处理与退出状态
- 脚本编写最佳实践与代码检查
- 使用 Bats 测试 Bash 脚本