Version 0.47.0 release notes
k6 v0.47.0
is here 🎉! This release includes:
Deprecations
- #3347 The built-in
statsd
output option has been deprecated, and users should use the xk6-output-statsd extension instead. See #2982 for future plans. - #3288 Loading remote modules now requires users to prepend them with
https://
. Before, k6 would try to resolve importing remote modules by prependinghttps://
if it was missing. This behavior has been deprecated and will be fully removed in the next release (v0.48.0).
New features
Add gRPC’s binary metadata support #3234, xk6-grpc#46
The k6 gRPC modules (k6/net/grpc
and k6/experimental/grpc
) now support handling binary metadata that uses the -bin
postfix, according to the gRPC specification.
let resp = client.invoke(
'grpc.testing.TestService/EmptyCall',
{},
{ metadata: { 'X-Load-Tester-bin': new Uint8Array([2, 200]) } }
);
Thanks to @sapphire-janrain for the contribution!
Add gRPC’s reflection metadata support #3343, xk6-grpc#46
The k6 gRPC modules (k6/net/grpc
and k6/experimental/grpc
) now support adding metadata to reflection requests by using a new connection parameter reflectMetadata
.
Higher precision for Trend metrics in Grafana Cloud k6 #3302
Grafana Cloud k6 is now able to store and visualize Trend metrics up to 3 digits of precision for decimal numbers.
Docker support for browser-based tests #3199
k6 is now publishig Docker images that include Chromium web browser. This allows k6 users to run tests that use Browser API without having to install Chrome first. Check the “A note on running browser tests” section of the Overview page on DockerHub for details.
Docker images for ARM64 architecture #3320
The k6’s release process now builds and pushes dedicated Docker images for ARM64. Check k6’s tags page on DockerHub for details.
New authentication methods and HTTP headers API for Prometheus remote write output xk6-output-prometheus-remote#143, xk6-output-prometheus-remote#145, xk6-output-prometheus-remote#147
The experimental Prometheus remote write output now supports two new authentication methods: Bearer token and TLS certificates. Check out the documentation to learn more about how to define them using the new environment variables.
We’ve also added the K6_PROMETHEUS_RW_HTTP_HEADERS
that defines a new and more convenient way to set custom HTTP headers to pass through each flush metrics’ request.
Improved the browser module’s cookie API
The browser module now provides a more complete and robust API for handling cookies. The cookie API was stabilized by defining a new Cookie
class (browser#1008, browser#1030) that can be used while creating and retrieving cookies. This enabled us to add a new browserContext.cookies([urls])
method (browser#1005) that returns all cookies from the current browser context. The new API also supports filtering cookies by URL (browser#1016).
That led to fixing a bug where the expires
field was not being set correctly while adding cookies using the context.addCookie()
method (browser#1031). Lastly, the existing context.clearCookies()
method was fixed to clear all cookies from the current browser context (browser#1040).
const context = browser.newContext();
context.addCookies([
{ name: 'foo', value: 'bar', url: 'https://test.k6.io' },
{ name: 'baz', value: 'qux', url: 'https://grafana.com' },
]);
const cookies = context.cookies('https://test.k6.io');
console.log(cookies.length); // 1
console.log(cookies[0].name); // foo
console.log(cookies[0].value); // bar
context.clearCookies();
console.log(context.cookies.length); // 0
Add support for browser module’s page.on('console')
browser#1006
Allows users to register a handler to be executed every time the console
API methods are called from within the page’s JavaScript context. The arguments passed into the handler are defined by the ConsoleMessage class.
page.on('console', (msg) => {
check(msg, {
assertConsoleMessageType: (msg) => msg.type() == 'log',
assertConsoleMessageText: (msg) => msg.text() == 'this is a console.log message 42',
assertConsoleMessageArgs0: (msg) =>
msg.args()[0].jsonValue() == 'this is a console.log message',
assertConsoleMessageArgs1: (msg) => msg.args()[1].jsonValue() == 42,
});
});
page.evaluate(() => console.log('this is a console.log message', 42));
For a full list of changes, including UX improvements and bug fixes, refer to full release notes.