rest-tester


Namerest-tester JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://github.com/david-kracht/rest-tester
SummaryTest Application für REST APIs (Server and Client)
upload_time2025-08-23 19:12:36
maintainerNone
docs_urlNone
authorDavid Kracht
requires_python<3.14,>=3.9
licenseMIT
keywords rest api testing server client
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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.


![REST Tester Main Window](./doc/window.jpg)
---

## 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![REST Tester Main Window](./doc/window.jpg)\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"
}
        
Elapsed time: 1.21458s