关于 setup-web-tests
面向无法使用 flox 的 Claude Code for web 环境的 Python 测试配置指南,涵盖获取指定 Python 版本、安装依赖及配置所需服务。
主要功能
- 01安装项目要求的 Python 版本
- 02使用 uv 配置依赖
- 03通过 Docker 启动测试服务
- 04配置 hosts 与环境变量
- 05准备前端测试占位文件
适用场景
- 01在 Claude Code for web 中运行后端测试
- 02解决 Python 版本不匹配
- 03为测试准备本地服务
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ posthog/ posthog --skill setup-web-tests安装后在 Claude Code 中输入/setup-web-tests确认已加载。
详细介绍
Claude Code for web — 测试环境搭建
本文档介绍如何在 Claude Code for web 环境中搭建并运行 Python 测试,该环境中无法使用 flox。
如果你在按照这些说明操作时遇到困难,请停止操作并向用户寻求指导。请建议他们更新本指南。
问题
该项目需要 pyproject.toml 中指定的特定 Python 版本(请查看 requires-python),但是:
- Claude Code for web 环境可能使用不同的系统 Python 版本
- 如果该版本尚未被 uv 收录,
uv python install <version>可能会失败 uv sync会强制要求精确的版本约束,Python 版本不正确时会失败
解决方案:从 python-build-standalone 下载 Python
从 python-build-standalone 的 GitHub releases 下载所需的确切版本。下面的脚本会自动从 pyproject.toml 中检测所需版本:
# Auto-detect the required version from pyproject.toml
REQUIRED_VERSION=$(grep requires-python pyproject.toml | grep -oP '[\d.]+')
echo "Required Python: $REQUIRED_VERSION"
# Get the latest release tag from python-build-standalone
RELEASE_TAG=$(curl -sL "https://api.github.com/repos/astral-sh/python-build-standalone/releases/latest" | grep '"tag_name"' | cut -d'"' -f4)
# Find and download the matching build
DOWNLOAD_URL=$(curl -sL "https://api.github.com/repos/astral-sh/python-build-standalone/releases/latest" | \
grep "browser_download_url" | grep "$REQUIRED_VERSION" | grep "x86_64-unknown-linux-gnu-install_only.tar.gz" | head -1 | cut -d'"' -f4)
mkdir -p /tmp/python-install && cd /tmp/python-install
curl -L -o python.tar.gz "$DOWNLOAD_URL"
tar -xzf python.tar.gz
# Verify
/tmp/python-install/python/bin/python3 --version
如果自动检测未能找到 URL(例如版本过新),请手动浏览 releases 页面,寻找 cpython-<version>+<tag>-x86_64-unknown-linux-gnu-install_only.tar.gz 资源。
安装依赖并运行测试
cd /home/user/posthog
uv sync --python /tmp/python-install/python/bin/python3
source .venv/bin/activate
# Run a specific test (if hogli is available)
hogli test path/to/test.py::TestClass::test_method -v
# Or use pytest directly
pytest path/to/test.py::TestClass::test_method -v
# Run all tests in a directory
hogli test posthog/hogql/test/ -v
Docker 服务
大多数测试需要后端服务处于运行状态。如果 Docker 可用,请使用以下命令启动它们:
docker compose -f docker-compose.dev.yml up -d
完整服务列表和端口请参阅 docker-compose.dev.yml。某些测试目录有其特定的服务要求,记录在各自的配置文件中。
hosts 文件设置
测试需要将某些主机名解析到 localhost:
echo "127.0.0.1 kafka clickhouse clickhouse-coordinator objectstorage" | sudo tee -a /etc/hosts
环境变量
测试需要 .github/workflows/ci-backend.yml 中定义的环境变量(请参阅文件顶部的 env: 部分)。你也可以将 .env.example 复制为 .env,以获得本地开发的默认值。
附加设置
前端 dist 占位文件
某些测试需要前端构建产物存在(即使为空):
mkdir -p frontend/dist
touch frontend/dist/index.html
touch frontend/dist/layout.html
touch frontend/dist/exporter.html
SAML 依赖(如需要)
对于 SAML 相关功能:
sudo apt-get update
sudo apt-get install libxml2-dev libxmlsec1-dev libxmlsec1-openssl
Pytest 配置
pytest.ini 设置了:
pythonpath = . commonDJANGO_SETTINGS_MODULE = posthog.settingsDEBUG=1、TEST=1
默认忽略:--ignore=posthog/user_scripts --ignore=services/llm-gateway --ignore=common/ingestion/acceptance_tests
调试安装问题
如果你在测试环境搭建过程中遇到问题,请参阅 .github/workflows/ci-backend.yml 以获取权威的 CI 配置。该文件展示了:
- CI 中使用的确切 Python 版本
- 安装的系统依赖
- 设置的环境变量
- Docker 服务配置
- 测试执行命令
限制
- Docker 不可用:需要服务的测试在没有 Docker 的情况下会失败
- 网络限制:下载 Python 需要访问 GitHub
- Temporal 测试:需要额外的 Temporal 服务设置