Download the PHP package ehab-talaat/laravel-tornado without Composer
On this page you can find all versions of the php package ehab-talaat/laravel-tornado. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download ehab-talaat/laravel-tornado
More information about ehab-talaat/laravel-tornado
Files in ehab-talaat/laravel-tornado
Package laravel-tornado
Short Description 🌪️ HTTP stress testing for Laravel — live feed + full stats
License MIT
Informations about the package laravel-tornado
🌪️ Laravel Tornado
HTTP stress testing for Laravel — built to feel native.
Test any endpoint directly from Artisan. Live request feed, full stats, smart body generation, auth support, multi-step sequences, and beautiful HTML reports.
Table of Contents
- Installation
- Quick Start
- Commands
- tornado
- tornado:sequence
- Options Reference
- Features
- Interactive Mode
- Smart Mode
- Auth Mode
- Export Reports
- Sequence Mode
- Reading the Output
- Package Structure
Installation
Laravel auto-discovers the package. No config file needed.
Requirements: PHP 8.1+, Laravel 10/11/12, Guzzle 7+
Quick Start
Commands
tornado — Stress test a single endpoint
Examples
tornado:sequence — Multi-step user flow
Examples
Options Reference
tornado options
| Option | Default | Description |
|---|---|---|
url |
(required) | Relative /api/x or absolute https://… |
--method |
GET |
HTTP method: GET, POST, PUT, PATCH, DELETE |
--requests |
100 |
Total number of requests |
--concurrency |
10 |
Simultaneous requests |
--timeout |
10 |
Per-request timeout in seconds |
--header |
— | Repeatable: --header="Key: Value" |
--body |
— | Raw JSON string for POST/PUT |
--smart |
— | Auto-generate body from validation rules |
--auth |
— | Auth driver: sanctum or passport |
--export |
— | Export format: json or html |
--no-live |
— | Skip live feed, show summary only |
tornado:sequence options
| Option | Default | Description |
|---|---|---|
file |
(optional) | Path to JSON sequence file |
--flows |
10 |
How many full user flows to simulate |
--concurrency |
5 |
Concurrent flows at a time |
--export |
— | Export each step: json or html |
Features
🎯 Interactive Mode
Run php artisan tornado with no arguments and Tornado asks you everything:
🧠 Smart Mode — Auto-generate request body
Tornado reads your controller's validation rules and generates realistic fake data automatically using Faker. No need to write --body manually.
Supported validation styles:
Usage:
What Tornado generates per rule/field:
| Rule / Field name | Generated value |
|---|---|
email rule |
fake()->safeEmail() |
url rule |
fake()->url() |
integer / numeric |
fake()->numberBetween(min, max) |
boolean |
fake()->boolean() |
date |
fake()->date() |
uuid |
fake()->uuid() |
field contains name |
fake()->name() |
field contains password |
Password@123 format |
field contains phone |
fake()->phoneNumber() |
field contains address |
fake()->address() |
field contains city |
fake()->city() |
field contains price / amount |
fake()->randomFloat(2, 1, 999) |
field ends with _id |
fake()->numberBetween(1, 100) |
A fresh fake value is generated for every single request.
🔐 Auth Mode — Authenticated routes
Tornado logs in once, gets the token, and injects it into all requests automatically.
Interactive:
Direct (skip prompts):
Supported drivers:
| Driver | Login endpoints tried |
|---|---|
sanctum |
/api/login, /login, /api/auth/login, /api/sanctum/token |
passport |
/oauth/token, /api/oauth/token |
Supported response shapes (any of these work out of the box):
📊 Export Reports
Save results for sharing or comparing over time.
Files are saved to storage/tornado/ with a timestamp:
JSON report structure:
HTML report includes:
- Stat cards (total, RPS, success/fail, avg, P95)
- Latency distribution bar chart
- Status codes doughnut chart
- Full percentile table (min → max)
- Dark theme, self-contained single file
🔗 Sequence Mode — Multi-step flows
Simulate a real user flow: login → browse → create → logout. Each step passes data to the next via extract.
JSON file format
Run it:
How extract works
Use dot-notation to pull any value from a JSON response:
Then use {token}, {user_id}, {company_id} as placeholders in any later step's URL, headers, or body:
Step-level options
Override load settings per step:
If omitted, the step inherits --flows and --concurrency from the command.
Interactive sequence
Reading the Output
Live feed
Final summary
What the metrics mean
| Metric | What it tells you |
|---|---|
| RPS | Requests per second your server handled |
| P50 | Half your users are faster than this |
| P95 | 95% of users are faster than this — your real-world experience |
| P99 | Your worst-case users |
| Failed % | High = DB overload, rate limiting, or crashes |
| 500 errors | Check storage/logs/laravel.log |
Performance benchmarks
| P95 response | Rating |
|---|---|
| < 100ms | 🟢 Excellent |
| 100–300ms | 🟡 Good |
| 300–800ms | 🟠 Needs work |
| > 800ms | 🔴 Critical |
License
MIT — Ehab Talaat
All versions of laravel-tornado with dependencies
laravel/framework Version ^10.0|^11.0|^12.0|^13.0
guzzlehttp/guzzle Version ^7.0