Tag1consulting Goose Versions Save

Load testing framework, inspired by Locust

0.15.0

2 years ago

0.15.0 November 2, 2021

  • #372 de-deduplicate documentation, favoring The Goose Book
  • #373 API change: introduce GooseRequest and GooseRequestBuilder for more flexibility when making requests o remove GooseUser::post_named, GooseUser::head_named, GooseUser::delete_named, GooseUser::goose_get, GooseUser::goose_put, GooseUser::goose_head, GooseUser::goose_put, GooseUser::goose_patch, GooseUser::goose_delete, and GooseUser::goose_send o adds or modifies helpers GooseUser::get, GooseUser::get_named, GooseUser::post, GooseUser::post_form, GooseUser::post_json, GooseUser::head, and GooseUser::delete o replaces GooseUser::goose_send with GooseUser::request which accepts a GooseRequest object o fixes [#370] (see GooseRequestBuilder::expect_status_code)

0.14.1

2 years ago

0.14.1 October 13, 2021

0.14.0

2 years ago

0.14.0 September 15, 2021

  • #361 convert README.md (and enhance) into The Goose Book
  • #356 API change: make GooseAttack.execute async, main() function signature changed to:
    #[tokio::main]
    fn main() -> Result<(), GooseError> {
    
  • #355 API change: add the possibility to attach custom session data GooseUserData to each GooseUser
  • #355 API change: change GooseTask signature to take a mutable reference of GooseUser:
    async fn example_task_function(user: &mut GooseUser) -> GooseTaskResult {
    
  • #358 API change: update GooseTaskSet::set_wait_time() to accept std::time::Duration instead of usize allowing more granularity
  • #355 remove Clone trait from GooseUser and GooseAttack
  • #359 use request name when displaying errors to avoid having a large volume of distinct error for the same endpoint when using path parameters
  • #360 updated tungstenite dependency to 0.15

0.13.3

2 years ago

0.13.3 August 25, 2021

  • document GooseConfiguration fields that were only documented as gumpdrop parameters (in order to generate new lines in the help output) so now they're also documented in the code
  • fix panic when --no-task-metrics is enabled and metrics are printed; add tests to prevent further regressions

0.13.2

2 years ago

0.13.2 August 19, 2021

  • fix broken links within the documentation; general documentation cleanups
  • introduce --startup-time which can be set together with --users instead of using --hatch-rate to configure how quickly to start users
  • fix --run-time to always start counting after all users are fully started
  • include starting and stopping time in addition to running time in text metrics and html report

0.13.1

2 years ago

0.13.1 August 13, 2021

  • add test to confirm a base_url can include a path and be joined with a relative path
  • fix documentation typo
  • introduce pretty log format for --error-format, --debug-format, --request-format, and --task-format
  • clippy cleanups: don't borrow references that are immediately dereferenced by the compiler: https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
  • consistently report users simulated, target host(s), start and end times, and total duration of test both in text metrics and html report
  • updated httpmock dev dependency to 0.6

0.13.0

2 years ago

0.13.0 July 19, 2021

  • enable gzip support and set Accept-Encoding header by default in the client; disable with --no-gzip or GooseDefault::NoGzip
  • document how to add custom cookies (https://docs.rs/goose/*/goose/goose/struct.GooseUser.html#custom-cookies)
  • update rustc_version dependency to 0.4
  • include client request headers in GooseRequestMetric so they show up in the request log and the debug log
  • introduce GooseRawMetric which contains the method, url, headers and body of the client request made, and is now contained in raw field of the GooseRequestMetric (API change)
  • introduce --request-body (and GooseDefault::RequestBody) which when enabled shows up in the body field of the GooseRawMetric
  • add GooseRawMetric to the request log, debug log and error log

0.12.1

2 years ago

0.12.1 July 15, 2021

  • rename rustls feature to rustls-tls so tests/controller.rs can build with the rustls library; update tungstenite to 0.14 and tokio-tungstenite = 0.15 to allow building with rustls
  • documentation cleanup; properly rename GooseDefault::RequestFormat and fix links
  • always configure GooseConfiguration.manager and GooseConfiguration.worker; confirm Manager is enabled when setting --expect-workers
  • moved GooseConfiguration, GooseDefault, and GooseDefaultType into new src/config.rs file; standardized configuration precedence through internal GooseConfigure trait defining get_value() for all supported types; general improvements to configuration documentation

0.12.0

2 years ago

0.12.0 July 8, 2021

  • remove internal-only functions and structures from documentation, exposing only what's useful to consumers of the Goose library (API change) o goose::initialize_logger(), Socket reduced to pub(crate) scope o goose::controller::GooseControllerProtocol, GooseControllerRequestMessage, GooseControllerResponseMessage, GooseControllerRequest, GooseControllerResponse, GooseControllerState, ::controller_main() reduced to pub(crate) scope o goose::manager::manager_main() reduced to pub(crate) scope o goose::metrics::GooseRequestMetric::new(), ::set_final_url(), ::set_response_time(), and ::set_status_code(), ::per_second_calculations(), format_number(), merge_times(), update_min_time(), update_max_time(), calculate_response_time_percentile(), and prepare_status_codes() reduced to pub(crate) scope o goose::metrics::GooseRequestMetricAggregate::new(), ::set_response_time(), and ::set_status_code() reduced to pub(crate) scope o goose::metrics::GooseTaskMetric::new() and ::set_time() reduced to pub(crate) scope o goose::metrics::GooseMetrics::initialize_task_metrics() and ::print_running(), ::fmt_requests(), ::fmt_tasks(), ::fmt_task_times(), ::fmt_response_times(), ::fmt_percentiles(), ::fmt_status_codes() and ::fmt_errors() reduced to pub(crate) scope o from goose::metrics::GooseMetrics reduced final_metrics, display_status_codes and display_metrics fields to pub(crate) scope o goose::metrics::GooseErrorMetric::new() reduced to pub(crate) scope o goose::logger::logger_main() reduced to pub(crate) scope o goose::user::user_main() reduced to pub(crate) scope o goose::worker::worker_main() reduced to pub(crate) scope
  • move all metrics-related stuctures and methods into metrics.rs, rename for consistency, and improve documentation (API change) o goose::GooseRawRequest changed to goose::metrics::GooseRequestMetric o goose::GooseRequest changed to goose::metrics::GooseRequestMetricAggregate o goose::GooseRawTask changed to goose::metrics::GooseTaskMetric o goose::GooseRawTask changed to goose::metrics::GooseTaskMetricAggregate o goose::update_duration() changed to goose::metrics::update_duration() and reduced to pub(crate) scope o goose::sync_metrics() changed to goose::metrics::sync_metrics() and reduced to pub(crate) scope o goose::reset_metrics() changed to goose::metrics::reset_metrics() and reduced to pub(crate) scope o goose::receive_metrics() changed to goose::metrics::receive_metrics() and reduced to pub(crate) scope o goose::record_error() changed to goose::metrics::record_error() and reduced to pub(crate) scope
  • expose utility functions used by Goose for use by load tests o goose::util::parse_timespan(), ::gcd(), ::median(), ::truncate_string(), ::timer_expired(), ::ms_timer_expired(), ::get_hatch_rate(), and ::is_valid_host() were elevated to pub scope
  • introduce (disabled by default) Coordinated Omission Mitigation, configured through --co-mitigation with the following options: "disabled" (default0), "average", "minimum", "maximum"; (or with GooseDefault::CoordinatedOmissionMitigation)
  • (EXPERIMENTAL) Coordinated Omission Mitigation tracks the cadence that a GooseUser loops through all GooseTasks, (also accounting for time spent sleeping due to .set_wait_time()); it detects stalls (network or upstream server) that block and prevent other requests from running, and backfills the metrics to mitigate this loss of data (based on the general implementation found in HdrHistogram
  • When displaying metrics (via the cli and the html report) show both "raw" (actual) metrics and "coordinated omission mitigation" (back-filled with statistically generated) metrics, and the standard deviation between the average times for each
  • introduce GooseLog enum for sending GooseDebug, GooseRequestMetric and GooseTaskMetric objects to the Logger thread for logging to file
  • introduce --tasks-file run-time option for logging GooseTaskMetrics to file
  • rename GooseTaskMetric to GooseTaskMetricAggregate, and introduce GooseTaskMetric which is a subset of GooseRequestMetric only used for logging
  • introduce --error-file run-time option for logging GooseErrorMetrics to file
  • introduce GooseLogFormat enum for formatting all logs; add --task-format and --error-format using new enum, update --requests-format and --debug-format.
  • renamed --log-file to --goose-log, --requests-file to --request-log, --requests-format to --request-format, --tasks-file to --task-log, --tasks-format to --task-format, --error-file to --error-log, and --debug-file to --debug-log

0.11.2

2 years ago
  • introduce telnet Controller allowing real-time control of load test, optionally disable with --no-telnet, supports the following commands: o help (and ?) display help o exit (and quit) exit the telnet Controller o shutdown shuts down the running load test (and exits the controller) o host (and hosts) HOST sets host to load test against, ie http://localhost/ o users (and user) INT sets number of simulated users o hatchrate (and hatch_rate) FLOAT sets per-second rate users hatch o runtime (and run_time) TIME sets how long the load test should run o config displays the current load test configuration o config-json displays the current load test configuration in json format o metrics (and stats) displays metrics for the current load test o metrics-json (and stats-json) displays metrics for the current load test in json format
  • telnet Controller bind host defaults to 0.0.0.0, can be configured with --telnet-host
  • telnet Controller bind port defaults to 5116, can be configured with --telnet-port
  • telnet Controller defaults can be changed: o default to not enabling telnet Controller: GooseDefault::NoTelnet (bool) o default host to bind telnet Controller to: GooseDefault::TelnetHost (&str) o default port to bind telnet Controller to: GooseDefault::TelnetPort (usize)
  • introduce WebSocket Controller allowing real-time control of load test, optionally disable with --no-websocket, supports the same commands as the telnet Controller, except: o config and config-json both return the load test configuration in json format o metrics and metrics-json both return metrics for the current load test in json format
  • WebSocket Controller bind host defaults to 0.0.0.0, can be configured with --websocket-host
  • WebSocket Controller bind port defaults to 5117, can be configured with --websocket-port
  • WebSocket Controller defaults can be changed: o default to not enabling WebSocket Controller: GooseDefault::NoWebSocket (bool) o default host to bind WebSocket Controller to: GooseDefault::WebSocketHost (&str) o default port to bind WebSocket Controller to: GooseDefault::WebSocketPort (usize)
  • make it possible to start and stop a load test without completely restarting Goose
  • introduce --no-autostart to disable automatically starting the load test, leaves Goose in an idle state waiting for Controller commands (optionally change the default with GooseDefault::NoAutoStart) o renamed stop Controller command to shutdown o added new start Controller command, telling idle Goose load test to start o added new stop Controller command, telling running Goose load test to stop and return to idle state
  • code cleanup and logic consollidation to support Controller fixed a bug where metrics wouldn't display and the debug file, request file, and html report weren't written when load test was stopped while still launching users
  • regularly sync metrics, using a timeout to avoid hanging the main loop
  • properly reset metrics when load test is stopped and restarted
  • properly flush debug file, request file, and html report when stopping load test with Controller
  • properly (re)create debug file, request file, and html report when starting load test with Controller
  • if metrics are enabled, display when controller stops load test
  • de-duplicate code with traits, gaining compile-time validation that both Controllers are properly handling all defined commands
  • add async_trait dependency as stable Rust doesn't otherwise support async traits
  • allow starting Goose without specifying a host if --no-autostart is enabled, requiring instead that the host be configured via a Controller before starting a load test
  • add test for telnet and WebSocket Controllers