- Updated
PrettyConsoleto latest version to use higher perf APIs. - Moved from using
Sharpify.CommandLineInterfacetoConsoleAppFrameworkfor better perf and less verbose code. - Dropped
Sharpifydependency. - Many different internals were optimized to provide higher stability and performance.
ExecutionModeis no longer used, and the options were unified:- To use
Sequentialmode, simply set-c| --connectionsto 1. - By default
Parallelnumber will be used andconnectionswill be set to the number of requests. - To use
Limitedmode, simply set-c| --connectionsto the desired value by use the optional parameter. -d| --delaycan now be combined with any of the options above, even though at fullParallelit will only delay the results summary.
- To use
- Many outputs are now more consistent and artifact free, including when the output is interrupted (like when press CTRL+C).
- First-class LLM and AGENTS support:
- Added
cli-schemacommand prints the usage schema for the app in JSON format. - Added
--output-formatparameter that can be used to change the output from the default plain-text to structured JSON. - Added
--quietparameter that can be used to suppress writing progress to stderr (which can glitch if agents merge the streams).
- Added
--verboseoption was removed, the default mode with--quietachieves a similar functionality.- Compilations options were refined to produce a even more purpose fit executable.
- Smaller output binary size.
- Shorter startup times.
- Much less memory allocations and lower GC pressure.
- De-abstraction of hot-paths should now results in overall performance increase.
--rawexport mode now outputs a special json with debug information for non-successful responses with no content, it contains:- Response status code as integer
- Response headers
- Response content (if any)
- Fixed parsing exception in cases where response charset contained redundant quotes like
\"utf-8\" - Added support for AVX512
- Fixed a bug where
--rawwas not respected in 1 request workflows - Content size metrics are no longer IQR filtered, outliers in content size could require manual inspection so alerting for them is a good idea.
- Implemented much more efficient SIMD optimized implementation for summary calculations
- Export styling was reworked for much prettier ui
- Optimized interlocking variables to match hardware cache line size and reduce thread contention
- Optimized tasks creation to increase maximum concurrency level
- Enhanced styling of verbose progress reporting
- Stabilized and improved concurrency tracking in the face of exceptions
- Added
--rawoption to exports (skips creating a custom html)- this option can be combined with
--jsonto format the content as json - this option will also change the file extension to
jsonwhen the flag is used or if it is an exception
- this option can be combined with
terms-of-useis now a command, not a flag- When
-n(amount of requests) is set to 1, verbose output will be enforced for better readability - The changelog for the versions will now be the body of each release
- Updated internals to watch for different values in remote to track updates
- This means that previous versions will not be able to track (>=1.1.0.0) updates
- Summary will now filter out latency and size IQR outliers
- Added
get-schemacommand to generate a json schema file - Implemented a workaround for calculating the content length of a response when not provider in the response headers - only viable when exporting results
- Implemented a recursive exception tracking mechanism allow for better error reporting
- Removed redundant empty lines before summary output in
--verbosemode - Implemented more efficient locking mechanism for output synchronization
- Updated to .NET 9.0
- Optimized using new version of
PrettyConsole(3.1.0)
- Request duration is was changed to latency, a more important metric to measure
- Latency is properly measured immediately after response is received, reading the response content is now a separate step - saving resources in the process, especially when
--no-exportis used - Summary was redesigned to be more informative
- Removed "Summary" header, result looks cleaner now
- Total throughput measurement was implemented and now is displayed
verboseno longer prints used memory, this metric didn't have much to do the purpose ofPulse, and it is also not recorded anymore.
- A header showing the request method and url is now printed before the pulse starts, makes easier to track that you're executing the right thing, when the URL is hidden in the request file.
verbosemode now changes the output format, instead of displaying a dashboard, it prints which request/response is being processed.- The progress bar that was used when cross referencing results was removed, now it is replaced by a simpler text output. This is because it produced artifacts with the headers
- Added
--delayparameter to specify the delay between requests in milliseconds (default: 0) - only applicable when execution mode is sequential
- Implemented much better mechanism to keep to track of concurrent connections, as well vastly improved the control and execution model of limited max connections parallel pulse.
-b,--batchis not longer a valid parameter, now the parameter is-c(connections) to better reflect the real behavioral effect.- Implement better mechanism to keep track of content size, now it should require less resources and be available even when
--no-exportis used.
- Added
-t, --timeoutparameter to specify the timeout in milliseconds (default: -1 - infinity) - Fixed handling of timeouts as HttpClient hides the exception under
TaskCanceledExceptionleading to same output and handling as manual user cancellation, which was incorrect
- Added
-o, --outputparameter to specify the output folder (default: "results") - Updated automations to add ubuntu 20.04 support to address issues with glibc2.31
- Added
check-for-updatescommand
Initial release