Files

200 lines
4.6 KiB
Markdown
Raw Permalink Normal View History

2025-09-11 23:13:58 +01:00
# Test Suite
This directory contains comprehensive tests for the MCP Template system.
## Test Structure
```
tests/
├── unit/ # Unit tests (fast, no external dependencies)
├── integration/ # Integration tests (require real server connections)
├── e2e/ # End-to-end tests
└── README.md # This file
```
## Test Types
### Unit Tests
- **Fast**: Run in milliseconds
- **Isolated**: No external dependencies
- **Focused**: Test individual components
- **Run with**: `python run_tests.py unit`
### Integration Tests
- **Real connections**: Test with actual MCP server
- **API calls**: May require API keys
- **Slower**: Take longer to execute
- **Run with**: `python run_tests.py integration`
## Running Tests
### Quick Start
```bash
# Run all tests
python run_tests.py all
# Run unit tests only
python run_tests.py unit
# Run integration tests only
python run_tests.py integration
# Run specific test file
python run_tests.py specific tests/integration/test_mcp_integration.py
```
### Advanced Options
```bash
# Run with coverage report
python run_tests.py all --coverage
# Skip slow tests
python run_tests.py integration --skip-slow
# Run specific test markers
pytest -m "integration and not slow"
pytest -m "unit"
pytest -m "requires_api_key"
```
## Test Markers
- **`@pytest.mark.unit`**: Unit tests (fast, isolated)
- **`@pytest.mark.integration`**: Integration tests (require server)
- **`@pytest.mark.requires_api_key`**: Tests requiring API keys
- **`@pytest.mark.slow`**: Slow-running tests
- **`@pytest.mark.asyncio`**: Async tests
## Environment Setup
### API Keys (for integration tests)
Create a `.env` file in the project root:
```bash
# OpenAI (required for most tests)
OPENAI_API_KEY=your_openai_api_key_here
# Optional: Other providers
ANTHROPIC_API_KEY=your_anthropic_key_here
GROK_API_KEY=your_grok_key_here
```
### Test Configuration
Tests are configured via `pytest.ini`:
- Async mode enabled
- Custom markers defined
- Test discovery patterns
- Warning filters
## Integration Test Details
### MCP Server Management
Integration tests automatically:
1. Start MCP server processes
2. Wait for server readiness
3. Connect test clients
4. Clean up processes after tests
### Transport Testing
- **SSE Transport**: HTTP-based, tested with real server
- **STDIO Transport**: Direct process communication
### AI Provider Testing
- **OpenAI**: Primary provider for most tests
- **Claude**: Tested if ANTHROPIC_API_KEY available
- **Grok**: Tested if GROK_API_KEY available
## Writing Tests
### Unit Test Example
```python
import pytest
from mcp_template.core.types import TransportType
@pytest.mark.unit
def test_transport_enum():
"""Test TransportType enum values"""
assert TransportType.SSE.value == "sse"
assert TransportType.STDIO.value == "stdio"
```
### Integration Test Example
```python
import pytest
from mcp_llm_client import MCPAIClient, TransportType
@pytest.mark.integration
@pytest.mark.requires_api_key
@pytest.mark.asyncio
async def test_client_connection(sse_server):
"""Test MCP client can connect to server"""
if not os.getenv("OPENAI_API_KEY"):
pytest.skip("OpenAI API key not available")
client = MCPAIClient(model="gpt-4o", transport=TransportType.SSE)
try:
await client.connect(sse_server.url)
tools = await client.get_mcp_tools()
assert len(tools) > 0
finally:
await client.disconnect()
```
## Test Coverage
Run tests with coverage:
```bash
# Generate HTML coverage report
python run_tests.py all --coverage
# View coverage report
open htmlcov/index.html
```
## Troubleshooting
### Common Issues
1. **Server won't start**: Check port availability
2. **API key errors**: Ensure `.env` file exists
3. **Connection timeouts**: Increase timeout values
4. **Process cleanup**: Tests handle cleanup automatically
### Debug Mode
```bash
# Run with verbose output
pytest -v -s tests/integration/test_mcp_integration.py::TestMCPClientIntegration::test_sse_transport_connection
# Run single test with debugging
pytest -v --pdb tests/integration/test_mcp_integration.py -k "test_sse_transport"
```
## CI/CD Integration
Tests are designed to work in CI/CD environments:
- Automatic skipping when API keys unavailable
- Process cleanup on test failure
- No manual server startup required
- Cross-platform compatibility
## Performance Testing
Some tests measure performance:
- Connection establishment time
- Query response times
- Concurrent connection handling
- Resource cleanup efficiency
Run performance tests:
```bash
pytest -m "slow" -v
```
2025-09-13 00:33:33 +01:00