55 lines
2.6 KiB
Bash
Executable File
55 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# =====================================================================
|
||
# pbl_evidence 测试环境引导(发现项 DISC.2)
|
||
#
|
||
# 背景:测试机宿主 python3 **没有** pytest,`python3 -m pytest` 直接
|
||
# `No module named pytest`。此前靠临时注入
|
||
# PYTHONPATH=<workspace>/.pylibs(pytest 9.1.1)跑通,属一次性手段,
|
||
# 不可复现、且会让 test 角色误判为「用例失败/环境不可用」。
|
||
#
|
||
# 本脚本把「测试前置依赖」变成显式、可重放的步骤:
|
||
# 1) 在模块仓库内建独立测试 venv(默认 .venv-test,已在 .gitignore 排除)
|
||
# 2) 安装 requirements-dev.txt(== pyproject [project.optional-dependencies].test)
|
||
# 3) 打印 pytest 版本自证可用
|
||
#
|
||
# 用法:
|
||
# bash scripts/setup_test_env.sh
|
||
# PBL_EVIDENCE_TEST_VENV=/tmp/ev-venv bash scripts/setup_test_env.sh # 换 venv 位置
|
||
# PBL_EVIDENCE_INSTALL_PKG=1 bash scripts/setup_test_env.sh # 顺带 pip install -e .
|
||
#
|
||
# 幂等:venv 已存在则复用,pip 已满足则秒退;可被 build.sh / CI 反复调用。
|
||
# =====================================================================
|
||
set -euo pipefail
|
||
|
||
MODULE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
VENV="${PBL_EVIDENCE_TEST_VENV:-${MODULE_ROOT}/.venv-test}"
|
||
REQ_DEV="${MODULE_ROOT}/requirements-dev.txt"
|
||
HOST_PY="${PBL_EVIDENCE_HOST_PYTHON:-$(command -v python3)}"
|
||
|
||
log() { echo "[setup_test_env] $*"; }
|
||
die() { echo "[setup_test_env][FATAL] $*" >&2; exit 1; }
|
||
|
||
[ -f "${REQ_DEV}" ] || die "缺少测试依赖清单 ${REQ_DEV}"
|
||
[ -x "${HOST_PY}" ] || die "找不到宿主 python3(可用 PBL_EVIDENCE_HOST_PYTHON 指定)"
|
||
|
||
if [ ! -x "${VENV}/bin/python" ]; then
|
||
log "创建测试 venv: ${VENV}"
|
||
"${HOST_PY}" -m venv "${VENV}" || die "python3 -m venv 失败(宿主缺 venv 模块?)"
|
||
else
|
||
log "复用已存在的测试 venv: ${VENV}"
|
||
fi
|
||
|
||
VPY="${VENV}/bin/python"
|
||
# 升级 pip 属尽力而为(离线/内网源可能不可达),失败不阻断——真正的门禁是下一步安装
|
||
"${VPY}" -m pip install --quiet --upgrade pip >/dev/null 2>&1 || log "pip 自升级跳过(不影响后续安装)"
|
||
log "安装测试依赖: ${REQ_DEV}"
|
||
"${VPY}" -m pip install -r "${REQ_DEV}" || die "安装 pytest 失败:检查内网 PyPI 源可达性(见 README「Running tests」排障)"
|
||
|
||
if [ "${PBL_EVIDENCE_INSTALL_PKG:-0}" = "1" ]; then
|
||
log "安装模块本体(可编辑):pip install -e ${MODULE_ROOT}"
|
||
"${VPY}" -m pip install -e "${MODULE_ROOT}" || die "pip install -e . 失败"
|
||
fi
|
||
|
||
log "自证可用:$("${VPY}" -m pytest --version 2>&1 | head -1)"
|
||
log "TEST ENV READY: ${VPY}"
|