Skip to main content

AI-powered Locust load test generator from API documentation

Project description

DevDox AI Locust

License: Apache 2.0 Python 3.12+ Code style: black

AI-powered Locust load test generator from API documentation

DevDox AI Locust automatically generates comprehensive Locust load testing scripts from your API documentation (OpenAPI/Swagger specs). Using advanced AI capabilities, it creates realistic test scenarios, handles complex authentication flows, and generates production-ready performance tests.

๐Ÿ†• What's New in 0.1.5

๐Ÿ’ฅ GitHub Actions Integration

You can now use **DevDox AI Locust ** directly in your GitHub workflows!
The new reusable Docker-based GitHub Action lets you automatically generate and upload Locust test scripts for your APIs.

Example Workflow:

name: "Swagger Test Generator"
on: [push]

jobs:
  generate-locust-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Generate Locust tests
        uses: montymobile1/devdox-ai-locust@0.1.5
        with:
          swagger_url: "https://petstore3.swagger.io/api/v3/openapi.json"
          output: "generated_tests"
          users: "15"
          spawn_rate: "3"
          run_time: "10m"
          together_api_key: ${{ secrets.TOGETHER_API_KEY }}

      - name: Upload generated tests
        uses: actions/upload-artifact@v4
        with:
          name: locust-tests
          path: generated_tests

โœจ Features

  • ๐Ÿค– AI-Enhanced Generation: Uses Together AI to create intelligent, realistic load test scenarios
  • ๐Ÿ“š OpenAPI/Swagger Support: Automatically parses OpenAPI 3.0 and Swagger 2.0 specifications
  • ๐Ÿ”ง Production-Ready Code: Generates clean, maintainable Locust test files
  • ๐ŸŽฏ Smart Test Scenarios: Creates CRUD workflows, authentication flows, and error handling
  • ๐Ÿ“Š Realistic Data: Generates appropriate test data using Faker
  • ๐Ÿ› ๏ธ Template-Based: Highly customizable Jinja2 templates for different testing needs
  • ๐Ÿ”„ Hybrid Approach: Combines rule-based generation with AI enhancement
  • ๐Ÿ“ˆ Comprehensive Coverage: Handles various HTTP methods, content types, and response scenarios
  • โšก Asynchronous Processing: Fast, non-blocking test generation with async/await

๐Ÿš€ Quick Start

Installation

# Install from PyPI (when published)
pip install devdox-ai-locust

# Or install from source
git clone https://github.com/montymobile1/devdox-ai-locust.git
cd devdox-ai-locust
pip install -e .

Prerequisites

  1. Python 3.12+ - Required for modern async/await syntax and type hints
  2. Together AI API Key - For AI-enhanced generation capabilities

Configuration

  1. Get your Together AI API key from Together AI
  2. Set up your environment:
# Copy example environment file
cp .env.example .env

# Edit .env and add your API key
echo "API_KEY=your_together_ai_api_key_here" > .env

Basic Usage

# Generate from OpenAPI URL
devdox_ai_locust generate --openapi-url https://api.example.com/openapi.json --output ./tests

# Generate with custom configuration
devdox_ai_locust generate \
   https://petstore3.swagger.io/api/v3/openapi.json \
  --output ./petstore-tests \
  --together-api-key your_api_key \
  
 # Generate with db integration 
devdox_ai_locust generate \
  https://petstore3.swagger.io/api/v3/openapi.json \
  --output ./petstore-tests \
  --db-type mongo \

๐Ÿ“– Documentation

Command Line Interface

devdox_ai_locust generate [OPTIONS] SWAGGER_URL
Option Short Type Description Default
--output -o Path Output directory for generated tests output
--users -u Integer Number of simulated users 10
--spawn-rate -r Float User spawn rate (users/second) 2
--run-time -t String Test duration (e.g., 5m, 1h) 5m
--host -H String Target host URL None
--auth/--no-auth Boolean Include authentication True
--dry-run Flag Generate without running False
--custom-requirement String Custom AI instructions None
--together-api-key String Together AI API key From env

Generated Test Structure

locust_tests/
โ”œโ”€โ”€ locust.py              # Main Locust test file
โ”œโ”€โ”€ config.py              # Test configuration
โ”œโ”€โ”€ test_data.py           # Test data generators
โ”œโ”€โ”€ utils.py               # Utility functions
โ”œโ”€โ”€ requirements.txt       # Python dependencies
โ”œโ”€โ”€ .env.example          # Environment variables template
โ”œโ”€โ”€ README.md             # Test documentation
โ”œโ”€โ”€ workflows/
โ”‚   โ”œโ”€โ”€ user_workflow.py   # User-related test scenarios
โ”‚   โ”œโ”€โ”€ auth_workflow.py   # Authentication workflows
โ”‚   โ””โ”€โ”€ crud_workflow.py   # CRUD operation workflows
โ””โ”€โ”€ data/
    โ”œโ”€โ”€ users.json         # Sample user data
    โ””โ”€โ”€ test_cases.json    # Predefined test cases

๐Ÿ”ง Advanced Usage

Custom Templates

Create custom Jinja2 templates for specialized test generation:

# custom_template.py.j2
from locust import HttpUser, task, between

class {{ class_name }}User(HttpUser):
    wait_time = between(1, 3)
    
    def on_start(self):
        """Setup method called before tasks"""
        self.token = self.login()
    
    {% for endpoint in endpoints %}
    @task({{ endpoint.weight | default(1) }})
    def {{ endpoint.method_name }}(self):
        """{{ endpoint.description }}"""
        # Custom task implementation
        {{ endpoint.ai_generated_code | indent(8) }}
    {% endfor %}

Programmatic Usage

from devdox_ai_locust import HybridLocustGenerator
from devdox_ai_locust.config import Settings

# Initialize generator
config = Settings()
generator = HybridLocustGenerator(config)

# Generate from OpenAPI spec
async def generate_tests():
    files, workflows = await generator.generate_from_url(
        "https://api.example.com/openapi.json",
        output_dir="./tests",
        ai_enhanced=True
    )
    
    print(f"Generated {len(files)} test files")
    print(f"Created {len(workflows)} workflows")

# Run generation
import asyncio
asyncio.run(generate_tests())

๐Ÿงช Development

Setup Development Environment

# Clone repository
git clone https://github.com/montymobile1/devdox-ai-locust.git
cd devdox-ai-locust

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install in development mode
pip install -e ".[dev,test,ai]"

# Install pre-commit hooks
pre-commit install

Running Tests

# Use the test runner script
coverage run -m pytest tests/

Project Structure

src/devdox_ai_locust/
โ”œโ”€โ”€ __init__.py
โ”œโ”€โ”€ cli.py                      # Command line interface
โ”œโ”€โ”€ config.py                   # Configuration management
โ”œโ”€โ”€ locust_generator.py         # Basic test generation
โ”œโ”€โ”€ hybrid_loctus_generator.py  # AI-enhanced generation
โ”œโ”€โ”€ templates/                  # Jinja2 templates
โ”‚   โ”œโ”€โ”€ locust.py.j2
โ”‚   โ”œโ”€โ”€ config.py.j2
โ”‚   โ””โ”€โ”€ workflow.py.j2
โ”œโ”€โ”€ schemas/                    # Data models and validation
โ”‚   โ”œโ”€โ”€ processing_result.py
โ”‚   โ””โ”€โ”€ endpoint_schema.py
โ”œโ”€โ”€ utils/                      # Utility modules
โ”‚   โ”œโ”€โ”€ swagger_utils.py
โ”‚   โ”œโ”€โ”€ open_ai_parser.py
โ”‚   โ””โ”€โ”€ file_creation.py
โ””โ”€โ”€ prompt/                     # AI prompt templates
    โ”œโ”€โ”€ system_prompts.py
    โ””โ”€โ”€ enhancement_prompts.py

Development Workflow

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Add tests for new functionality
  5. Run the test suite (make test)
  6. Commit your changes (git commit -m 'Add amazing feature')
  7. Push to the branch (git push origin feature/amazing-feature)
  8. Open a Pull Request

Code Standards

  • Python 3.12+ with type hints
  • Black for code formatting
  • isort for import sorting
  • pytest for testing
  • mypy for type checking
  • Pre-commit hooks for quality gates

๐Ÿ“‹ Requirements

System Requirements

  • Python: 3.12 or higher
  • Memory: 512MB RAM minimum, 1GB recommended
  • Storage: 100MB for installation, additional space for generated tests

Dependencies

Core Dependencies

  • locust - Load testing framework
  • click - CLI framework
  • pyyaml - YAML parsing
  • requests - HTTP client
  • pydantic - Data validation
  • jinja2 - Template engine
  • rich - Rich text output
  • faker - Test data generation

AI Dependencies

  • langchain-together - Together AI integration
  • together - Together AI Python client

Development Dependencies

  • pytest - Testing framework
  • black - Code formatter
  • mypy - Type checker
  • pre-commit - Git hooks

๐Ÿ” Examples

Example 1: E-commerce API

# Generate tests for an e-commerce API
devdox_ai_locust generate \
   https://api.shop.example.com/v1/openapi.json \
  --output ./ecommerce-tests 

# The generator will create:
# - Product browsing scenarios
# - Shopping cart workflows  
# - Checkout and payment flows
# - User registration and login
# - Order management tests

โ“ FAQ

Q: What API specification formats are supported? A: We support OpenAPI 3.0+ and Swagger 2.0 specifications in JSON and YAML formats.

Q: Do I need an AI API key? A: Yes, for AI-enhanced generation you need a Together AI API key. Basic generation works without AI.

Q: Can I customize the generated test templates? A: Absolutely! You can provide custom Jinja2 templates using the --template-dir option.

Q: How do I handle authentication in generated tests? A: The generator automatically detects authentication schemes from your OpenAPI spec and creates appropriate test flows.

Q: Can I run tests against different environments? A: Yes, use environment variables or configuration files to specify different target hosts and settings.

Q: What if my API has complex business logic? A: The AI enhancement feature analyzes your API patterns and generates realistic business workflows, not just individual endpoint tests.

๐Ÿ› Troubleshooting

Common Issues

Import Errors

# Ensure proper installation
pip install -e .

# Check Python path
python -c "import devdox_ai_locust; print('OK')"

API Key Issues

# Verify API key is set
echo $API_KEY

# Test API connectivity
python -c "from together import Together; print(Together(api_key='your_key').models.list())"

Template Errors

# Validate your OpenAPI spec
# Use online validators like swagger.io/tools/swagger-editor/

# Check template syntax
# Ensure custom templates use valid Jinja2 syntax

๐Ÿ“„ License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

  • Locust - The amazing load testing framework that powers our generated tests
  • Together AI - Providing the AI capabilities for intelligent test generation
  • OpenAPI Initiative - For standardizing API documentation
  • Python Community - For the excellent libraries and tools

Made with โค๏ธ by the DevDox team

Transform your API documentation into powerful load tests with the magic of AI! ๐Ÿš€

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

devdox_ai_locust-0.1.5.tar.gz (82.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

devdox_ai_locust-0.1.5-py3-none-any.whl (72.7 kB view details)

Uploaded Python 3

File details

Details for the file devdox_ai_locust-0.1.5.tar.gz.

File metadata

  • Download URL: devdox_ai_locust-0.1.5.tar.gz
  • Upload date:
  • Size: 82.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for devdox_ai_locust-0.1.5.tar.gz
Algorithm Hash digest
SHA256 ea3e865ade6eb7f3a37e92b592cc6380ba9931c58dd40dec351d5e392cdee09f
MD5 841d8f6d8afb4f4fabceda49a27cf0c2
BLAKE2b-256 6df6c97791dd58105c936b25aefce7667842c458208ba5f3803dced9c923ec6e

See more details on using hashes here.

File details

Details for the file devdox_ai_locust-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for devdox_ai_locust-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 b785f2ba88fbec12619193cf27c24e100031bdbdf19b5e445c08acb0f0f03a5b
MD5 a2773583bdad928ccf7baa8c4d596b67
BLAKE2b-256 47683726b1e5c20133d653b4c6373b32e3d3d9a28a8206910325d24fddd554e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page