当前位置: 首页 > news >正文

强大的Bash自动化测试框架Bats-core

Bats-core: Bash自动化测试系统

Bats-core是一个符合TAP标准的Bash测试框架,支持Bash 3.2及以上版本。它提供了一种简单的方法来验证您编写的UNIX程序是否按预期行为运行。

功能特性

  • TAP兼容测试输出:生成标准化的测试输出格式
  • 简洁的测试语法:使用特殊的Bash语法定义测试用例
  • 完整的工具链:包含安装、卸载、版本管理脚本
  • 多平台支持:支持各种UNIX系统和架构
  • ShellCheck集成:内置代码质量检查工具
  • 灵活的安装选项:支持自定义安装路径和库目录
  • 版本管理:提供专业的版本发布和更新工具

安装指南

基本安装

# 克隆仓库
git clone https://github.com/bats-core/bats-core.git
cd bats-core# 安装到系统目录
./install.sh /usr/local# 或者安装到自定义目录
./install.sh ~/bats

自定义库目录安装

# 指定库目录(如lib64)
./install.sh /usr/local lib64

依赖要求

  • Bash 3.2或更高版本
  • 标准UNIX工具(install, find, sed等)
  • 可选:Ron用于生成手册页

使用说明

创建测试文件

#!/usr/bin/env bats@test "加法测试 - 使用bc" {result="$(echo 2+2 | bc)"[ "$result" -eq 4 ]
}@test "加法测试 - 使用dc" {result="$(echo 2 2+p | dc)"[ "$result" -eq 4 ]
}@test "文件存在性测试" {run ls /etc/passwd[ "$status" -eq 0 ][ "$output" = "/etc/passwd" ]
}

运行测试

# 运行所有测试
bats test/# 使用TAP格式输出
bats --tap test/# 运行单个测试文件
bats my_test.bats

测试项目结构

my_project/
├── src/
│   └── my_script.sh
└── test/├── unit/│   └── test_basics.bats└── integration/└── test_complex.bats

核心代码

安装脚本核心逻辑

#!/usr/bin/env bash
set -eBATS_ROOT="${0%/*}"
PREFIX="${1%/}"
LIBDIR="${2:-lib}"# 参数验证
if [[ -z "$PREFIX" ]]; thenprintf '%s\n' \"usage: $0 <prefix> [base_libdir]" \"  e.g. $0 /usr/local" \"       $0 /usr/local lib64" >&2exit 1
fi# 创建目录结构
install -d -m 755 "$PREFIX"/{bin,libexec/bats-core,"${LIBDIR}"/bats-core,share/man/man{1,7}}# 安装文件
install -m 755 "$BATS_ROOT/bin"/* "$PREFIX/bin"
install -m 755 "$BATS_ROOT/libexec/bats-core"/* "$PREFIX/libexec/bats-core"
install -m 755 "$BATS_ROOT/lib/bats-core"/* "$PREFIX/${LIBDIR}/bats-core"
install -m 644 "$BATS_ROOT/man/bats.1" "$PREFIX/share/man/man1"
install -m 644 "$BATS_ROOT/man/bats.7" "$PREFIX/share/man/man7"# 更新库目录配置
read -rd '' BATS_EXE_CONTENTS <"$PREFIX/bin/bats" || true
BATS_EXE_CONTENTS=${BATS_EXE_CONTENTS/"BATS_BASE_LIBDIR=lib"/"BATS_BASE_LIBDIR=${LIBDIR}"}
printf "%s" "$BATS_EXE_CONTENTS" >| "$PREFIX/bin/bats"echo "Installed Bats to $PREFIX/bin/bats"

卸载脚本核心逻辑

#!/usr/bin/env bash
set -eBATS_ROOT="${0%/*}"
PREFIX="${1%/}"# 参数检查
if [[ -z "$PREFIX" ]]; thenprintf '%s\n' \"usage: $0 <prefix> [base_libdir]" \"  e.g. $0 /usr/local" \"       $0 /usr/local lib64" >&2exit 1
fi# 目录存在性验证
if [[ ! -d "$PREFIX" ]]; thenprintf "No valid installation in directory %s.\n" "$PREFIX"exit 2
fi# 自动检测库目录
if [ -e "$PREFIX/bin/bats" ]; thenLIBDIR=$(grep -e '^BATS_BASE_LIBDIR=' "$PREFIX/bin/bats")eval "$LIBDIR"
fi
LIBDIR="${BATS_BASE_LIBDIR:-lib}"# 文件删除函数
remove_file() {echo "Removing $1"rm -f "$1"
}remove_directory() {local directory=$1if [[ -d "$directory" ]]; thenecho "Removing $directory"rmdir "$directory"fi
}# 清理安装的文件
d="$PREFIX/bin"
for elt in "$BATS_ROOT/bin"/*; doelt=${elt##*/}remove_file "$d/$elt"
doneecho "Uninstalled Bats from $PREFIX/bin/bats"

版本发布工具

#!/usr/bin/env bash
set -Eeuo pipefail# 版本信息提取
BATS_VERSION=$(source <(grep '^export BATS_VERSION=' libexec/bats-core/bats)echo "${BATS_VERSION}"
)# 版本更新函数
replace_in_files() {declare -a FILE_REPLACEMENTS=("contrib/rpm/bats.spec,^Version:""libexec/bats-core/bats,^export BATS_VERSION=""package.json,^  \"version\":")for FILE_REPLACEMENT in "${FILE_REPLACEMENTS[@]}"; doFILE="${FILE_REPLACEMENT/,*/}"MATCH="${FILE_REPLACEMENT/*,/}"sed -E -i.bak "/${MATCH}/ { s,${BATS_VERSION},${NEW_BATS_VERSION},g; }" "${FILE}"rm "${FILE}.bak" || truegit add -f "${FILE}"done
}# 更新变更日志
write_changelog() {local FILE="docs/CHANGELOG.md"sed -E -i.bak "/## \[Unreleased\]/ a \\\n## [${NEW_BATS_VERSION}] - $(date +%Y-%m-%d)" "${FILE}"rm "${FILE}.bak" || truegit add -f "${FILE}"
}

ShellCheck代码质量检查

#!/usr/bin/env bash
set -e# 查找所有Bash相关文件
targets=()
while IFS= read -r -d $'\0'; dotargets+=("$REPLY")
done < <(find . -type f \( -name \*.bash -o -name \*.sh \) -print0find . -type f -name '*.bats' -not -name '*_no_shellcheck*' -print0find libexec -type f -print0find bin -type f -print0
)# 执行ShellCheck检查
LC_ALL=C.UTF-8 shellcheck -x "${targets[@]}"

这些核心代码展示了Bats-core项目的完整工具链,包括专业的安装卸载流程、版本管理和代码质量保证机制,体现了项目对测试框架稳定性和可靠性的高度重视。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

http://www.jsqmd.com/news/45381/

相关文章:

  • 2025年评价高的橡塑隔音材料最新TOP品牌厂家排行
  • 破局AI算力自由:维谛技术发布Vertiv SmartArray新一代智算MDC解决方案
  • 加能电源- CMTI测试系统/半导体测试/脉冲电源/测试 - FORCREAT
  • 2025年11月北京健康服务/康养旅游/全家福计划/朋友圈计划服务商推荐:卫基联建领跑行业榜单
  • oracle数据库迁移到金仓kingbase数据库
  • 2025年国内PMS酒店管理系统公司排行榜TOP5:智能化转型首选指南
  • 2025杭州的留学中介哪家好
  • 2025广州出国留学中介有哪些公司
  • 2025北京最佳留学机构
  • 2025年热门的材质安全的保温杯厂家最新权威实力榜
  • 纵横G700迪拜全球上市:中国豪华越野以全球标准重塑市场格局
  • 椭圆曲线Diffie-Hellman密钥交换(ECDH)
  • jmeter JVM与 压测TPS、并发用户数 关系 - BKY007
  • 朔州一对一辅导榜单更新:聚焦2025口碑最好的补习机构与平台
  • 2025年热门的冷弯半圆管品牌厂家排行榜
  • 2025年11月欧洲移民机构推荐榜:权威机构名单与选择指南
  • 2025年11月求职机构推荐:口碑评价汇总与市场研究报告
  • 2025景德镇一对一家教辅导推荐:性价比与口碑排行榜
  • 山西临汾一对一辅导前瞻测评:2025大宁县、隰县等区县值得关注的教育品牌
  • 2025年11月应届生求职机构推荐榜单与选择指南:一份基于真实数据的权威列表
  • 2025年11月马耳他移民机构排行榜:资质认证与用户满意度深度解析
  • 2025金华市一对一家教推荐:实测六款,提分选哪家?
  • 太原一对一辅导机构全面盘点:2025迎泽、晋源等区县优质教育机构推荐
  • 【DeepSeek新开源】DeepSeek-OCR如何用“视觉压缩”革新长文本处理 - 详解
  • Warning! PATH is not properly set up, /Users/i/.rvm/gems/ruby-3.3.0/bin is not at first place.
  • 2025年11月北京注销代办公司排行推荐:市场主流服务商客观比对
  • 2025年11月中国离婚财产分割律师推荐榜单:专业律师全面对比与权威排行
  • 2025年11月中国离婚财产分割律师评价与排行全解析
  • 2025年11月保研辅导机构推荐:主流机构排行榜及避坑指南解析
  • chrome:在linux上打开调试端口9222失败