---
name: integration-tests
description: Setup Python virtual environment and run integration tests with gltest
---
# Run Integration Tests
Setup the Python environment, start the studio, and run integration tests for GenLayer Studio.
## Prerequisites
- Python 3.12 installed
- virtualenv installed (`pip install virtualenv`)
- Docker and Docker Compose installed
## Step 1: Start the Studio
The studio must be running before executing integration tests.
```bash
# Stop any existing containers and rebuild
docker-compose down && docker-compose up --build
```
Wait for all services to be healthy before proceeding.
## Step 2: Setup Virtual Environment (first time or reset)
In a separate terminal:
```bash
# Remove existing venv if present
rm -rf .venv
# Create new venv with Python 3.12
virtualenv -p python3.12 .venv
# Activate
source .venv/bin/activate
# Upgrade pip
pip install --upgrade pip
# Install all dependencies
pip install -r requirements.txt
pip install -r requirements.test.txt
pip install -r backend/requirements.txt
# Set Python path
export PYTHONPATH="$(pwd)"
```
## Step 3: Run Integration Tests
```bash
# Activate venv (if not already)
source .venv/bin/activate
export PYTHONPATH="$(pwd)"
# Run all integration tests (serial)
gltest --contracts-dir . tests/integration
# Run tests in parallel (4 workers) - excludes test_validators.py
gltest --contracts-dir . tests/integration -n 4 --ignore=tests/integration/test_validators.py
# Run validator CRUD tests separately (must run serially)
gltest --contracts-dir . tests/integration/test_validators.py
# Run faster with leader-only mode (skips validator consensus)
gltest --contracts-dir . tests/integration --leader-only
# Run specific test file
gltest --contracts-dir . tests/integration/test_specific.py
# Run with verbose output
gltest --contracts-dir . tests/integration -v
# Run specific test function
gltest --contracts-dir . tests/integration/test_file.py::test_function_name
```
### Parallel Execution Notes
- Use `-n 4` to run tests in parallel with 4 workers (pytest-xdist)
- `test_validators.py` must be excluded from parallel runs (`--ignore`) because it tests validator CRUD operations and needs exclusive access to the validator state
- Run `test_validators.py` separately after parallel tests complete
## Quick Commands
### Full Setup (first time)
```bash
# Terminal 1: Start studio
docker-compose down && docker-compose up --build
# Terminal 2: Setup and run tests
rm -rf .venv && \
virtualenv -p python3.12 .venv && \
source .venv/bin/activate && \
pip install --upgrade pip && \
pip install -r requirements.txt && \
pip install -r requirements.test.txt && \
pip install -r backend/requirements.txt && \
export PYTHONPATH="$(pwd)" && \
gltest --contracts-dir . tests/integration
```
### Quick Run (after initial setup, studio already running)
```bash
source .venv/bin/activate && export PYTHONPATH="$(pwd)" && gltest --contracts-dir . tests/integration
```
### Parallel Run (4 workers)
```bash
source .venv/bin/activate && export PYTHONPATH="$(pwd)" && \
gltest --contracts-dir . tests/integration -n 4 --ignore=tests/integration/test_validators.py && \
gltest --contracts-dir . tests/integration/test_validators.py
```
### Fast Run (leader-only mode)
```bash
source .venv/bin/activate && export PYTHONPATH="$(pwd)" && gltest --contracts-dir . tests/integration --leader-only
```
## Troubleshooting
### Studio Not Running
```bash
# Check if containers are up
docker-compose ps
# Check container logs
docker-compose logs -f backend
```
### Connection Refused Errors
The studio needs time to initialize. Wait for all services to be healthy:
```bash
# Watch container status
docker-compose ps
# Check backend health
curl http://localhost:4000/health
```
### Python 3.12 Not Found
```bash
# Check available Python versions
which python3.12
# On macOS with Homebrew
brew install [email protected]
```
### gltest Command Not Found
```bash
# Make sure venv is activated
source .venv/bin/activate
# Reinstall test dependencies
pip install -r requirements.test.txt
```
### Import Errors
```bash
# Ensure PYTHONPATH is set
export PYTHONPATH="$(pwd)"
# Verify from project root
pwd # Should be genlayer-studio
```
### Test Timeouts
Integration tests may timeout if the studio is under load. Try:
```bash
# Run with leader-only for faster execution
gltest --contracts-dir . tests/integration --leader-only
# Run a single test file to isolate issues
gltest --contracts-dir . tests/integration/test_specific.py -v
```