A comprehensive testing framework for REST APIs with functional and performance testing capabilities
Project description
RapidTest 🚀
A super lightweight and blazingly fast library to simplify REST API testing. Designed to be intuitive, fast to implement, and with clear colorized reports - no heavy dependencies!
✨ Features
- Simplicity: Perform HTTP requests (
GET,POST,PUT,PATCH,DELETE) in a single line. - Automatic Validation: Automatically compare status codes and response bodies.
- Fast & Lightweight: Minimal dependencies, maximum speed!
- Colorized Reports: Clean console output with ANSI colors to identify failures quickly.
- Data Generator: Integrated random data generator (using Faker) for dynamic testing.
- Performance Testing: Built-in load testing with threading - no external tools needed!
🛠️ Installation
Install the required dependencies:
pip install rapidtest
Or install dependencies manually:
pip install requests faker
🚀 Quick Start
1. Initialize RapidTest
from rapidtest import Test
# Configure your API's base URL
tester = Test(url="http://localhost:8000")
2. Run Tests
GET
tester.get(endpoint="/users", expected_status=200)
POST with Body Validation
user_data = {"username": "hector", "password": "123"}
tester.post(endpoint="/user", json=user_data, expected_status=201, expected_body=user_data)
PUT / PATCH / DELETE
# Update data
tester.put(endpoint="/user/hector", json={"password": "new_password"}, expected_status=200)
# Delete resource
tester.delete(endpoint="/user/hector", expected_status=204)
3. Generate Random Data
Use the Data class to create test data on the fly:
from rapidtest import Data
user = Data.generate_auth_user()
email = Data.generate_email()
name = Data.generate_name()
phone = Data.generate_phone()
print(user) # {'username': '...', 'password': '...'}
Available Data Generation Methods
The Data class includes the following static methods:
User Data
generate_auth_user()- Generates a dictionary with username and passwordgenerate_name()- Generates a random full namegenerate_email()- Generates a random email addressgenerate_password()- Generates a secure random passwordgenerate_phone()- Generates a random phone number
Location Data
generate_address()- Generates a random postal addressgenerate_city()- Generates a random city namegenerate_state()- Generates a random state/province namegenerate_zipcode()- Generates a random postal codegenerate_country()- Generates a random country name
Other Data
generate_id()- Generates a unique UUIDgenerate_job()- Generates a random job titlegenerate_text()- Generates random text (short paragraph)generate_paragraph()- Generates a long random paragraphgenerate_date()- Generates a random date (ISO format)generate_datetime()- Generates random date and time (ISO format)generate_time()- Generates a random time
Additional Parameters
All HTTP methods support additional parameters:
# Query parameters
tester.get(endpoint="/users", params={"page": 1, "limit": 10})
# Custom headers
tester.post(endpoint="/auth", json=user_data, headers={"Content-Type": "application/json"})
# Form data
tester.post(endpoint="/upload", data={"file": "content"})
# Additional requests arguments
tester.get(endpoint="/secure", timeout=30, verify=False)
🚀 Performance Testing
Use the Performance class to run simple load tests on your APIs:
from rapidtest import Performance
# Initialize performance test
perf = Performance(
base_url="http://localhost:8000",
users=10, # Number of concurrent users
duration=30, # Test duration in seconds
timeout=10 # Request timeout
)
# Add endpoint to test
perf.add_get_task(endpoint="/api/users")
# Run the test (results shown in terminal)
results = perf.run()
# Check results
print(f"Success rate: {results['success_rate']}%")
print(f"Average response time: {results['avg_response_time']}ms")
print(f"Requests per second: {results['requests_per_second']}")
Simple Performance Testing Features
- No external dependencies: Uses only
requestsandthreading - Real-time terminal output: See results as they happen
- Basic load simulation: Multiple concurrent users
- Essential metrics: Response times, success rates, RPS
- Python 3.12 compatible: No Locust/gevent issues
Performance Test Output
See real results in action:
🚀 Starting simple performance test
📍 URL: http://localhost:8000/api/users
👥 Users: 10
⏱️ Duration: 30s
--------------------------------------------------
============================================================
📊 PERFORMANCE TEST RESULTS
============================================================
🎯 Total Requests: 1245
✅ Successful: 1245
❌ Failed: 0
📈 Success Rate: 100.0%
⚡ Requests/sec: 41.5
⏱️ Avg Response Time: 12.3ms
🐌 Min Response Time: 8.1ms
🐇 Max Response Time: 89.2ms
👥 Concurrent Users: 10
⏰ Test Duration: 30s
============================================================
🟢 Excellent performance!
📊 Reports
See how your tests look with real colorized output:
✅ Successful Test
❌ Failed Test
Colors:
- ✅ Green for PASSED tests
- ❌ Red for FAILED tests
- 🔵 Blue for labels and info
- 🟡 Yellow for warnings
📁 Project Structure
rapidtest/RapidTest.py: Core library logicRapidData.py: Random data generatorPerformance.py: Simple performance testing (no external deps)Utils.py: Formatting and reporting utilities__init__.py: Module configuration
🔧 Dependencies
requests>=2.25.1: For making HTTP requestsfaker>=13.0.0: For generating fake data
That's it! 🎉
✨ Ultra lightweight - removed Rich dependency for maximum speed
🚀 Fastest startup - minimal imports, instant execution
🧵 Built-in performance testing - uses only standard library threading
📋 Requirements
- Python >=3.7
📖 Project Information
- Version: 0.3.0
- Author: Hector Rosales
- License: MIT
- Homepage: https://github.com/hector-dev/rapidtest
⚡ Built for speed and simplicity - because testing should be fast and fun! 🛠️✨
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rapidtest-0.3.1.tar.gz.
File metadata
- Download URL: rapidtest-0.3.1.tar.gz
- Upload date:
- Size: 11.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58b6dfd8d03d912639e62749cd5e17b846fb145edb04a88d1f24ea206c58486c
|
|
| MD5 |
6dd13a932fa9f15a2de9ece8256867c4
|
|
| BLAKE2b-256 |
1033381061496ade4ae392e15130765399df0e6327679913b47321620aa4acdd
|
File details
Details for the file rapidtest-0.3.1-py3-none-any.whl.
File metadata
- Download URL: rapidtest-0.3.1-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d7dbe6c902a06aadee3963c5fca805836541ca5ba355115751b62c9e0001144
|
|
| MD5 |
2c5a09f3cdebe811b12b22cc2cc03cb3
|
|
| BLAKE2b-256 |
5de3eba83727e98efe085ac037ddac86580361fd014a3e271465b13f864cc6db
|