# REST Tester
**A comprehensive GUI application for testing and developing REST APIs with integrated server and client functionality**
## Abstract
REST Tester is a powerful, Qt-based desktop application designed to streamline REST API development and testing workflows. It provides a unified environment where developers can simultaneously run multiple REST servers, execute automated client requests, and monitor real-time interactions through an intuitive graphical interface. The application features template-based request/response generation, multi-threaded operations, and comprehensive logging capabilities, making it an essential tool for API development, testing, and debugging.

---
## Table of Contents
1. [Key Features](#key-features)
2. [Architecture Overview](#architecture-overview)
3. [Installation](#installation)
4. [Quick Start Guide](#quick-start-guide)
5. [User Guide](#user-guide)
- [Server Management](#server-management)
- [Client Management](#client-management)
- [Configuration System](#configuration-system)
- [Monitoring and Logging](#monitoring-and-logging)
6. [Use Cases](#use-cases)
7. [Development](#development)
- [Development Setup](#development-setup)
- [Project Structure](#project-structure)
- [Contributing](#contributing)
8. [Deployment](#deployment)
9. [License](#license)
10. [Support](#support)
---
## Features
- **REST Client**: Multi-threaded HTTP client with Jinja2 template-based request generation
- **REST Server**: Flask-based mock server with dynamic endpoint registration and template responses
- **Jinja2 Templates**: Dynamic request/response generation with Python module access and request context
- **Configuration Management**: YAML-based configuration with default templates
- **Request Context**: Full access to HTTP request information in server templates
- **Logging**: Comprehensive logging for debugging and monitoring
- **GUI Interface**: PySide-based interface for test management
---
## Architecture Overview
REST Tester follows a layered architecture pattern with clear separation of concerns:
```
┌─────────────────────────────────────────────┐
│ GUI Layer │
│ ┌─────────────────┐ ┌─────────────────────┐│
│ │ Instance Tabs │ │ Configuration Panel ││
│ │ Log Viewers │ │ Status Monitors ││
│ └─────────────────┘ └─────────────────────┘│
├─────────────────────────────────────────────┤
│ Core Layer │
│ ┌─────────────────┐ ┌─────────────────────┐│
│ │ App Manager │ │ Service Facade ││
│ │ Config Locator │ │ Validation Service ││
│ └─────────────────┘ └─────────────────────┘│
├─────────────────────────────────────────────┤
│ Service Layer │
│ ┌─────────────────┐ ┌─────────────────────┐│
│ │ REST Server │ │ REST Client ││
│ │ Manager │ │ Manager ││
│ └─────────────────┘ └─────────────────────┘│
└─────────────────────────────────────────────┘
```
---
## Jinja2 Template System
REST Tester uses Jinja2 templates for dynamic request and response generation, providing powerful flexibility for testing scenarios.
### Available Template Variables
Both client and server templates have access to a rich context of Python modules and special variables:
| Variable | Type | Description | Example Usage |
|----------|------|-------------|---------------|
| `time` | Module | Python time module | `{{time.time()}}` |
| `random` | Module | Python random module | `{{random.randint(1, 100)}}` |
| `json` | Module | Python json module | `{{request.json}}` |
| `math` | Module | Python math module | `{{math.sin(counter)}}` |
| `os` | Module | Python os module | `{{os.environ.get('USER')}}` |
| `sys` | Module | Python sys module | `{{sys.platform}}` |
| `datetime` | Module | Python datetime module | `{{datetime.datetime.now()}}` |
| `counter` | Integer | Auto-incrementing counter | `{{counter}}` |
### Server-Specific Variables
Server response templates additionally have access to:
| Variable | Type | Description | Example Usage |
|----------|------|-------------|---------------|
| `request` | Object | Complete Flask request object | `{{request.method}}` |
| `request.method` | String | HTTP method | `{{request.method}}` |
| `request.path` | String | Request path | `{{request.path}}` |
| `request.headers` | Dict | HTTP headers | `{{request.headers}}` |
| `request.args` | Dict | Query parameters | `{{request.args}}` |
| `request.json` | Dict | JSON payload | `{{request.json}}` |
| `request.remote_addr` | String | Client IP address | `{{request.remote_addr}}` |
### Template Examples
**Client Request Template:**
```json
{
"timestamp": {{time.time()}},
"sequence": {{counter}},
"value": {{ 3.5 * math.fmod(counter, 17)}},
"random_id": {{random.randint(1000, 9999)}},
"created_at": "{{datetime.datetime.now().isoformat()}}",
"math_result": {{math.sqrt(counter + 1)}}
}
```
**Server Response Template:**
```json
{
"received": {{request | tojson}},
"processed_at": "{{datetime.datetime.now().isoformat()}}",
"wave_value": {{ 5 * math.sin(math.pi/20.0 * counter)}},
"counter": {{counter}},
"method": "{{request.method}}",
"path": "{{request.path}}",
"client_ip": "{{request.remote_addr}}"
}
```
**Advanced Request Context Access:**
```json
{
"request_info": {
"method": "{{request.method}}",
"url": "{{request.url}}",
"headers": {{request.headers | tojson}},
"query_params": {{request.args | tojson}},
"json_data": {{request.json | tojson}}
},
"server_response": {
"timestamp": {{time.time()}},
"random_value": {{random.random()}},
"counter": {{counter}}
}
}
```
---
## Installation
### Prerequisites
- **Python**: 3.9 or higher
- **Operating System**: Windows, macOS, or Linux
- **Memory**: Minimum 512MB RAM
- **Storage**: 100MB available space
### Option 1: Production Release (Recommended)
Install the latest stable release from PyPI:
```bash
pip install rest-tester
```
### Option 2: Development Version
For the latest development features from Test PyPI:
```bash
pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ rest-tester
```
### Option 3: Development Setup
For developers who want to contribute or customize:
```bash
# Clone the repository
git clone https://github.com/david-kracht/rest-tester.git
cd rest-tester
# Install with Poetry (recommended)
poetry install
poetry run rest-tester
# Or install with pip in development mode
pip install -e .
rest-tester
```
### Verification
Verify your installation by running:
```bash
rest-tester --version
```
---
## Quick Start Guide
### 1. Launch the Application
```bash
rest-tester
```
Or run directly with Python:
```bash
python -m rest_tester.main
```
### 2. Create Your First Server
1. Navigate to the **Server** tab
2. Click the **"+"** button to add a new server instance
3. Configure the server settings:
- **Host**: `localhost:5000`
- **Route**: `/api/hello`
- **Methods**: Select `GET` and `POST`
- **Response Template**:
```json
{
"message": "Hello from REST Tester!",
"timestamp": "{{ time.time() }}",
"method": "{{ request.method }}"
}
```
4. Click **Start** to launch the server
### 3. Create a Client to Test Your Server
1. Navigate to the **Client** tab
2. Click the **"+"** button to add a new client instance
3. Configure the client settings:
- **Host**: `localhost:5000`
- **Route**: `/api/hello`
- **Method**: `GET`
- **Loop**: Enable for continuous testing
- **Period**: `2.0` seconds
4. Click **Start** to begin sending requests
### 4. Monitor the Interaction
- Check the **Log** tabs for both server and client to see real-time communication
- Observe color-coded log entries indicating request/response flow
- Modify templates while running to see immediate effects
---
## User Guide
### Server Management
#### Creating and Configuring Servers
**Basic Server Setup:**
1. Click the **"+"** tab in the Server section
2. Configure the following parameters:
| Parameter | Description | Example |
|-----------|-------------|---------|
| **Name** | Unique identifier for the server | `ProductAPI` |
| **Host** | Address and port binding | `localhost:8080` |
| **Route** | Endpoint path pattern | `/api/v1/products` |
| **Methods** | Supported HTTP methods | `GET`, `POST`, `PUT`, `DELETE` |
| **Autostart** | Start server automatically on app launch | ✓ |
| **Initial Delay** | Delay before server startup (seconds) | `0.5` |
| **Response Delay** | Artificial delay before sending responses | `0.1` |
**Advanced Response Templates:**
REST Tester uses Jinja2 templating for dynamic responses. Available variables include all Python standard modules and special context:
**Template Context Variables:**
- `time` - Python time module
- `random` - Python random module
- `json` - Python json module
- `math` - Python math module
- `os` - Python os module
- `sys` - Python sys module
- `datetime` - Python datetime module
- `counter` - Auto-incrementing counter for sequential operations
- `request` - Complete Flask request object (servers only)
**Example: Dynamic Product API Response**
```json
{
"status": "success",
"timestamp": {{time.time()}},
"method": "{{request.method}}",
"data": {
"products": [
{
"id": 1,
"name": "Sample Product",
"created_at": "{{datetime.datetime.now().isoformat()}}"
}
]
},
"wave_value": {{ 5 * math.sin(math.pi/20.0 * counter)}},
"request_info": {{request | tojson}},
"counter": {{counter}}
}
```
#### Server Operations
- **Start/Stop**: Use the control buttons to manage server lifecycle
- **Real-time Updates**: Modify response templates while the server is running
- **Status Monitoring**: Green indicator shows active servers
- **Log Monitoring**: View incoming requests and outgoing responses
### Client Management
#### Creating and Configuring Clients
**Basic Client Setup:**
1. Click the **"+"** tab in the Client section
2. Configure the following parameters:
| Parameter | Description | Example |
|-----------|-------------|---------|
| **Name** | Unique identifier for the client | `LoadTester` |
| **Host** | Target server address | `localhost:8080` |
| **Route** | Endpoint to request | `/api/v1/products` |
| **Method** | HTTP method to use | `POST` |
| **Autostart** | Start client automatically on app launch | ✓ |
| **Loop** | Send requests continuously | ✓ |
| **Initial Delay** | Delay before first request (seconds) | `1.0` |
| **Period** | Interval between requests (seconds) | `2.0` |
**Request Templates:**
Clients support Jinja2 templates for dynamic request generation with access to Python modules:
**Template Context Variables:**
- `time` - Python time module
- `random` - Python random module
- `json` - Python json module
- `math` - Python math module
- `os` - Python os module
- `sys` - Python sys module
- `datetime` - Python datetime module
- `counter` - Auto-incrementing counter for sequential operations
**Example: Dynamic Request Body**
```json
{
"timestamp": {{time.time()}},
"sequence": {{counter}},
"value": {{ 3.5 * math.fmod(counter, 17)}},
"random_id": {{random.randint(1000, 9999)}},
"data": {
"action": "test_request",
"created_at": "{{datetime.datetime.now().isoformat()}}",
"math_result": {{math.sqrt(counter)}}
}
}
```
#### Client Operations
- **Start/Stop**: Control client request generation
- **Loop Mode**: Enable for continuous testing scenarios
- **One-shot Mode**: Send single requests for debugging
- **Parameter Updates**: Modify settings while client is running
- **Response Monitoring**: View all responses in real-time
### Configuration System
#### Default Values
Set up default configurations to speed up instance creation:
**Server Defaults:**
```yaml
defaults:
server:
host: "localhost:5000"
autostart: false
initial_delay_sec: 0.5
response_delay_sec: 0.0
route: "/api/endpoint"
methodes: ["GET", "POST"]
response: |
{
"status": "ok",
"timestamp": "{{ timestamp }}"
}
```
**Client Defaults:**
```yaml
defaults:
client:
host: "localhost:5000"
autostart: false
loop: false
initial_delay_sec: 1.0
period_sec: 2.0
route: "/api/endpoint"
methode: "GET"
request: |
{
"client": "{{ client_name }}",
"time": "{{ timestamp }}"
}
```
#### Configuration File Location
Configuration is automatically saved to:
- **Windows**: `%APPDATA%/rest-tester/config.yaml`
- **macOS**: `~/Library/Application Support/rest-tester/config.yaml`
- **Linux**: `~/.config/rest-tester/config.yaml`
### Monitoring and Logging
#### Log Viewer Features
- **Color-coded Levels**:
- 🔴 **ERROR**: Critical issues requiring attention
- 🟠 **WARNING**: Important notices
- ⚪ **INFO**: General information
- 🔘 **DEBUG**: Detailed debugging information
- **Formatting Options**:
- Adjustable font sizes (6pt - 18pt)
- Monospace font for consistent alignment
- JSON pretty-printing for structured data
- Multi-line message support
- **Management Options**:
- Clear logs for fresh start
- Auto-scroll to latest entries
- Search and filter capabilities
- Export logs to file
---
## Use Cases
### 1. API Development and Testing
**Scenario**: Developing a REST API and need to test client interactions
**Setup**:
1. Create a server instance mimicking your API
2. Configure realistic response templates
3. Create multiple client instances with different request patterns
4. Monitor request/response cycles to identify issues
**Benefits**:
- Test API behavior before implementation
- Validate client error handling
- Performance testing with configurable delays
- Mock different API states and responses
### 2. Load Testing and Performance Analysis
**Scenario**: Evaluating API performance under various load conditions
**Setup**:
1. Deploy your API server
2. Create multiple client instances with loop mode enabled
3. Configure different request intervals and patterns
4. Monitor response times and error rates
**Example Configuration**:
```yaml
# Light load client
client_light:
period_sec: 5.0
loop: true
# Heavy load client
client_heavy:
period_sec: 0.1
loop: true
```
### 3. Integration Testing
**Scenario**: Testing interactions between multiple microservices
**Setup**:
1. Create server instances for each microservice mock
2. Configure cross-service request templates
3. Set up client instances to simulate service-to-service communication
4. Monitor the complete request flow
### 4. API Mocking for Frontend Development
**Scenario**: Frontend development when backend APIs are not ready
**Setup**:
1. Create server instances matching API specifications
2. Configure realistic response data and timing
3. Implement various response scenarios (success, error, timeout)
4. Provide stable endpoints for frontend development
### 5. Debugging and Troubleshooting
**Scenario**: Investigating API communication issues
**Setup**:
1. Recreate problematic scenarios with server/client pairs
2. Add detailed logging and response delays
3. Monitor exact request/response payloads
4. Isolate and reproduce specific issues
### 6. Training and Education
**Scenario**: Teaching REST API concepts and debugging techniques
**Setup**:
1. Create examples demonstrating REST principles
2. Show real-time request/response interaction
3. Demonstrate error handling and retry logic
4. Provide hands-on experience with API testing tools
---
## Development
### Development Setup
#### Prerequisites for Development
```bash
# Required tools
git
python >= 3.9
poetry (recommended) or pip
# Optional but recommended
vscode or pycharm
git-flow
```
#### Setting Up Development Environment
1. **Clone and Setup**:
```bash
git clone https://github.com/david-kracht/rest-tester.git
cd rest-tester
# Install development dependencies
poetry install --with dev
# Activate virtual environment
poetry shell
```
2. **Run in Development Mode**:
```bash
# With Poetry
poetry run python -m rest_tester.main
# Or directly
python -m rest_tester.main
```
### Project Structure
```
rest-tester/
├── src/rest_tester/ # Main application package
│ ├── core/ # Core application logic
│ │ ├── application_manager.py
│ │ ├── service_facade.py
│ │ ├── config_locator.py
│ │ └── validation_service.py
│ ├── service/ # Business logic layer
│ │ ├── rest_server_manager.py
│ │ ├── rest_client_manager.py
│ │ ├── endpoint_utils.py
│ │ └── logging_config.py
│ ├── gui_model/ # GUI components and models
│ │ ├── instances_gui.py
│ │ ├── model.py
│ │ ├── log_widget.py
│ │ ├── client_instance_gui.py
│ │ ├── server_instance_gui.py
│ │ ├── defaults_widget.py
│ │ └── validate.py
│ ├── resources/ # Static resources
│ │ └── config.yaml
│ └── main.py # Application entry point
├── scripts/ # Build and deployment scripts
│ └── build-local.sh
├── pyproject.toml # Project configuration
├── poetry.lock # Dependencies lock file
├── DEPLOYMENT.md # Deployment instructions
├── README.md # This file
└── LICENSE # MIT License
```
#### Key Components
| Component | Responsibility | Key Files |
|-----------|---------------|-----------|
| **Core** | Application lifecycle, configuration management | `application_manager.py`, `service_facade.py` |
| **Service** | REST operations, threading, logging | `rest_server_manager.py`, `rest_client_manager.py` |
| **GUI** | User interface, models, widgets | `instances_gui.py`, `model.py`, `log_widget.py` |
### Contributing
#### Development Workflow
1. **Fork and Branch**:
```bash
git fork https://github.com/david-kracht/rest-tester.git
git checkout -b feature/amazing-feature
```
2. **Development Guidelines**:
- Follow PEP 8 style guidelines
- Add type hints to all functions
- Write comprehensive docstrings
- Update documentation as needed
3. **Code Quality** (Future Enhancement):
```bash
# Will be available in future releases:
# poetry run flake8 src/ # Linting
# poetry run mypy src/ # Type checking
# poetry run black src/ # Formatting
# poetry run isort src/ # Import sorting
```
4. **Commit and Pull Request**:
```bash
git add .
git commit -m "feat: add amazing feature"
git push origin feature/amazing-feature
```
#### Coding Standards
- **Type Hints**: All public functions must include type hints
- **Docstrings**: Use Google-style docstrings for all modules, classes, and functions
- **Error Handling**: Implement comprehensive error handling with appropriate logging
- **Documentation**: Update relevant documentation for all changes
#### Architecture Guidelines
- **Separation of Concerns**: Keep GUI, business logic, and data layers separate
- **Dependency Injection**: Use dependency injection for testability
- **Signal/Slot Pattern**: Use Qt signals for loose coupling between components
- **Factory Pattern**: Use factories for consistent object creation
- **Configuration Driven**: Make behavior configurable rather than hard-coded
---
## Deployment
### Automated Deployment Pipeline
The project uses GitHub Actions for automated deployment to PyPI:
#### Release Process
1. **Development Builds**:
- Triggered on every push to any branch
- Creates unique development versions: `{version}.dev{timestamp}+{commit_hash}`
- Deployed to Test PyPI: https://test.pypi.org/project/rest-tester/
2. **Production Releases**:
- Triggered when creating a GitHub release/tag
- Uses semantic versioning (e.g., `v1.0.0` → `1.0.0`)
- Deployed to Production PyPI: https://pypi.org/project/rest-tester/
#### Creating a Release
**Via GitHub UI**:
1. Go to Releases → Create a new release
2. Tag: `v1.0.0` (semantic versioning)
3. Title: `Version 1.0.0`
4. Description: Add release notes
**Via Command Line**:
```bash
git tag v1.0.0
git push origin v1.0.0
# Then create release from tag on GitHub
```
#### Manual Deployment
For manual deployment or testing:
```bash
# Build package
poetry build
# Upload to Test PyPI
poetry publish -r testpypi
# Upload to Production PyPI
poetry publish
```
---
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
### MIT License Summary
- ✅ **Commercial Use**: You can use this software commercially
- ✅ **Modification**: You can modify the source code
- ✅ **Distribution**: You can distribute the software
- ✅ **Private Use**: You can use the software privately
- ❌ **Liability**: Authors are not liable for damages
- ❌ **Warranty**: No warranty is provided
---
## Support
### Getting Help
- **Documentation**: This README and inline code documentation
- **Issues**: [GitHub Issues](https://github.com/david-kracht/rest-tester/issues)
- **Discussions**: [GitHub Discussions](https://github.com/david-kracht/rest-tester/discussions)
### Reporting Issues
When reporting issues, please include:
1. **Environment Information**:
- Operating System and version
- Python version
- REST Tester version (`rest-tester --version`)
2. **Steps to Reproduce**:
- Detailed steps to reproduce the issue
- Expected vs actual behavior
- Screenshots if applicable
3. **Configuration**:
- Relevant configuration settings
- Log output (with sensitive data removed)
### Feature Requests
We welcome feature requests! Please use GitHub Issues with the "enhancement" label and include:
- Clear description of the proposed feature
- Use case and benefits
- Possible implementation approach
- Willingness to contribute to implementation
---
## Future Work / Improvements
The following features and improvements are planned for future releases:
### Testing Infrastructure
- **Unit Test Suite**: Comprehensive test coverage with pytest
- **Integration Tests**: End-to-end testing of client-server interactions
- **GUI Testing**: Automated UI testing framework
- **Performance Tests**: Load testing and benchmarking tools
### Documentation
- **API Documentation**: Detailed API reference documentation
- **User Manual**: Step-by-step tutorials and guides
- **Developer Documentation**: Architecture and contribution guides
- **Video Tutorials**: Interactive learning materials
### Code Quality Tools
- **Linting**: Integration with flake8, mypy for code quality
- **Formatting**: Automated code formatting with black and isort
- **Pre-commit Hooks**: Automated quality checks before commits
- **Coverage Reports**: Test coverage tracking and reporting
### Enhanced Features
- **Plugin System**: Extensible architecture for custom functionality
- **Configuration Validation**: Schema-based YAML validation
- **Import/Export**: Configuration sharing and backup capabilities
- **Performance Monitoring**: Request timing and performance metrics
- **Visual Status Indicators**: Real-time status monitoring with color-coded indicators
---
**REST Tester** - *Making REST API development and testing effortless*
Copyright (c) 2025 David Kracht - Licensed under MIT License
Raw data
{
"_id": null,
"home_page": "https://github.com/david-kracht/rest-tester",
"name": "rest-tester",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.14,>=3.9",
"maintainer_email": null,
"keywords": "rest, api, testing, server, client",
"author": "David Kracht",
"author_email": "david.kracht@mail.de",
"download_url": "https://files.pythonhosted.org/packages/d8/00/c6bc087c7faea215e733fb49966a30f26f40740d10e04f75b33707b4ea13/rest_tester-1.0.0.tar.gz",
"platform": null,
"description": "# REST Tester\n\n**A comprehensive GUI application for testing and developing REST APIs with integrated server and client functionality**\n\n## Abstract\n\nREST Tester is a powerful, Qt-based desktop application designed to streamline REST API development and testing workflows. It provides a unified environment where developers can simultaneously run multiple REST servers, execute automated client requests, and monitor real-time interactions through an intuitive graphical interface. The application features template-based request/response generation, multi-threaded operations, and comprehensive logging capabilities, making it an essential tool for API development, testing, and debugging.\n\n\n\n---\n\n## Table of Contents\n\n1. [Key Features](#key-features)\n2. [Architecture Overview](#architecture-overview)\n3. [Installation](#installation)\n4. [Quick Start Guide](#quick-start-guide)\n5. [User Guide](#user-guide)\n - [Server Management](#server-management)\n - [Client Management](#client-management)\n - [Configuration System](#configuration-system)\n - [Monitoring and Logging](#monitoring-and-logging)\n6. [Use Cases](#use-cases)\n7. [Development](#development)\n - [Development Setup](#development-setup)\n - [Project Structure](#project-structure)\n - [Contributing](#contributing)\n8. [Deployment](#deployment)\n9. [License](#license)\n10. [Support](#support)\n\n---\n\n## Features\n\n- **REST Client**: Multi-threaded HTTP client with Jinja2 template-based request generation\n- **REST Server**: Flask-based mock server with dynamic endpoint registration and template responses\n- **Jinja2 Templates**: Dynamic request/response generation with Python module access and request context\n- **Configuration Management**: YAML-based configuration with default templates\n- **Request Context**: Full access to HTTP request information in server templates\n- **Logging**: Comprehensive logging for debugging and monitoring\n- **GUI Interface**: PySide-based interface for test management\n\n---\n\n## Architecture Overview\n\nREST Tester follows a layered architecture pattern with clear separation of concerns:\n\n```\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 GUI Layer \u2502\n\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502\n\u2502 \u2502 Instance Tabs \u2502 \u2502 Configuration Panel \u2502\u2502\n\u2502 \u2502 Log Viewers \u2502 \u2502 Status Monitors \u2502\u2502\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Core Layer \u2502\n\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502\n\u2502 \u2502 App Manager \u2502 \u2502 Service Facade \u2502\u2502\n\u2502 \u2502 Config Locator \u2502 \u2502 Validation Service \u2502\u2502\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Service Layer \u2502\n\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502\n\u2502 \u2502 REST Server \u2502 \u2502 REST Client \u2502\u2502\n\u2502 \u2502 Manager \u2502 \u2502 Manager \u2502\u2502\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n---\n\n## Jinja2 Template System\n\nREST Tester uses Jinja2 templates for dynamic request and response generation, providing powerful flexibility for testing scenarios.\n\n### Available Template Variables\n\nBoth client and server templates have access to a rich context of Python modules and special variables:\n\n| Variable | Type | Description | Example Usage |\n|----------|------|-------------|---------------|\n| `time` | Module | Python time module | `{{time.time()}}` |\n| `random` | Module | Python random module | `{{random.randint(1, 100)}}` |\n| `json` | Module | Python json module | `{{request.json}}` |\n| `math` | Module | Python math module | `{{math.sin(counter)}}` |\n| `os` | Module | Python os module | `{{os.environ.get('USER')}}` |\n| `sys` | Module | Python sys module | `{{sys.platform}}` |\n| `datetime` | Module | Python datetime module | `{{datetime.datetime.now()}}` |\n| `counter` | Integer | Auto-incrementing counter | `{{counter}}` |\n\n### Server-Specific Variables\n\nServer response templates additionally have access to:\n\n| Variable | Type | Description | Example Usage |\n|----------|------|-------------|---------------|\n| `request` | Object | Complete Flask request object | `{{request.method}}` |\n| `request.method` | String | HTTP method | `{{request.method}}` |\n| `request.path` | String | Request path | `{{request.path}}` |\n| `request.headers` | Dict | HTTP headers | `{{request.headers}}` |\n| `request.args` | Dict | Query parameters | `{{request.args}}` |\n| `request.json` | Dict | JSON payload | `{{request.json}}` |\n| `request.remote_addr` | String | Client IP address | `{{request.remote_addr}}` |\n\n### Template Examples\n\n**Client Request Template:**\n```json\n{\n \"timestamp\": {{time.time()}},\n \"sequence\": {{counter}},\n \"value\": {{ 3.5 * math.fmod(counter, 17)}},\n \"random_id\": {{random.randint(1000, 9999)}},\n \"created_at\": \"{{datetime.datetime.now().isoformat()}}\",\n \"math_result\": {{math.sqrt(counter + 1)}}\n}\n```\n\n**Server Response Template:**\n```json\n{\n \"received\": {{request | tojson}},\n \"processed_at\": \"{{datetime.datetime.now().isoformat()}}\",\n \"wave_value\": {{ 5 * math.sin(math.pi/20.0 * counter)}},\n \"counter\": {{counter}},\n \"method\": \"{{request.method}}\",\n \"path\": \"{{request.path}}\",\n \"client_ip\": \"{{request.remote_addr}}\"\n}\n```\n\n**Advanced Request Context Access:**\n```json\n{\n \"request_info\": {\n \"method\": \"{{request.method}}\",\n \"url\": \"{{request.url}}\",\n \"headers\": {{request.headers | tojson}},\n \"query_params\": {{request.args | tojson}},\n \"json_data\": {{request.json | tojson}}\n },\n \"server_response\": {\n \"timestamp\": {{time.time()}},\n \"random_value\": {{random.random()}},\n \"counter\": {{counter}}\n }\n}\n```\n\n---\n\n## Installation\n\n### Prerequisites\n\n- **Python**: 3.9 or higher\n- **Operating System**: Windows, macOS, or Linux\n- **Memory**: Minimum 512MB RAM\n- **Storage**: 100MB available space\n\n### Option 1: Production Release (Recommended)\n\nInstall the latest stable release from PyPI:\n\n```bash\npip install rest-tester\n```\n\n### Option 2: Development Version\n\nFor the latest development features from Test PyPI:\n\n```bash\npip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ rest-tester\n```\n\n### Option 3: Development Setup\n\nFor developers who want to contribute or customize:\n\n```bash\n# Clone the repository\ngit clone https://github.com/david-kracht/rest-tester.git\ncd rest-tester\n\n# Install with Poetry (recommended)\npoetry install\npoetry run rest-tester\n\n# Or install with pip in development mode\npip install -e .\nrest-tester\n```\n\n### Verification\n\nVerify your installation by running:\n\n```bash\nrest-tester --version\n```\n\n---\n\n## Quick Start Guide\n\n### 1. Launch the Application\n\n```bash\nrest-tester\n```\n\nOr run directly with Python:\n\n```bash\npython -m rest_tester.main\n```\n\n### 2. Create Your First Server\n\n1. Navigate to the **Server** tab\n2. Click the **\"+\"** button to add a new server instance\n3. Configure the server settings:\n - **Host**: `localhost:5000`\n - **Route**: `/api/hello`\n - **Methods**: Select `GET` and `POST`\n - **Response Template**:\n ```json\n {\n \"message\": \"Hello from REST Tester!\",\n \"timestamp\": \"{{ time.time() }}\",\n \"method\": \"{{ request.method }}\"\n }\n ```\n4. Click **Start** to launch the server\n\n### 3. Create a Client to Test Your Server\n\n1. Navigate to the **Client** tab\n2. Click the **\"+\"** button to add a new client instance\n3. Configure the client settings:\n - **Host**: `localhost:5000`\n - **Route**: `/api/hello`\n - **Method**: `GET`\n - **Loop**: Enable for continuous testing\n - **Period**: `2.0` seconds\n4. Click **Start** to begin sending requests\n\n### 4. Monitor the Interaction\n\n- Check the **Log** tabs for both server and client to see real-time communication\n- Observe color-coded log entries indicating request/response flow\n- Modify templates while running to see immediate effects\n\n---\n\n## User Guide\n\n### Server Management\n\n#### Creating and Configuring Servers\n\n**Basic Server Setup:**\n1. Click the **\"+\"** tab in the Server section\n2. Configure the following parameters:\n\n| Parameter | Description | Example |\n|-----------|-------------|---------|\n| **Name** | Unique identifier for the server | `ProductAPI` |\n| **Host** | Address and port binding | `localhost:8080` |\n| **Route** | Endpoint path pattern | `/api/v1/products` |\n| **Methods** | Supported HTTP methods | `GET`, `POST`, `PUT`, `DELETE` |\n| **Autostart** | Start server automatically on app launch | \u2713 |\n| **Initial Delay** | Delay before server startup (seconds) | `0.5` |\n| **Response Delay** | Artificial delay before sending responses | `0.1` |\n\n**Advanced Response Templates:**\n\nREST Tester uses Jinja2 templating for dynamic responses. Available variables include all Python standard modules and special context:\n\n**Template Context Variables:**\n- `time` - Python time module\n- `random` - Python random module \n- `json` - Python json module\n- `math` - Python math module\n- `os` - Python os module\n- `sys` - Python sys module\n- `datetime` - Python datetime module\n- `counter` - Auto-incrementing counter for sequential operations\n- `request` - Complete Flask request object (servers only)\n\n**Example: Dynamic Product API Response**\n```json\n{\n \"status\": \"success\",\n \"timestamp\": {{time.time()}},\n \"method\": \"{{request.method}}\",\n \"data\": {\n \"products\": [\n {\n \"id\": 1,\n \"name\": \"Sample Product\",\n \"created_at\": \"{{datetime.datetime.now().isoformat()}}\"\n }\n ]\n },\n \"wave_value\": {{ 5 * math.sin(math.pi/20.0 * counter)}},\n \"request_info\": {{request | tojson}},\n \"counter\": {{counter}}\n}\n```\n\n#### Server Operations\n\n- **Start/Stop**: Use the control buttons to manage server lifecycle\n- **Real-time Updates**: Modify response templates while the server is running\n- **Status Monitoring**: Green indicator shows active servers\n- **Log Monitoring**: View incoming requests and outgoing responses\n\n### Client Management\n\n#### Creating and Configuring Clients\n\n**Basic Client Setup:**\n1. Click the **\"+\"** tab in the Client section\n2. Configure the following parameters:\n\n| Parameter | Description | Example |\n|-----------|-------------|---------|\n| **Name** | Unique identifier for the client | `LoadTester` |\n| **Host** | Target server address | `localhost:8080` |\n| **Route** | Endpoint to request | `/api/v1/products` |\n| **Method** | HTTP method to use | `POST` |\n| **Autostart** | Start client automatically on app launch | \u2713 |\n| **Loop** | Send requests continuously | \u2713 |\n| **Initial Delay** | Delay before first request (seconds) | `1.0` |\n| **Period** | Interval between requests (seconds) | `2.0` |\n\n**Request Templates:**\n\nClients support Jinja2 templates for dynamic request generation with access to Python modules:\n\n**Template Context Variables:**\n- `time` - Python time module\n- `random` - Python random module \n- `json` - Python json module\n- `math` - Python math module\n- `os` - Python os module\n- `sys` - Python sys module\n- `datetime` - Python datetime module\n- `counter` - Auto-incrementing counter for sequential operations\n\n**Example: Dynamic Request Body**\n```json\n{\n \"timestamp\": {{time.time()}},\n \"sequence\": {{counter}},\n \"value\": {{ 3.5 * math.fmod(counter, 17)}},\n \"random_id\": {{random.randint(1000, 9999)}},\n \"data\": {\n \"action\": \"test_request\",\n \"created_at\": \"{{datetime.datetime.now().isoformat()}}\",\n \"math_result\": {{math.sqrt(counter)}}\n }\n}\n```\n\n#### Client Operations\n\n- **Start/Stop**: Control client request generation\n- **Loop Mode**: Enable for continuous testing scenarios\n- **One-shot Mode**: Send single requests for debugging\n- **Parameter Updates**: Modify settings while client is running\n- **Response Monitoring**: View all responses in real-time\n\n### Configuration System\n\n#### Default Values\n\nSet up default configurations to speed up instance creation:\n\n**Server Defaults:**\n```yaml\ndefaults:\n server:\n host: \"localhost:5000\"\n autostart: false\n initial_delay_sec: 0.5\n response_delay_sec: 0.0\n route: \"/api/endpoint\"\n methodes: [\"GET\", \"POST\"]\n response: |\n {\n \"status\": \"ok\",\n \"timestamp\": \"{{ timestamp }}\"\n }\n```\n\n**Client Defaults:**\n```yaml\ndefaults:\n client:\n host: \"localhost:5000\"\n autostart: false\n loop: false\n initial_delay_sec: 1.0\n period_sec: 2.0\n route: \"/api/endpoint\"\n methode: \"GET\"\n request: |\n {\n \"client\": \"{{ client_name }}\",\n \"time\": \"{{ timestamp }}\"\n }\n```\n\n#### Configuration File Location\n\nConfiguration is automatically saved to:\n- **Windows**: `%APPDATA%/rest-tester/config.yaml`\n- **macOS**: `~/Library/Application Support/rest-tester/config.yaml`\n- **Linux**: `~/.config/rest-tester/config.yaml`\n\n### Monitoring and Logging\n\n#### Log Viewer Features\n\n- **Color-coded Levels**: \n - \ud83d\udd34 **ERROR**: Critical issues requiring attention\n - \ud83d\udfe0 **WARNING**: Important notices\n - \u26aa **INFO**: General information\n - \ud83d\udd18 **DEBUG**: Detailed debugging information\n\n- **Formatting Options**:\n - Adjustable font sizes (6pt - 18pt)\n - Monospace font for consistent alignment\n - JSON pretty-printing for structured data\n - Multi-line message support\n\n- **Management Options**:\n - Clear logs for fresh start\n - Auto-scroll to latest entries\n - Search and filter capabilities\n - Export logs to file\n\n---\n\n## Use Cases\n\n### 1. API Development and Testing\n\n**Scenario**: Developing a REST API and need to test client interactions\n\n**Setup**:\n1. Create a server instance mimicking your API\n2. Configure realistic response templates\n3. Create multiple client instances with different request patterns\n4. Monitor request/response cycles to identify issues\n\n**Benefits**:\n- Test API behavior before implementation\n- Validate client error handling\n- Performance testing with configurable delays\n- Mock different API states and responses\n\n### 2. Load Testing and Performance Analysis\n\n**Scenario**: Evaluating API performance under various load conditions\n\n**Setup**:\n1. Deploy your API server\n2. Create multiple client instances with loop mode enabled\n3. Configure different request intervals and patterns\n4. Monitor response times and error rates\n\n**Example Configuration**:\n```yaml\n# Light load client\nclient_light:\n period_sec: 5.0\n loop: true\n\n# Heavy load client \nclient_heavy:\n period_sec: 0.1\n loop: true\n```\n\n### 3. Integration Testing\n\n**Scenario**: Testing interactions between multiple microservices\n\n**Setup**:\n1. Create server instances for each microservice mock\n2. Configure cross-service request templates\n3. Set up client instances to simulate service-to-service communication\n4. Monitor the complete request flow\n\n### 4. API Mocking for Frontend Development\n\n**Scenario**: Frontend development when backend APIs are not ready\n\n**Setup**:\n1. Create server instances matching API specifications\n2. Configure realistic response data and timing\n3. Implement various response scenarios (success, error, timeout)\n4. Provide stable endpoints for frontend development\n\n### 5. Debugging and Troubleshooting\n\n**Scenario**: Investigating API communication issues\n\n**Setup**:\n1. Recreate problematic scenarios with server/client pairs\n2. Add detailed logging and response delays\n3. Monitor exact request/response payloads\n4. Isolate and reproduce specific issues\n\n### 6. Training and Education\n\n**Scenario**: Teaching REST API concepts and debugging techniques\n\n**Setup**:\n1. Create examples demonstrating REST principles\n2. Show real-time request/response interaction\n3. Demonstrate error handling and retry logic\n4. Provide hands-on experience with API testing tools\n\n---\n\n## Development\n\n### Development Setup\n\n#### Prerequisites for Development\n\n```bash\n# Required tools\ngit\npython >= 3.9\npoetry (recommended) or pip\n\n# Optional but recommended\nvscode or pycharm\ngit-flow\n```\n\n#### Setting Up Development Environment\n\n1. **Clone and Setup**:\n```bash\ngit clone https://github.com/david-kracht/rest-tester.git\ncd rest-tester\n\n# Install development dependencies\npoetry install --with dev\n\n# Activate virtual environment\npoetry shell\n```\n\n2. **Run in Development Mode**:\n```bash\n# With Poetry\npoetry run python -m rest_tester.main\n\n# Or directly\npython -m rest_tester.main\n```\n\n### Project Structure\n\n```\nrest-tester/\n\u251c\u2500\u2500 src/rest_tester/ # Main application package\n\u2502 \u251c\u2500\u2500 core/ # Core application logic\n\u2502 \u2502 \u251c\u2500\u2500 application_manager.py\n\u2502 \u2502 \u251c\u2500\u2500 service_facade.py\n\u2502 \u2502 \u251c\u2500\u2500 config_locator.py\n\u2502 \u2502 \u2514\u2500\u2500 validation_service.py\n\u2502 \u251c\u2500\u2500 service/ # Business logic layer\n\u2502 \u2502 \u251c\u2500\u2500 rest_server_manager.py\n\u2502 \u2502 \u251c\u2500\u2500 rest_client_manager.py\n\u2502 \u2502 \u251c\u2500\u2500 endpoint_utils.py\n\u2502 \u2502 \u2514\u2500\u2500 logging_config.py\n\u2502 \u251c\u2500\u2500 gui_model/ # GUI components and models\n\u2502 \u2502 \u251c\u2500\u2500 instances_gui.py\n\u2502 \u2502 \u251c\u2500\u2500 model.py\n\u2502 \u2502 \u251c\u2500\u2500 log_widget.py\n\u2502 \u2502 \u251c\u2500\u2500 client_instance_gui.py\n\u2502 \u2502 \u251c\u2500\u2500 server_instance_gui.py\n\u2502 \u2502 \u251c\u2500\u2500 defaults_widget.py\n\u2502 \u2502 \u2514\u2500\u2500 validate.py\n\u2502 \u251c\u2500\u2500 resources/ # Static resources\n\u2502 \u2502 \u2514\u2500\u2500 config.yaml\n\u2502 \u2514\u2500\u2500 main.py # Application entry point\n\u251c\u2500\u2500 scripts/ # Build and deployment scripts\n\u2502 \u2514\u2500\u2500 build-local.sh\n\u251c\u2500\u2500 pyproject.toml # Project configuration\n\u251c\u2500\u2500 poetry.lock # Dependencies lock file\n\u251c\u2500\u2500 DEPLOYMENT.md # Deployment instructions\n\u251c\u2500\u2500 README.md # This file\n\u2514\u2500\u2500 LICENSE # MIT License\n```\n\n#### Key Components\n\n| Component | Responsibility | Key Files |\n|-----------|---------------|-----------|\n| **Core** | Application lifecycle, configuration management | `application_manager.py`, `service_facade.py` |\n| **Service** | REST operations, threading, logging | `rest_server_manager.py`, `rest_client_manager.py` |\n| **GUI** | User interface, models, widgets | `instances_gui.py`, `model.py`, `log_widget.py` |\n\n### Contributing\n\n#### Development Workflow\n\n1. **Fork and Branch**:\n```bash\ngit fork https://github.com/david-kracht/rest-tester.git\ngit checkout -b feature/amazing-feature\n```\n\n2. **Development Guidelines**:\n- Follow PEP 8 style guidelines\n- Add type hints to all functions\n- Write comprehensive docstrings\n- Update documentation as needed\n\n3. **Code Quality** (Future Enhancement):\n```bash\n# Will be available in future releases:\n# poetry run flake8 src/ # Linting\n# poetry run mypy src/ # Type checking\n# poetry run black src/ # Formatting\n# poetry run isort src/ # Import sorting\n```\n\n4. **Commit and Pull Request**:\n```bash\ngit add .\ngit commit -m \"feat: add amazing feature\"\ngit push origin feature/amazing-feature\n```\n\n#### Coding Standards\n\n- **Type Hints**: All public functions must include type hints\n- **Docstrings**: Use Google-style docstrings for all modules, classes, and functions\n- **Error Handling**: Implement comprehensive error handling with appropriate logging\n- **Documentation**: Update relevant documentation for all changes\n\n#### Architecture Guidelines\n\n- **Separation of Concerns**: Keep GUI, business logic, and data layers separate\n- **Dependency Injection**: Use dependency injection for testability\n- **Signal/Slot Pattern**: Use Qt signals for loose coupling between components\n- **Factory Pattern**: Use factories for consistent object creation\n- **Configuration Driven**: Make behavior configurable rather than hard-coded\n\n---\n\n## Deployment\n\n### Automated Deployment Pipeline\n\nThe project uses GitHub Actions for automated deployment to PyPI:\n\n#### Release Process\n\n1. **Development Builds**: \n - Triggered on every push to any branch\n - Creates unique development versions: `{version}.dev{timestamp}+{commit_hash}`\n - Deployed to Test PyPI: https://test.pypi.org/project/rest-tester/\n\n2. **Production Releases**:\n - Triggered when creating a GitHub release/tag\n - Uses semantic versioning (e.g., `v1.0.0` \u2192 `1.0.0`)\n - Deployed to Production PyPI: https://pypi.org/project/rest-tester/\n\n#### Creating a Release\n\n**Via GitHub UI**:\n1. Go to Releases \u2192 Create a new release\n2. Tag: `v1.0.0` (semantic versioning)\n3. Title: `Version 1.0.0`\n4. Description: Add release notes\n\n**Via Command Line**:\n```bash\ngit tag v1.0.0\ngit push origin v1.0.0\n# Then create release from tag on GitHub\n```\n\n#### Manual Deployment\n\nFor manual deployment or testing:\n\n```bash\n# Build package\npoetry build\n\n# Upload to Test PyPI\npoetry publish -r testpypi\n\n# Upload to Production PyPI\npoetry publish\n```\n\n---\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n### MIT License Summary\n\n- \u2705 **Commercial Use**: You can use this software commercially\n- \u2705 **Modification**: You can modify the source code\n- \u2705 **Distribution**: You can distribute the software\n- \u2705 **Private Use**: You can use the software privately\n- \u274c **Liability**: Authors are not liable for damages\n- \u274c **Warranty**: No warranty is provided\n\n---\n\n## Support\n\n### Getting Help\n\n- **Documentation**: This README and inline code documentation\n- **Issues**: [GitHub Issues](https://github.com/david-kracht/rest-tester/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/david-kracht/rest-tester/discussions)\n\n### Reporting Issues\n\nWhen reporting issues, please include:\n\n1. **Environment Information**:\n - Operating System and version\n - Python version\n - REST Tester version (`rest-tester --version`)\n\n2. **Steps to Reproduce**:\n - Detailed steps to reproduce the issue\n - Expected vs actual behavior\n - Screenshots if applicable\n\n3. **Configuration**:\n - Relevant configuration settings\n - Log output (with sensitive data removed)\n\n### Feature Requests\n\nWe welcome feature requests! Please use GitHub Issues with the \"enhancement\" label and include:\n\n- Clear description of the proposed feature\n- Use case and benefits\n- Possible implementation approach\n- Willingness to contribute to implementation\n\n---\n\n## Future Work / Improvements\n\nThe following features and improvements are planned for future releases:\n\n### Testing Infrastructure\n- **Unit Test Suite**: Comprehensive test coverage with pytest\n- **Integration Tests**: End-to-end testing of client-server interactions\n- **GUI Testing**: Automated UI testing framework\n- **Performance Tests**: Load testing and benchmarking tools\n\n### Documentation\n- **API Documentation**: Detailed API reference documentation\n- **User Manual**: Step-by-step tutorials and guides\n- **Developer Documentation**: Architecture and contribution guides\n- **Video Tutorials**: Interactive learning materials\n\n### Code Quality Tools\n- **Linting**: Integration with flake8, mypy for code quality\n- **Formatting**: Automated code formatting with black and isort\n- **Pre-commit Hooks**: Automated quality checks before commits\n- **Coverage Reports**: Test coverage tracking and reporting\n\n### Enhanced Features\n- **Plugin System**: Extensible architecture for custom functionality\n- **Configuration Validation**: Schema-based YAML validation\n- **Import/Export**: Configuration sharing and backup capabilities\n- **Performance Monitoring**: Request timing and performance metrics\n- **Visual Status Indicators**: Real-time status monitoring with color-coded indicators\n\n---\n\n**REST Tester** - *Making REST API development and testing effortless*\n\nCopyright (c) 2025 David Kracht - Licensed under MIT License",
"bugtrack_url": null,
"license": "MIT",
"summary": "Test Application f\u00fcr REST APIs (Server and Client)",
"version": "1.0.0",
"project_urls": {
"Homepage": "https://github.com/david-kracht/rest-tester",
"Repository": "https://github.com/david-kracht/rest-tester"
},
"split_keywords": [
"rest",
" api",
" testing",
" server",
" client"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "30a2c449baa5206a0f3a60ceb3b87ba857a66e7d1c9295216062973759216854",
"md5": "59b68cf6f7eb4070f324b4061df08223",
"sha256": "e5cdae046969df002cbe1eeee77b61cd19173d435b2f40f0721a7c1dc09b9533"
},
"downloads": -1,
"filename": "rest_tester-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "59b68cf6f7eb4070f324b4061df08223",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.14,>=3.9",
"size": 84318,
"upload_time": "2025-08-23T19:12:35",
"upload_time_iso_8601": "2025-08-23T19:12:35.272282Z",
"url": "https://files.pythonhosted.org/packages/30/a2/c449baa5206a0f3a60ceb3b87ba857a66e7d1c9295216062973759216854/rest_tester-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d800c6bc087c7faea215e733fb49966a30f26f40740d10e04f75b33707b4ea13",
"md5": "4d26bd11f6236cebd283d92b77786937",
"sha256": "4a774334889b2ac4519641667de923cb2abc89ad73053ce0a7afdf173d0e213b"
},
"downloads": -1,
"filename": "rest_tester-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "4d26bd11f6236cebd283d92b77786937",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.14,>=3.9",
"size": 76513,
"upload_time": "2025-08-23T19:12:36",
"upload_time_iso_8601": "2025-08-23T19:12:36.371171Z",
"url": "https://files.pythonhosted.org/packages/d8/00/c6bc087c7faea215e733fb49966a30f26f40740d10e04f75b33707b4ea13/rest_tester-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-23 19:12:36",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "david-kracht",
"github_project": "rest-tester",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "rest-tester"
}