CentOS 解压与提取兼容性测试方案
一 测试范围与准备
二 测试用例设计
| 测试项 | 样本/命令示例 | 判定标准 |
|---|---|---|
| 基础格式识别 | file sample.*;tar -tvf sample.tar;unzip -l sample.zip | file 能正确识别;tar/unzip 能列出条目且无报错 |
| 解压成功与内容一致性 | tar -xzvf s.tar.gz -C out && sha256sum -c sha256.txt;unzip s.zip -d out | 返回码为0;提取后文件数与大小一致;校验和匹配 |
| 字符集与路径 | 含中文/空格/特殊字符的归档;tar -xvf;unzip | 条目名与内容完整无乱码;无路径穿越(如**…/**) |
| 超长路径与深层目录 | 构造深度≥100层目录的归档 | 能成功创建深层目录并提取全部文件 |
| 特殊条目 | 含 symlink/hardlink/block/char/fifo | 条目类型与链接关系保持;读取/统计行为符合预期 |
| 权限与属主 | 归档内设置 0755/0644 与 uid/gid | 提取后权限/属主与归档一致(root 可保留) |
| 时间属性 | 检查 mtime/atime/ctime | 时间与归档一致或在允许误差内 |
| 压缩算法与块大小 | 不同压缩级别/块大小的 tar.gz/tar.bz2/tar.xz | 均能正常解压;性能差异在可接受范围 |
| 体积与完整性 | 大文件(≥1 GB)与多文件(≥10k) | 无截断/损坏;校验和一致 |
| 负向与异常 | 损坏归档、截断文件、错误密码 ZIP、无权限目录 | 明确报错;不生成残缺文件;不覆盖目标文件 |
| 跨版本/跨架构 | 在 CentOS 7/8/Stream 9 与 x86_64/aarch64 交叉验证 | 行为与结果一致;无平台相关失败 |
三 自动化脚本示例
#!/usr/bin/env bash
set -Eeuo pipefail
WORKDIR=$(mktemp -d)
trap 'rm -rf "$WORKDIR"' EXIT
LOG="$WORKDIR/extract-test.log"
run(){ echo "[$(date '+%F %T')] $*" | tee -a "$LOG"; "$@" >>"$LOG" 2>&1; }
# 1) 基础识别
for f in samples/*; do
run file "$f"
done
# 2) tar.gz / tgz
for f in samples/*.tar.gz samples/*.tgz; do
run tar -xzvf "$f" -C "$WORKDIR/out-tgz" && run sha256sum -c "$f.sha256" 2>/dev/null || echo "FAIL: $f"
done
# 3) tar.bz2
for f in samples/*.tar.bz2; do
run tar -xjvf "$f" -C "$WORKDIR/out-bz2" && run sha256sum -c "$f.sha256" 2>/dev/null || echo "FAIL: $f"
done
# 4) tar.xz
for f in samples/*.tar.xz; do
run tar -xJvf "$f" -C "$WORKDIR/out-xz" && run sha256sum -c "$f.sha256" 2>/dev/null || echo "FAIL: $f"
done
# 5) zip
for f in samples/*.zip; do
run unzip -o "$f" -d "$WORKDIR/out-zip" && run sha256sum -c "$f.sha256" 2>/dev/null || echo "FAIL: $f"
done
# 6) rar(若已安装 unrar)
if command -v unrar >/dev/null 2>&1; then
for f in samples/*.rar; do
run unrar x -y "$f" "$WORKDIR/out-rar" && run sha256sum -c "$f.sha256" 2>/dev/null || echo "FAIL: $f"
done
fi
# 7) .Z(若安装了 ncompress)
if command -v uncompress >/dev/null 2>&1; then
for f in samples/*.Z; do
run cp "$f" "$WORKDIR/out.Z" && run uncompress "$WORKDIR/out.Z" && run sha256sum -c "$f.sha256" 2>/dev/null || echo "FAIL: $f"
done
fi
echo "See $LOG for details."
四 判定标准与常见问题
五 若指的是 yum extract 插件