Files
hfb_sys/scripts/check-backend-coverage.sh
yml2213andCursor 47ceb53c09 test: 测试库改为模板克隆并纳入完整租号 e2e
每个包不再重复 DROP+迁移,清空改用 DELETE 并重置自增,go test ./... 从约 6 分钟降到十几秒。租号全链路改走 NewTestDB,去掉依赖额外 DSN 才会跑的过渡测试。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 15:46:18 +08:00

51 lines
1.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
BACKEND_DIR="${ROOT_DIR}/backend"
PROFILE="$(mktemp -t hfb-backend-cover.XXXXXX)"
OUTPUT="$(mktemp -t hfb-backend-cover-output.XXXXXX)"
trap 'rm -f "${PROFILE}" "${OUTPUT}"' EXIT
cd "${BACKEND_DIR}"
# 模板库只迁移一次,各包克隆后可并发;指纹未变则跨次运行复用。
go test -count=1 -coverprofile="${PROFILE}" ./... | tee "${OUTPUT}"
coverage_for_package() {
local package="$1"
awk -v package="${package}" '
$1 == "ok" && $2 == package {
for (i = 1; i <= NF; i++) {
if ($i == "coverage:") {
value = $(i + 1)
gsub(/%/, "", value)
print value
exit
}
}
}
' "${OUTPUT}"
}
require_at_least() {
local label="$1"
local actual="$2"
local minimum="$3"
if [[ -z "${actual}" ]]; then
printf '[coverage] 无法读取 %s 覆盖率\n' "${label}" >&2
return 1
fi
if ! awk -v actual="${actual}" -v minimum="${minimum}" 'BEGIN { exit !(actual + 0 >= minimum + 0) }'; then
printf '[coverage] %s 覆盖率 %s%%,低于门禁 %s%%\n' "${label}" "${actual}" "${minimum}" >&2
return 1
fi
printf '[coverage] %s %s%%(门禁 %s%%)\n' "${label}" "${actual}" "${minimum}"
}
total="$(go tool cover -func="${PROFILE}" | awk '/^total:/ { gsub(/%/, "", $3); print $3 }')"
require_at_least "后端总语句" "${total}" "30.0"
require_at_least "order" "$(coverage_for_package hfb_sys/backend/internal/modules/order)" "40.0"
require_at_least "payment" "$(coverage_for_package hfb_sys/backend/internal/modules/payment)" "20.0"
require_at_least "wallet" "$(coverage_for_package hfb_sys/backend/internal/modules/wallet)" "34.0"
require_at_least "withdrawal" "$(coverage_for_package hfb_sys/backend/internal/modules/withdrawal)" "30.0"