chore: sync local latest state and repository cleanup
This commit is contained in:
95
scripts/ci/assert-migration-not-skipped.sh
Executable file
95
scripts/ci/assert-migration-not-skipped.sh
Executable file
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env bash
|
||||
# 断言迁移测试不可跳过
|
||||
# 在CI环境中,PermissionCanonicalMigrationTest 和 AuditLogImmutabilityIntegrationTest 的 Skipped 必须为0
|
||||
# 否则表示迁移验证未被执行,质量门禁失败
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
REPORT_DIR="${ROOT_DIR}/target/surefire-reports"
|
||||
|
||||
# 关键测试类列表(strict模式下不可跳过)
|
||||
CRITICAL_TESTS=(
|
||||
"com.mosquito.project.permission.PermissionCanonicalMigrationTest"
|
||||
"com.mosquito.project.integration.AuditLogImmutabilityIntegrationTest"
|
||||
"com.mosquito.project.RolePermissionMigrationTest"
|
||||
"com.mosquito.project.FlywayMigrationSmokeTest"
|
||||
)
|
||||
|
||||
echo "===== 关键测试跳过断言 ====="
|
||||
|
||||
# 检查测试报告目录是否存在
|
||||
if [[ ! -d "${REPORT_DIR}" ]]; then
|
||||
echo "ERROR: 测试报告目录不存在: ${REPORT_DIR}"
|
||||
echo "请先运行 Maven 测试"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FAILED=0
|
||||
|
||||
for TEST_CLASS in "${CRITICAL_TESTS[@]}"; do
|
||||
echo ""
|
||||
echo "检查: ${TEST_CLASS}"
|
||||
|
||||
# 查找对应的测试报告文件
|
||||
REPORT_FILE=""
|
||||
for ext in txt xml; do
|
||||
candidate="${REPORT_DIR}/${TEST_CLASS}.${ext}"
|
||||
if [[ -f "${candidate}" ]]; then
|
||||
REPORT_FILE="${candidate}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ -z "${REPORT_FILE}" ]]; then
|
||||
echo " ERROR: 未找到测试报告文件: ${TEST_CLASS}.{txt,xml}"
|
||||
echo " 目录内容:"
|
||||
ls -la "${REPORT_DIR}" | head -20 || true
|
||||
FAILED=1
|
||||
continue
|
||||
fi
|
||||
|
||||
echo " 报告: ${REPORT_FILE}"
|
||||
|
||||
# 从XML报告中提取Skipped数量(如果存在)
|
||||
if [[ "${REPORT_FILE}" == *.xml ]]; then
|
||||
if grep -q 'failures="[^"]*" errors="[^"]*" skipped="[^"]*"' "${REPORT_FILE}"; then
|
||||
SKIPPED=$(grep -oP 'skipped="\K[0-9]+' "${REPORT_FILE}" | head -1)
|
||||
if [[ "${SKIPPED}" -gt 0 ]]; then
|
||||
echo " ERROR: ${TEST_CLASS} 有 ${SKIPPED} 个被跳过!"
|
||||
echo " 在CI严格模式下,关键测试必须执行。"
|
||||
echo " 质量门禁失败:Skipped 数量必须为0"
|
||||
FAILED=1
|
||||
else
|
||||
echo " PASS: ${TEST_CLASS} 跳过数量为0(${SKIPPED})"
|
||||
fi
|
||||
else
|
||||
# 如果XML中没有skipped属性,检查是否完全跳过了测试
|
||||
if grep -q 'tests="0"' "${REPORT_FILE}"; then
|
||||
echo " ERROR: ${TEST_CLASS} 未被执行(tests=\"0\")"
|
||||
FAILED=1
|
||||
else
|
||||
echo " INFO: 无法从XML中解析skipped数量,假设通过"
|
||||
fi
|
||||
fi
|
||||
elif [[ "${REPORT_FILE}" == *.txt ]]; then
|
||||
# 从文本报告中提取信息
|
||||
if grep -q "Skipped" "${REPORT_FILE}"; then
|
||||
# 检查是否有跳过的测试
|
||||
if grep "Skipped.*[1-9]" "${REPORT_FILE}"; then
|
||||
echo " ERROR: ${TEST_CLASS} 有跳过的用例!"
|
||||
FAILED=1
|
||||
fi
|
||||
fi
|
||||
echo " INFO: 文本报告格式,跳过详细检查"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
if [[ "${FAILED}" -eq 1 ]]; then
|
||||
echo "===== 关键测试跳过断言失败 ====="
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "===== 关键测试跳过断言通过 ====="
|
||||
exit 0
|
||||
Reference in New Issue
Block a user