Releases: tag1consulting/goose
Releases · tag1consulting/goose
v0.15.0
0.15.0 November 2, 2021
- #372 de-deduplicate documentation, favoring The Goose Book
- #373 API change: introduce
GooseRequest
andGooseRequestBuilder
for more flexibility when making requests
o removeGooseUser::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
, andGooseUser::goose_send
o adds or modifies helpersGooseUser::get
,GooseUser::get_named
,GooseUser::post
,GooseUser::post_form
,GooseUser::post_json
,GooseUser::head
, andGooseUser::delete
o replacesGooseUser::goose_send
withGooseUser::request
which accepts aGooseRequest
object
o fixes [#370] (seeGooseRequestBuilder::expect_status_code
)
v0.14.1
0.14.1 October 13, 2021
- #364 add link from the Developer Documentation to The Git Book
- #368 fix performance regression: optimize fastpath if no delay between tasks
v0.14.0
0.14.0 September 15, 2021
- #361 convert
README.md
(and enhance) intoThe 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 eachGooseUser
- #355 API change: change
GooseTask
signature to take a mutable reference ofGooseUser
:async fn example_task_function(user: &mut GooseUser) -> GooseTaskResult {
- #358 API change: update
GooseTaskSet::set_wait_time()
to acceptstd::time::Duration
instead ofusize
allowing more granularity - #355 remove
Clone
trait fromGooseUser
andGooseAttack
- #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 to0.15
v0.13.3
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
v0.13.2
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
v0.13.1
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
v0.13.0
0.13.0 July 19, 2021
- enable
gzip
support and set Accept-Encoding header by default in the client; disable with--no-gzip
orGooseDefault::NoGzip
- document how to add custom cookies (https://docs.rs/goose/*/goose/goose/struct.GooseUser.html#custom-cookies)
- update
rustc_version
dependency to0.4
- include client request headers in
GooseRequestMetric
so they show up in the request log and the debug log - introduce
GooseRawMetric
which contains themethod
,url
,headers
andbody
of the client request made, and is now contained inraw
field of theGooseRequestMetric
(API change) - introduce
--request-body
(andGooseDefault::RequestBody
) which when enabled shows up in thebody
field of theGooseRawMetric
- add
GooseRawMetric
to the request log, debug log and error log
v0.12.1
0.12.1 July 15, 2021
- rename
rustls
feature torustls-tls
sotests/controller.rs
can build with therustls
library; updatetungstenite
to0.14
andtokio-tungstenite
=0.15
to allow building withrustls
- documentation cleanup; properly rename
GooseDefault::RequestFormat
and fix links - always configure
GooseConfiguration.manager
andGooseConfiguration.worker
; confirm Manager is enabled when setting--expect-workers
- moved
GooseConfiguration
,GooseDefault
, andGooseDefaultType
into newsrc/config.rs
file; standardized configuration precedence through internalGooseConfigure
trait definingget_value()
for all supported types; general improvements to configuration documentation
v0.12.0
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)
ogoose::initialize_logger()
,Socket
reduced topub(crate)
scope
ogoose::controller::GooseControllerProtocol
,GooseControllerRequestMessage
,GooseControllerResponseMessage
,GooseControllerRequest
,GooseControllerResponse
,GooseControllerState
,::controller_main()
reduced topub(crate)
scope
ogoose::manager::manager_main()
reduced topub(crate)
scope
ogoose::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()
, andprepare_status_codes()
reduced topub(crate)
scope
ogoose::metrics::GooseRequestMetricAggregate::new()
,::set_response_time()
, and::set_status_code()
reduced topub(crate)
scope
ogoose::metrics::GooseTaskMetric::new()
and::set_time()
reduced topub(crate)
scope
ogoose::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 topub(crate)
scope
o fromgoose::metrics::GooseMetrics
reducedfinal_metrics
,display_status_codes
anddisplay_metrics
fields topub(crate)
scope
ogoose::metrics::GooseErrorMetric::new()
reduced topub(crate)
scope
ogoose::logger::logger_main()
reduced topub(crate)
scope
ogoose::user::user_main()
reduced topub(crate)
scope
ogoose::worker::worker_main()
reduced topub(crate)
scope - move all metrics-related stuctures and methods into
metrics.rs
, rename for consistency, and improve documentation (API change)
ogoose::GooseRawRequest
changed togoose::metrics::GooseRequestMetric
ogoose::GooseRequest
changed togoose::metrics::GooseRequestMetricAggregate
ogoose::GooseRawTask
changed togoose::metrics::GooseTaskMetric
ogoose::GooseRawTask
changed togoose::metrics::GooseTaskMetricAggregate
ogoose::update_duration()
changed togoose::metrics::update_duration()
and reduced topub(crate)
scope
ogoose::sync_metrics()
changed togoose::metrics::sync_metrics()
and reduced topub(crate)
scope
ogoose::reset_metrics()
changed togoose::metrics::reset_metrics()
and reduced topub(crate)
scope
ogoose::receive_metrics()
changed togoose::metrics::receive_metrics()
and reduced topub(crate)
scope
ogoose::record_error()
changed togoose::metrics::record_error()
and reduced topub(crate)
scope - expose utility functions used by Goose for use by load tests
ogoose::util::parse_timespan()
,::gcd()
,::median()
,::truncate_string()
,::timer_expired()
,::ms_timer_expired()
,::get_hatch_rate()
, and::is_valid_host()
were elevated topub
scope - introduce (disabled by default) Coordinated Omission Mitigation, configured through
--co-mitigation
with the following options: "disabled" (default0), "average", "minimum", "maximum"; (or withGooseDefault::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 sendingGooseDebug
,GooseRequestMetric
andGooseTaskMetric
objects to the Logger thread for logging to file - introduce
--tasks-file
run-time option for loggingGooseTaskMetric
s to file - rename
GooseTaskMetric
toGooseTaskMetricAggregate
, and introduceGooseTaskMetric
which is a subset ofGooseRequestMetric
only used for logging - introduce
--error-file
run-time option for loggingGooseErrorMetric
s 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
v0.11.2
- introduce telnet Controller allowing real-time control of load test, optionally disable with
--no-telnet
, supports the following commands:
ohelp
(and?
) display help
oexit
(andquit
) exit the telnet Controller
oshutdown
shuts down the running load test (and exits the controller)
ohost
(andhosts
) HOST sets host to load test against, ie http://localhost/
ousers
(anduser
) INT sets number of simulated users
ohatchrate
(andhatch_rate
) FLOAT sets per-second rate users hatch
oruntime
(andrun_time
) TIME sets how long the load test should run
oconfig
displays the current load test configuration
oconfig-json
displays the current load test configuration in json format
ometrics
(andstats
) displays metrics for the current load test
ometrics-json
(andstats-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:
oconfig
andconfig-json
both return the load test configuration in json format
ometrics
andmetrics-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 withGooseDefault::NoAutoStart
)
o renamedstop
Controller command toshutdown
o added newstart
Controller command, telling idle Goose load test to start
o added newstop
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