完善本地质量门禁与资金链路测试
This commit is contained in:
Executable
+49
@@ -0,0 +1,49 @@
|
||||
#!/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 -p 1 -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"
|
||||
Reference in New Issue
Block a user