133 lines
3.2 KiB
Markdown
133 lines
3.2 KiB
Markdown
# PostgreSQL Database Tester
|
|
|
|
This is a Python-based testing tool for PostgreSQL databases. It uses SQLAlchemy for ORM and Alembic for database migrations.
|
|
|
|
## Features
|
|
|
|
- Test PostgreSQL database connection
|
|
- Create database schema using SQLAlchemy models
|
|
- Run Alembic migrations
|
|
- Insert test data
|
|
- Query and display database content
|
|
|
|
## Setup
|
|
|
|
1. Make sure you have a PostgreSQL server running (locally or via Docker)
|
|
|
|
2. Install dependencies:
|
|
```bash
|
|
# Using uv
|
|
uv init
|
|
uv add alembic sqlalchemy-mixins psycopg2-binary requests
|
|
|
|
# Activate the virtual environment
|
|
source .venv/bin/activate
|
|
```
|
|
|
|
3. Set up environment variables (optional):
|
|
```bash
|
|
export DATABASE_URL="postgresql://postgres:password@localhost:5432/postgres"
|
|
```
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
./
|
|
├── alembic/ # Alembic migration files
|
|
│ ├── versions/ # Migration version files
|
|
│ ├── env.py # Alembic environment configuration
|
|
│ └── script.py.mako # Migration script template
|
|
├── app/ # Application package
|
|
│ ├── models/ # SQLAlchemy models
|
|
│ │ ├── __init__.py # Models package initialization
|
|
│ │ ├── user.py # User model
|
|
│ │ └── post.py # Post model
|
|
│ └── __init__.py # Application initialization
|
|
├── alembic.ini # Alembic configuration
|
|
├── db_tester.py # Database testing script
|
|
└── README.md # This file
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Test Database Connection
|
|
|
|
```bash
|
|
python db_tester.py --connection
|
|
```
|
|
|
|
### Run Alembic Migration
|
|
|
|
```bash
|
|
python db_tester.py --migration
|
|
```
|
|
|
|
### Create Database Tables
|
|
|
|
```bash
|
|
python db_tester.py --create-tables
|
|
```
|
|
|
|
### Insert Test Data
|
|
|
|
```bash
|
|
python db_tester.py --insert-data
|
|
```
|
|
|
|
### Query Test Data
|
|
|
|
```bash
|
|
python db_tester.py --query-data
|
|
```
|
|
|
|
### Run Stress Test with 100 Concurrent Connections
|
|
|
|
```bash
|
|
python db_tester.py --stress-test
|
|
```
|
|
|
|
You can also specify a custom number of threads:
|
|
|
|
```bash
|
|
python db_tester.py --stress-test --threads 200
|
|
```
|
|
|
|
Example stress test results with 200 connections:
|
|
|
|
```
|
|
📊 Stress test results:
|
|
- Total connections: 200
|
|
- Successful connections: 200
|
|
- Failed connections: 0
|
|
- Duration: 1.46 seconds
|
|
- Connections per second: 136.80
|
|
```
|
|
|
|
These results demonstrate excellent performance with the optimized PostgreSQL configuration (4 CPUs, 16GB RAM).
|
|
|
|
### Run All Tests
|
|
|
|
```bash
|
|
python db_tester.py --all
|
|
```
|
|
|
|
## Connecting to PostgreSQL Container
|
|
|
|
If you're using the PostgreSQL Docker container from the parent project, you can connect to it by setting the appropriate DATABASE_URL:
|
|
|
|
```bash
|
|
export DATABASE_URL="postgresql://postgres:password@localhost:5432/postgres"
|
|
```
|
|
|
|
Replace `password` with the actual password from your `.env` file.
|
|
|
|
## Customizing Models
|
|
|
|
You can modify the SQLAlchemy models in the `app/models/` directory to match your specific database schema requirements.
|
|
|
|
## Troubleshooting
|
|
|
|
- **Connection Issues**: Make sure your PostgreSQL server is running and accessible
|
|
- **Migration Errors**: Check the Alembic version files for any issues
|
|
- **Model Errors**: Ensure your SQLAlchemy models are correctly defined
|