Goose is a Rust load testing tool, inspired by Locust.
- web UI
- alternative HTTP clients
- website
- detect/report when available CPU power is bottleneck
- add TLS support (https://gitlab.com/neachdainn/nng-rs/-/issues/46)
- alternative non-HTTP clients
- gRPC
- detect terminal width and adjust statistics output (when wide enough collapse into a single table, etc)
- more complicated wait_time implementations
- constant pacing (https://github.com/locustio/locust/blob/795b5a14dd5b0991fec5a7f96f0d6491ce19e3d0/locust/wait_time.py#L30)
- custom wait_time implementations
- --list TaskSets and Tasks
- --log-level to increase debugging verbosity to log file
- --log-file to specify path and name of log file
- --verbose to increase debugging verbosity to stdout
- --print-stats to show statistics at end of load test
- --clients to specify number of concurrent clients to simulate
- --run-time to control how long load test runs
- weighting of TaskSets and Tasks
- spawn clients in threads
- move counters into a per-request HashMap instead of a per-Task Vector (currently limited to including only one request per task for accurate statistics)
- remove per-Task atomic counters (rely instead on per-request statistics)
- --reset-stats to optionally reset stats after all threads have hatched
- GET request method helper
- properly identify method in stats
- optionally track fine-grained per-request response codes (ie, GET /index.html: 5 200, 2 500)
- provide useful statistics at end of load-test
- merge statistics from client threads into parent
- response time calculations: min, max, average, median
- show total and per-second success and fail counts
- include aggregated totals for all tasks/requests
- break down percentage of requests within listed times for all tasks/requests
- optionally provide running statistics
- only sync client threads to parent when needing to display statistics
- don't collect response time and other statistics if not displaying them
- catch ctrl-c and exit gracefully, displaying statistics if enabled
- host configuration
- -H --host cli option
- host attribute
- wait_time attribute, configurable pause after each Task runs
- HEAD request method helper
- PUT request method helper
- PATCH request method helper
- DELETE request method helper
- TaskSequence
- add special-case 'on-start' that is always first in TaskSet
- allow weighting of tasks to always run in a given order
- add special-case 'on-stop' that is always last in TaskSet
- POST request method helper
- turn Goose into a library, create a loadtest by creating an app with Cargo
- compare the pros/cons of this w/ going the dynamic library approach
- upload to crates.io
- optimize statistics
- round and group response times
- maintain running min/max/average
- offload to parent process as much as possible
- add polling to sleeping clients to exit quicker
- automated testing of Goose logic
- documentation
- gaggle support (distributed Geese)
- 1:n manager:worker processes
- make gaggle mode optional (adds cmake requirement)
- load test checksum, warn/err if workers are running different tests
- code cleanup, better code re-use
- metaprogramming, implement goose_codegen macros to simplify goosefile creation
- async clients
- use Reqwest async client
- audit code for additional places to use async
- request logging