setup-web-tests
Configure Python testing environments for web projects when standard dependency syncs fail.
Install
mkdir -p .claude/skills/setup-web-tests && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/4029" && unzip -o skill.zip -d .claude/skills/setup-web-tests && rm skill.zipInstalls to .claude/skills/setup-web-tests
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Set up Python test environment in Claude Code for web where flox is unavailable. Use when you need to run backend tests and `uv sync` fails due to Python version mismatch.Key capabilities
- →Downloads specific Python versions from build-standalone
- →Configures test environments without flox
- →Sets up Docker services for backend tests
- →Configures host file entries for local resolution
How it works
It detects the required Python version, downloads the standalone build, and syncs dependencies to enable test execution.
Inputs & outputs
When to use setup-web-tests
- →Setup backend test environment
- →Fix dependency issues for running tests
- →Configure environment for manual test execution
About this skill
Claude Code for web — test setup
This document describes how to set up and run Python tests in a Claude Code for web environment, where flox is not available.
If you get stuck following these instructions, please bail out to the user and seek their guidance. Please suggest that they update this guide.
Problem
The project requires a specific Python version pinned in pyproject.toml (check requires-python), but:
- Claude Code for web environments may have a different system Python version
uv python install <version>may fail if the version isn't yet indexed by uvuv syncenforces the exact version constraint and will fail with the wrong Python version
Solution: Download Python from python-build-standalone
Download the exact version from python-build-standalone GitHub releases. The script below auto-detects the required version from 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
If the auto-detection doesn't find a URL (e.g., the version is too new), browse the releases page manually and look for a cpython-<version>+<tag>-x86_64-unknown-linux-gnu-install_only.tar.gz asset.
Install dependencies and run tests
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 Services
Most tests require backend services running. If Docker is available, start them with:
docker compose -f docker-compose.dev.yml up -d
See docker-compose.dev.yml for the full list of services and ports. Some test directories have specific service requirements documented in their own configuration files.
Hosts file setup
Tests expect certain hostnames to resolve to localhost:
echo "127.0.0.1 kafka clickhouse clickhouse-coordinator objectstorage" | sudo tee -a /etc/hosts
Environment Variables
Tests require environment variables defined in .github/workflows/ci-backend.yml (see the env: section at the top of the file). You can also copy .env.example to .env for local development defaults.
Additional Setup
Frontend dist placeholders
Some tests require frontend build artifacts to exist (even if empty):
mkdir -p frontend/dist
touch frontend/dist/index.html
touch frontend/dist/layout.html
touch frontend/dist/exporter.html
SAML dependencies (if needed)
For SAML-related functionality:
sudo apt-get update
sudo apt-get install libxml2-dev libxmlsec1-dev libxmlsec1-openssl
Pytest Configuration
The pytest.ini sets:
pythonpath = . commonDJANGO_SETTINGS_MODULE = posthog.settingsDEBUG=1,TEST=1
Default ignores: --ignore=posthog/user_scripts --ignore=services/llm-gateway --ignore=common/ingestion/acceptance_tests
Debugging Installation Issues
If you encounter issues with the test setup, refer to .github/workflows/ci-backend.yml for the authoritative CI configuration. This file shows:
- Exact Python version used in CI
- System dependencies installed
- Environment variables set
- Docker services configuration
- Test execution commands
Limitations
- Docker unavailable: Tests requiring services will fail without Docker
- Network restrictions: Downloading Python requires GitHub access
- Temporal tests: Require additional Temporal service setup
When not to use it
- →When flox is available
- →When Docker is unavailable for required services
Prerequisites
Limitations
- →Requires Docker for service-dependent tests
- →Requires network access to GitHub
How it compares
It provides a manual environment setup script for restricted environments instead of relying on automated tools like flox.
Compared to similar skills
setup-web-tests side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| setup-web-tests (this skill) | 1 | 1mo | Caution | Advanced |
| temporal-python-testing | 8 | 3mo | No flags | Advanced |
| home-assistant-integration-knowledge | 8 | 2mo | No flags | Advanced |
| test-api-serializer | 0 | 4mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by PostHog
View all by PostHog →You might also like
temporal-python-testing
wshobson
Test Temporal workflows with pytest, time-skipping, and mocking strategies. Covers unit testing, integration testing, replay testing, and local development setup. Use when implementing Temporal workflow tests or debugging test failures.
home-assistant-integration-knowledge
home-assistant
Everything you need to know to build, test and review Home Assistant Integrations. If you're looking at an integration, you must use this as your primary reference.
test-api-serializer
engremran07
Serializer tests: to_representation, to_internal_value, validation. Use when: testing DRF serializer output, input validation, custom field logic.
repo-testing
ppenumatsa1
Use for test strategy, pytest execution patterns, and test-safe changes in this FastAPI reference architecture.
vyper-compiler
vyperlang
Vyper smart contract compiler internals. Use when working on the Vyper compiler codebase — compilation pipeline, Venom IR, semantic analysis, code generation, testing, or contributing. Triggers on vyper compiler development, Venom passes, AST/semantics changes, codegen work, or test writing.
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.