It's once again the end of a release cycle for us here at k6, and this time we're happy to announce that k6 v0.33.0 is here! 🎉
The v0.33.0 release is a small one, mainly containing a bunch of minor bugfixes and enhancements, but is also laying the groundwork for some major new features like the upcoming k6/execution API in k6 v0.34.0.
To read the full release notes, see the GitHub Release for v0.33.0.
Thank you
First of, before we go into the details of the release, we'd like to extend a thank you to the external contributors that have contributed to this release. A big thank you, in no particular order, from all of us here at k6 goes out to:
🙏🏼
Groundwork for v0.34.0
We have added the necessary k6 core changes for providing execution information to scripts. This was the groundwork for the extended replacement of the __VU and __ITER execution context variables we plan to introduce.
The new API will be able to return other information as well, including which scenario the current iteration is in, and the number of the current VU/iteration globally across all k6 instances, in the current scenario, etc.
These APIs are still not available to JS scripts, but we plan to expose them via the k6/x/execution xk6 extension for now and iterate on them in the following weeks, releasing a stable version in k6 v0.34.0.
Enhancements and UX improvements
- The help message for the --verbose flag, as well as the statsd warning message were improved.
- The noColor k6 option and the current UI state are now propagated to the handleSummary() function. The state object has the isStdErrTTY, isStdOutTTY and testRunDurationMs keys.
- The error message when an HTTP request times out was improved (previously it was context deadline exceeded) and it now has an error_code value of 1050.
- Script errors will no longer have the confusing GoError prefix in their error messages.
- All custom metric objects now have a name property.
- Top-level JS arrays will now be properly encoded when sent in the body of a application/x-www-form-urlencoded request.
Bugs fixed!
- The minIterationDuration option was uninterruptible and could delay the stopping of a scenario even after gracefulStop had expired.
- The error_code detection for HTTP/2, x509 and TLS (and potentially others) was unreliable.
- k6 used to panic when responseType was binary, but there was no response body actually returned, e.g. when there was an HTTP error.
- The throw option was not respected when there was an invalid URL.
- k6 would return an exit code of 103 instead of 107 for script errors when initializing non-service VUs.
- Deleted library versions from cdnjs could previously cause a panic.
- The correct error message for missing files was not shown when the filename contained spaces.
- The regular expressions for the github and cdnjs "magic" loaders were slightly wrong.
- A potential (harmless) data race could have been caused by an unintentional copying of a data struct.
- The segmentation of small ramping-arrival-rate scenarios was not optimal.
Internals
- The default end-of-test summary is now completely generated by the same k6-summary JS code that is hosted on jslib.k6.io (#1975). That PR also improved the k6 TTY detection and removed a few Go dependencies and code hacks, though it also caused us to bump the minimum required Go version for compiling k6 to Go 1.16 (because of its usage of go:embed).
- Arrival-rate executors will no longer create a new goroutine for every new iteration.
- We have enabled GitHub's CodeQL checks for the Go parts of the repo.
Breaking changes
- The k6 cloud exit code for a failed cloud test was changed from 99 to 97.
- The default value of K6_STATSD_TAG_BLOCKLIST and K6_DATADOG_TAG_BLACKLIST is now vu,iter,url.