文件
hyb-oa/scripts/qa/run-visual-matrix.sh

116 行
3.5 KiB
Bash
可执行文件

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
CLIENT_DIR="$ROOT_DIR/client"
MODE="${1:-attached}"
ISSUE_ID="${QA_ISSUE_ID:-qg6-qa-governance-upgrade}"
REPORT_DIR="${VISUAL_MATRIX_REPORT_DIR:-$ROOT_DIR/artifacts/qa-flow/${ISSUE_ID}-visual-matrix-$(date +%Y%m%d-%H%M%S)}"
SUMMARY_BASE_URL="${E2E_BASE_URL:-}"
mkdir -p "$REPORT_DIR"
usage() {
cat <<USAGE
Usage: bash scripts/qa/run-visual-matrix.sh <local|attached|live>
说明:
local 准备本地临时库和服务后运行 PC + 移动视觉矩阵。
attached 复用当前 E2E_BASE_URL 运行视觉矩阵。
live 默认使用 https://oa.hyinda.com 运行公网视觉矩阵。
可选环境变量:
QA_ISSUE_ID 输出 issue-id,默认 qg6-qa-governance-upgrade
VISUAL_MATRIX_REPORT_DIR 摘要报告目录
VISUAL_MATRIX_SCOPE=full|mobile attached 默认 full;live 默认 mobile,避免无凭据时写入公网测试数据
E2E_BASE_URL attached 模式目标地址
USAGE
}
write_summary() {
local exit_code="$?"
if [[ "$MODE" == "help" || "$MODE" == "-h" || "$MODE" == "--help" ]]; then
return "$exit_code"
fi
if [[ -f "$REPORT_DIR/summary.json" ]]; then
return "$exit_code"
fi
local scope="${VISUAL_MATRIX_SCOPE:-}"
if [[ -z "$scope" ]]; then
if [[ "$MODE" == "live" ]]; then
scope="mobile"
else
scope="full"
fi
fi
local notes="移动 320/360/375/390/393/414/430;企业微信 iOS/Android UA 和普通移动 UA。"
if [[ "$scope" == "full" ]]; then
notes="PC 1440x960;移动 320/360/375/390/393/414/430;企业微信 iOS/Android UA 和普通移动 UA。"
fi
local status="PASS"
if [[ "$exit_code" -ne 0 ]]; then
status="FAIL"
fi
QA_REPORT_DIR="$REPORT_DIR" \
QA_ISSUE_ID="$ISSUE_ID" \
QA_BASE_URL="$SUMMARY_BASE_URL" \
QA_MODE="visual-matrix-${MODE}" \
QA_STATUS="$status" \
QA_SUMMARY_NOTES="$notes" \
node "$ROOT_DIR/scripts/qa/write-qa-summary.mjs" >/dev/null 2>&1 || true
return "$exit_code"
}
trap write_summary EXIT
run_attached() {
local base_url="${1:-}"
local scope="${2:-full}"
if [[ -z "$base_url" ]]; then
echo "[visual-matrix][ERROR] attached 模式需要 E2E_BASE_URL" >&2
exit 2
fi
if [[ "$scope" != "full" && "$scope" != "mobile" ]]; then
echo "[visual-matrix][ERROR] VISUAL_MATRIX_SCOPE 只能是 full 或 mobile" >&2
exit 2
fi
SUMMARY_BASE_URL="$base_url"
local specs=(tests/e2e/r6-mobile-unified-design-rollout.spec.ts)
if [[ "$scope" == "full" ]]; then
specs=(tests/e2e/project-wide-visual.spec.ts "${specs[@]}")
fi
echo ">>> [visual-matrix] baseURL=$base_url issue=$ISSUE_ID scope=$scope"
(
cd "$CLIENT_DIR"
E2E_BASE_URL="$base_url" \
E2E_MODE=local \
QA_ISSUE_ID="$ISSUE_ID" \
QA_VISUAL_OUTPUT_DIR="$ROOT_DIR/output/playwright/${ISSUE_ID}/project-wide" \
QA_VISUAL_ARTIFACT_DIR="$REPORT_DIR/project-wide" \
MOBILE_VISUAL_OUTPUT_DIR="${ISSUE_ID}/mobile-matrix" \
npx playwright test "${specs[@]}" --workers=1 --reporter=list
)
}
case "$MODE" in
help|-h|--help)
usage
;;
local)
QA_ISSUE_ID="$ISSUE_ID" \
VISUAL_MATRIX_REPORT_DIR="$REPORT_DIR" \
bash "$ROOT_DIR/scripts/qa/run-web-gates.sh" qg6-visual-matrix-local
;;
attached)
run_attached "${E2E_BASE_URL:-}" "${VISUAL_MATRIX_SCOPE:-full}"
;;
live)
run_attached "${E2E_BASE_URL:-https://oa.hyinda.com}" "${VISUAL_MATRIX_SCOPE:-mobile}"
;;
*)
usage >&2
exit 2
;;
esac