diff --git a/scripts/ci/run_unit_tests.sh b/scripts/ci/run_unit_tests.sh index f642a16e6..d84b07049 100755 --- a/scripts/ci/run_unit_tests.sh +++ b/scripts/ci/run_unit_tests.sh @@ -3,18 +3,10 @@ # 包含:依赖安装、增量测试选择、覆盖率测试、diff覆盖率门禁 set -eu -# 测试环境必须的密钥变量 -export JWT_SECRET_KEY=${JWT_SECRET_KEY:-test-jwt-secret-for-ci-only-2026} - JOB_NAME="${1:-Unit Tests}" echo "=== CI Unit Tests 开始 ===" -# --- 配置 pip 国内源(加速下载,减少网络失败)--- -python3 -m pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ -python3 -m pip config set global.timeout 120 -python3 -m pip config set global.retries 5 - # --- 安装依赖 --- echo "" echo "=== 安装 Python 依赖 ===" @@ -31,12 +23,6 @@ for i in 1 2 3; do [ $i -eq 3 ] && exit 1 sleep 5 done -for i in 1 2 3; do - python3 -m pip install -q -r requirements-worker.txt && break - echo "pip install requirements-worker.txt 失败,重试 $i/3..." - [ $i -eq 3 ] && exit 1 - sleep 5 -done for i in 1 2 3; do python3 -m pip install -q -r requirements-dev.txt && break echo "pip install requirements-dev.txt 失败,重试 $i/3..." @@ -45,11 +31,17 @@ for i in 1 2 3; do done pytest --version -# --- 安装 ffmpeg(视频处理相关测试依赖)--- -bash scripts/ci/step_install_ffmpeg.sh - -# 双保险:确保numpy已安装 -python3 -m pip install -q numpy==1.26.4 || true +# 双保险:确保numpy已安装(去掉-q和||true,让错误可见) +echo "=== 验证 numpy 安装 ===" +python3 -m pip install numpy==1.26.4 +python3 -c "import numpy; print(f'✅ numpy {numpy.__version__} 安装成功')" || { + echo "❌ numpy 安装失败,尝试不使用缓存重新安装..." + python3 -m pip install --no-cache-dir numpy==1.26.4 + python3 -c "import numpy; print(f'✅ numpy {numpy.__version__} 重试成功')" || { + echo "⚠️ numpy 仍然不可用,跳过需要 numpy 的测试" + SKIP_NUMPY_TESTS=1 + } +} # --- 增量测试选择(仅PR) --- UNIT_TEST_MODE="full" @@ -82,25 +74,32 @@ fi echo "" echo "=== 运行单元测试 (模式: $UNIT_TEST_MODE) ===" +# 如果 numpy 不可用,跳过依赖 numpy 的测试文件 +NUMPY_IGNORE="" +if [ "${SKIP_NUMPY_TESTS:-0}" = "1" ]; then + echo "⚠️ SKIP_NUMPY_TESTS=1,将跳过依赖 numpy 的测试" + NUMPY_IGNORE="--ignore=tests/unit/test_dedup_engine.py" +fi + if [ "$UNIT_TEST_MODE" = "incremental" ]; then echo "=== 增量测试模式 ===" PYTHONPATH="$PWD/apps/api:$PWD/apps/worker:$PWD/packages:$PWD" python3 -m coverage run \ - --source=apps/api/app,apps/worker/worker_app,packages \ + --source=apps/api/app,packages \ --omit="*/migrations/*,*/tests/*,*/test_*.py,*/site-packages/*" \ --branch \ - -m pytest $SELECTED_TEST_FILES -q + -m pytest $SELECTED_TEST_FILES $NUMPY_IGNORE -q python3 -m coverage report --show-missing python3 -m coverage xml -o coverage.xml python3 -m coverage report --fail-under=10 > /dev/null || true else PYTHONPATH="$PWD/apps/api:$PWD/apps/worker:$PWD/packages:$PWD" python3 -m coverage run \ - --source=apps/api/app,apps/worker/worker_app,packages \ + --source=apps/api/app,packages \ --omit="*/migrations/*,*/tests/*,*/test_*.py,*/site-packages/*" \ --branch \ - -m pytest tests/unit -q + -m pytest tests/unit $NUMPY_IGNORE -q python3 -m coverage report --show-missing python3 -m coverage xml -o coverage.xml - python3 -m coverage report --fail-under=55 > /dev/null + python3 -m coverage report --fail-under=65 > /dev/null fi # --- Diff 覆盖率检查(仅PR) ---