Testing Setup and Commands
This guide covers the essential setup and commands for SDK testing.
## Development Environment Setup
### Initial Setup
Required one-time setup for all SDK developers:
# Set up development environment (required first step)
./scripts/setup-dev.sh
This script installs: - Pre-commit hooks for code quality - Development dependencies (tox, pytest, etc.) - Code formatting tools (black, isort) - Static analysis tools (pylint, mypy)
### Verification
Verify your setup with basic tests:
# 1. Run unit tests to verify setup
tox -e unit
# 2. Run integration tests
tox -e integration
# 3. Check code coverage (minimum 80% required)
tox -e unit -- --cov=honeyhive --cov-report=html --cov-fail-under=80
## Testing Commands Reference
### Core Test Commands
Run specific test types:
# Unit tests only (fast, isolated tests)
tox -e unit
# Integration tests only (end-to-end functionality)
tox -e integration
# All tests (unit + integration)
tox -e unit -e integration
### Specialized Testing
# CLI tests specifically
pytest tests/unit/test_cli_main.py -v
# CLI tests with coverage
pytest tests/unit/test_cli_main.py --cov=src/honeyhive/cli/main --cov-report=term-missing
# Lambda compatibility tests
cd tests/lambda && make test-lambda
# Performance tests
cd tests/lambda && make test-performance
# Integration tests (requires real API credentials)
tox -e integration
### Coverage and Quality
# Coverage report (HTML format)
pytest --cov=honeyhive --cov-report=html
# Coverage report (terminal)
pytest --cov=honeyhive --cov-report=term-missing
# Specific test file with coverage
pytest tests/test_tracer.py --cov=honeyhive --cov-report=term-missing
### Quality Gates
Required before every commit:
# Format verification (black, isort)
tox -e format
# Lint verification (pylint, mypy)
tox -e lint
# Documentation build
tox -e docs
# Combined quality check
tox -e format && tox -e lint
### Python Version Testing
# Test specific Python versions
tox -e py311 # Python 3.11
tox -e py312 # Python 3.12
tox -e py313 # Python 3.13
# Test all supported versions
tox -e py311 -e py312 -e py313
## Test Environment Configuration
### Basic Test Configuration
# Test configuration
test_tracer = HoneyHiveTracer.init(
api_key="test-api-key", # Or set HH_API_KEY environment variable
project="test-project", # Or set HH_PROJECT environment variable
source="development", # Or set HH_SOURCE environment variable
test_mode=True, # Enable test mode (or set HH_TEST_MODE=true)
disable_http_tracing=True # Optimize for testing
)
### Environment Variables for Testing
# Set test environment variables
export HH_API_KEY="test-key"
export HH_SOURCE="test"
export HH_TEST_MODE="true"
### Multi-Environment Testing
def create_test_tracer(environment="test"):
config = {
"test": {
"api_key": "test-key",
"project": "test-project",
"test_mode": True
},
"integration": {
"api_key": os.getenv("HH_INTEGRATION_KEY"),
"project": "integration-project",
"test_mode": False
}
}
return HoneyHiveTracer.init(**config[environment])
## Quick Testing Examples
### Basic Integration Test
from honeyhive import HoneyHiveTracer
def test_basic_integration():
tracer = HoneyHiveTracer.init(
api_key="test-key", # Or set HH_API_KEY environment variable
project="test-project", # Or set HH_PROJECT environment variable
test_mode=True # Important: enables test mode (or set HH_TEST_MODE=true)
)
with tracer.trace("test-operation") as span:
span.set_attribute("test.type", "integration")
assert span is not None
### Mock HoneyHive for Testing
from unittest.mock import Mock, patch
def test_with_mock_tracer():
with patch('honeyhive.HoneyHiveTracer') as mock_tracer:
mock_tracer.init.return_value = Mock()
# Your application code here
result = your_function_that_uses_honeyhive()
# Verify tracer was used
mock_tracer.init.assert_called_once()
### Test Multi-Instance Tracers
def test_multiple_tracers():
tracer1 = HoneyHiveTracer.init(
api_key="key1", # Unique API key for project1
project="project1", # Unique project identifier
test_mode=True # Or set HH_TEST_MODE=true
)
tracer2 = HoneyHiveTracer.init(
api_key="key2", # Unique API key for project2
project="project2", # Unique project identifier
test_mode=True # Or set HH_TEST_MODE=true
)
# Verify independence
assert tracer1.session_id != tracer2.session_id
assert tracer1.project != tracer2.project
### CLI Testing
from click.testing import CliRunner
from unittest.mock import Mock, patch
from honeyhive.cli.main import cli
def test_cli_command():
"""Test CLI commands using Click's CliRunner."""
runner = CliRunner()
# Test basic command
result = runner.invoke(cli, ["--help"])
assert result.exit_code == 0
assert "HoneyHive CLI" in result.output
@patch('honeyhive.cli.main.HoneyHive')
def test_cli_with_mocking(mock_client):
"""Test CLI commands with proper mocking."""
mock_client.return_value = Mock()
runner = CliRunner()
result = runner.invoke(cli, ["api", "request", "--method", "GET", "--url", "/test"])
assert result.exit_code == 0
mock_client.assert_called_once()
## Troubleshooting Setup Issues
### Common Setup Problems
Problem: tox command not found Solution: Install tox in your virtual environment:
pip install tox
Problem: Tests fail with import errors Solution: Install SDK in development mode:
pip install -e .
Problem: Pre-commit hooks not running Solution: Reinstall pre-commit hooks:
pre-commit install
### Performance Issues
Problem: Tests are slow Solution: Run unit tests only for faster feedback:
# Fast unit tests only
tox -e unit
# Skip integration tests during development
pytest tests/unit/ -v
Problem: Coverage calculation is slow Solution: Use faster coverage options:
# Skip HTML report for faster results
pytest --cov=honeyhive --cov-report=term
## See Also
Unit Testing Strategies - Unit testing strategies and patterns
Integration Testing Strategies - Integration testing best practices
Troubleshooting Test Issues - Detailed troubleshooting guide
GitHub Actions CI/CD Testing - CI/CD testing workflows