Ctrl K
ComunidadGuías…

scripts/run-test-layer.sh

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/bin/bash
#分层测试运行脚本 - 根据标记执行不同层级的测试

set -e

PYTEST_CMD="python3 -m pytest"
LAYER="${1:-l0}"
VERBOSE="${2:-false}"

L0_FILES="tests/test_l0_unit_fast.py"
L1_FILES="tests/test_l1_integration.py"
L2_FILES="tests/test_l2_scenario_parametrized.py tests/test_l2_property_invariants.py tests/test_l2_edge_cases.py"
L3_FILES="tests/test_l3_e2e_real_llm.py"

case "$LAYER" in
    l0)
        echo "=== 运行 L0 快速单元测试 ==="
        if [ "$VERBOSE" = true ]; then
            PYTHONPATH=. $PYTEST_CMD -m l0 $L0_FILES -v --tb=short
        else
            PYTHONPATH=. $PYTEST_CMD -m l0 $L0_FILES -q --tb=short
        fi
        ;;
    l1)
        echo "=== 运行 L1 集成测试 ==="
        if [ "$VERBOSE" = true ]; then
            PYTHONPATH=. $PYTEST_CMD -m l1 $L1_FILES -v --tb=short
        else
            PYTHONPATH=. $PYTEST_CMD -m l1 $L1_FILES -q --tb=short
        fi
        ;;
    l0-l1)
        echo "=== 运行 L0 + L1 测试 ==="
        if [ "$VERBOSE" = true ]; then
            PYTHONPATH=. $PYTEST_CMD -m "l0 or l1" $L0_FILES $L1_FILES -v --tb=short
        else
            PYTHONPATH=. $PYTEST_CMD -m "l0 or l1" $L0_FILES $L1_FILES -q --tb=short
        fi
        ;;
    l2)
        echo "=== 运行 L2 场景/边界/不变量测试 ==="
        if [ "$VERBOSE" = true ]; then
            PYTHONPATH=. $PYTEST_CMD -m l2 $L2_FILES -v --tb=short
        else
            PYTHONPATH=. $PYTEST_CMD -m l2 $L2_FILES -q --tb=short
        fi
        ;;
    l2-scenario)
        echo "=== 运行 L2 场景测试 ==="
        if [ "$VERBOSE" = true ]; then
            PYTHONPATH=. $PYTEST_CMD tests/test_l2_scenario_parametrized.py -v --tb=short
        else
            PYTHONPATH=. $PYTEST_CMD tests/test_l2_scenario_parametrized.py -q --tb=short
        fi
        ;;
    l2-property)
        echo "=== 运行 L2 不变量测试 ==="
        if [ "$VERBOSE" = true ]; then
            PYTHONPATH=. $PYTEST_CMD tests/test_l2_property_invariants.py -v --tb=short
        else
            PYTHONPATH=. $PYTEST_CMD tests/test_l2_property_invariants.py -q --tb=short
        fi
        ;;
    l2-edge)
        echo "=== 运行 L2 边界条件测试 ==="
        if [ "$VERBOSE" = true ]; then
            PYTHONPATH=. $PYTEST_CMD tests/test_l2_edge_cases.py -v --tb=short
        else
            PYTHONPATH=. $PYTEST_CMD tests/test_l2_edge_cases.py -q --tb=short
        fi
        ;;
    l3)
        echo "=== 运行 L3 真实LLM端到端测试 ==="
        echo "注意: 需要配置 DEEPSEEK_API_KEY 或 MINIMAX_API_KEY"
        echo "正在加载 .env 文件..."
        if [ -f .env ]; then
            export $(grep -v '^#' .env | xargs)
        fi
        if [ "$VERBOSE" = true ]; then
            PYTHONPATH=. $PYTEST_CMD -m l3 $L3_FILES -v --tb=short -o addopts=""
        else
            PYTHONPATH=. $PYTEST_CMD -m l3 $L3_FILES -q --tb=short -o addopts=""
        fi
        ;;
    all)
        echo "=== 运行所有测试 (L0 + L1 + L2) ==="
        if [ "$VERBOSE" = true ]; then
            PYTHONPATH=. $PYTEST_CMD -m "l0 or l1 or l2" $L0_FILES $L1_FILES $L2_FILES -v --tb=short
        else
            PYTHONPATH=. $PYTEST_CMD -m "l0 or l1 or l2" $L0_FILES $L1_FILES $L2_FILES -q --tb=short
        fi
        ;;
    all-live)
        echo "=== 运行所有测试 (L0 + L1 + L2 + L3) ==="
        echo "正在加载 .env 文件..."
        if [ -f .env ]; then
            export $(grep -v '^#' .env | xargs)
        fi
        if [ "$VERBOSE" = true ]; then
            PYTHONPATH=. $PYTEST_CMD -m "l0 or l1 or l2 or l3" $L0_FILES $L1_FILES $L2_FILES $L3_FILES -v --tb=short -o addopts=""
        else
            PYTHONPATH=. $PYTEST_CMD -m "l0 or l1 or l2 or l3" $L0_FILES $L1_FILES $L2_FILES $L3_FILES -q --tb=short -o addopts=""
        fi
        ;;
    *)
        echo "用法: $0 [l0|l1|l0-l1|l2|l2-scenario|l2-property|l2-edge|l3|all|all-live] [verbose]"
        echo ""
        echo "测试分层说明:"
        echo "  l0:         快速单元测试 (~50条, <1秒) - 每轮提交运行"
        echo "  l1:         集成测试 (~150条, <60秒) - PR时运行"
        echo "  l0-l1:      L0 + L1 组合"
        echo "  l2:         L2层全部测试 (~300条, <5分钟) - 合并前运行"
        echo "  l2-scenario:    L2场景测试 (~200条)"
        echo "  l2-property:    L2不变量测试 (~50条)"
        echo "  l2-edge:        L2边界条件测试 (~50条)"
        echo "  l3:         真实LLM端到端测试 (10条, ~20秒) - 发布时运行"
        echo "  all:        L0 + L1 + L2 全部测试"
        echo "  all-live:   L0 + L1 + L2 + L3 全部测试(含真实LLM)"
        echo ""
        echo "示例:"
        echo "  $0 l0              # 快速运行基础测试"
        echo "  $0 l0-l1           # PR检查"
        echo "  $0 l2              # 合并前完整检查"
        echo "  $0 l3              # 真实LLM测试"
        echo "  $0 all             # 全部测试"
        echo "  $0 all-live        # 全部测试(含真实LLM)"
        echo "  $0 l0 true         # 详细输出"
        exit 1
        ;;
esac

echo ""
echo "测试完成!"