179 lines
4.8 KiB
Markdown
179 lines
4.8 KiB
Markdown
# Tester - HTTP Contract Test Runner
|
|
|
|
Web UI for discovering and running contract tests.
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Sync tests from production repo (local dev)
|
|
/home/mariano/wdir/ama/core_nest/pawprint/ctrl/sync-tests.sh
|
|
|
|
# Run locally
|
|
cd /home/mariano/wdir/ama/pawprint/ward
|
|
python -m tools.tester
|
|
|
|
# Open in browser
|
|
http://localhost:12003/tester
|
|
```
|
|
|
|
## Architecture
|
|
|
|
**Test Definitions** → **Tester (Runner + UI)** → **Target API**
|
|
|
|
```
|
|
amar_django_back_contracts/
|
|
└── tests/contracts/ ← Test definitions (source of truth)
|
|
├── mascotas/
|
|
├── productos/
|
|
└── workflows/
|
|
|
|
ward/tools/tester/
|
|
├── tests/ ← Synced from contracts (deployment)
|
|
│ ├── mascotas/
|
|
│ ├── productos/
|
|
│ └── workflows/
|
|
├── base.py ← HTTP test base class
|
|
├── core.py ← Test discovery & execution
|
|
├── api.py ← FastAPI endpoints
|
|
└── templates/ ← Web UI
|
|
|
|
```
|
|
|
|
## Strategy: Separation of Concerns
|
|
|
|
1. **Tests live in production repo** (`amar_django_back_contracts`)
|
|
- Developers write tests alongside code
|
|
- Tests are versioned with the API
|
|
- PR reviews include test changes
|
|
|
|
2. **Tester consumes tests** (`ward/tools/tester`)
|
|
- Provides web UI for visibility
|
|
- Runs tests against any target (dev, stage, prod)
|
|
- Shows test coverage to product team
|
|
|
|
3. **Deployment syncs tests**
|
|
- `sync-tests.sh` copies tests from contracts to tester
|
|
- Deployment script includes test sync
|
|
- Server always has latest tests
|
|
|
|
## Configuration
|
|
|
|
### Single Environment (.env)
|
|
|
|
```env
|
|
CONTRACT_TEST_URL=https://demo.amarmascotas.ar
|
|
CONTRACT_TEST_API_KEY=your-api-key-here
|
|
```
|
|
|
|
### Multiple Environments (environments.json)
|
|
|
|
Configure multiple target environments with individual tokens:
|
|
|
|
```json
|
|
[
|
|
{
|
|
"id": "demo",
|
|
"name": "Demo",
|
|
"url": "https://demo.amarmascotas.ar",
|
|
"api_key": "",
|
|
"description": "Demo environment for testing",
|
|
"default": true
|
|
},
|
|
{
|
|
"id": "dev",
|
|
"name": "Development",
|
|
"url": "https://dev.amarmascotas.ar",
|
|
"api_key": "dev-token-here",
|
|
"description": "Development environment"
|
|
},
|
|
{
|
|
"id": "prod",
|
|
"name": "Production",
|
|
"url": "https://amarmascotas.ar",
|
|
"api_key": "prod-token-here",
|
|
"description": "Production (use with caution!)"
|
|
}
|
|
]
|
|
```
|
|
|
|
**Environment Selector**: Available in UI header on both Runner and Filters pages. Selection persists via localStorage.
|
|
|
|
## Web UI Features
|
|
|
|
- **Filters**: Advanced filtering by domain, module, status, and search
|
|
- **Runner**: Execute tests with real-time progress tracking
|
|
- **Multi-Environment**: Switch between dev/stage/prod with per-environment tokens
|
|
- **URL State**: Filter state persists via URL when running tests
|
|
- **Real-time Status**: See test results as they run
|
|
|
|
## API Endpoints
|
|
|
|
```
|
|
GET /tools/tester/ # Runner UI
|
|
GET /tools/tester/filters # Filters UI
|
|
GET /tools/tester/api/tests # List all tests
|
|
GET /tools/tester/api/environments # List environments
|
|
POST /tools/tester/api/environment/select # Switch environment
|
|
POST /tools/tester/api/run # Start test run
|
|
GET /tools/tester/api/run/{run_id} # Get run status (polling)
|
|
GET /tools/tester/api/runs # List all runs
|
|
```
|
|
|
|
## Usage Flow
|
|
|
|
### From Filters to Runner
|
|
|
|
1. Go to `/tools/tester/filters`
|
|
2. Filter tests (domain, module, search)
|
|
3. Select tests to run
|
|
4. Click "Run Selected"
|
|
5. → Redirects to Runner with filters applied and auto-starts execution
|
|
|
|
### URL Parameters
|
|
|
|
Runner accepts URL params for deep linking:
|
|
|
|
```
|
|
/tools/tester/?run=abc123&domains=mascotas&search=owner
|
|
```
|
|
|
|
- `run` - Auto-load results for this run ID
|
|
- `domains` - Filter by domains (comma-separated)
|
|
- `modules` - Filter by modules (comma-separated)
|
|
- `search` - Search term for test names
|
|
- `status` - Filter by status (passed,failed,skipped)
|
|
|
|
## Deployment
|
|
|
|
Tests are synced during deployment:
|
|
|
|
```bash
|
|
# Full deployment (includes test sync)
|
|
cd /home/mariano/wdir/ama/pawprint/deploy
|
|
./deploy.sh
|
|
|
|
# Or sync tests only
|
|
/home/mariano/wdir/ama/core_nest/pawprint/ctrl/sync-tests.sh
|
|
```
|
|
|
|
## Why This Design?
|
|
|
|
**Problem**: Tests scattered, no visibility, hard to demonstrate value
|
|
|
|
**Solution**:
|
|
- Tests in production repo (developer workflow)
|
|
- Tester provides visibility (product team, demos)
|
|
- Separation allows independent evolution
|
|
|
|
**Benefits**:
|
|
- Product team sees test coverage
|
|
- Demos show "quality dashboard"
|
|
- Tests protect marketplace automation work
|
|
- Non-devs can run tests via UI
|
|
|
|
## Related
|
|
|
|
- Production tests: `/home/mariano/wdir/ama/amar_django_back_contracts/tests/contracts/`
|
|
- Sync script: `/home/mariano/wdir/ama/core_nest/pawprint/ctrl/sync-tests.sh`
|
|
- Ward system: `/home/mariano/wdir/ama/pawprint/ward/`
|