Update module go.k6.io/k6 to v0.51.0 #395
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v0.49.0
->v0.51.0
Release Notes
grafana/k6 (go.k6.io/k6)
v0.51.0
Compare Source
k6
v0.51.0
is here π! Some special mentions included in this release:Breaking changes
Transition browser APIs to Async
In the last release notes we mentioned this breaking change, and we wanted to remind and update you on the plan. In the next release (v0.52.0), most of the synchronous browser APIs will be migrated to be asynchronous (promisifying them). We expect this will affect most if not all of our users.
This breaking change will require you to add
await
in front of most of the browser module APIs. Without thisawait
you will witness undocumented and unknown behavior during the runtime. To make the migration simpler we advise that you work with the latest k6 type definitions.You can find a list of all the APIs that we expect to convert to async in a comment in issue browser#428.
Awaiting on something thatβs not a thenable just returns that value, which means you can add the
await
keyword today on the APIs that will become async to future proof your test scripts.Here are the reasons for making this large breaking change:
As a starting point, we have migrated a single API (the
tap
method), which you can find the details below that will help visualize the upcoming breaking changes.Browser
Tap
is now an async method grafana/xk6-browser#1268This release converts the
Tap
method in thebrowser
module into an asynchronous method. This change is necessary to ensure that the method can be used in async contexts and to align with the rest of the browser module's planned asynchronous API. To use theTap
method, you must now add theawait
keyword before the method call.Affected components:
locator.tap
page.tap
frame.tap
elementHandle.tap
See the following example for how to use the
Tap
method after this change:Before:
After:
k6/experimental/websockets
will not defaultbinaryType
to `"arraybuffer"'As part of the stabilization of the API it needs to become as close to the specification.
Early in the development the idea of adding
Blob
support as part was deemed feature creep and was dropped in favor of going with only"arraybuffer"
. But the specification defaults to returning binary responses asBlob
- which was another thing that was changed.While adding
Blob
is still on our radar, moving the default is always going to be a breaking change that we need to do to align with the specification.For this release there is now a warning that will be printed if
binaryType
is not set to"arraybuffer"
and a binary response is received. The warning will go away whenbinaryType
is set to"arraybuffer"
.In the next release the warning will become an error.
More info and place for discussion can be found in an this issue.
k6/experimental/grpc
is no longer available #β3530As the last step of the graduation process for the experimental gRPC module, we completely removed the module. It is now fully integrated into the stable
k6/net/grpc
module. So, if you haven't done this yet, replace your imports fromk6/experimental/grpc
tok6/net/grpc
.Deprecations
The following pull requests start the process to introduce breaking changes. They are currently starting to emit warning if their condition is hit, but they will turn to return errors in the future release.
It is recommended to use the suggested alternative, or to fix the script if you see the warning message.
require
expressions.New features
Introduction of
k6/experimental/streams
module #β3696This release of k6 introduces the new
k6/experimental/streams
module, which partially supports the JavaScriptStreams API, focusing initially on the
ReadableStream
construct.With the
ReadableStream
, users can define and consume data streams within k6 scripts. This is particularly useful forefficiently handling large datasets or for processing data sequentially in a controlled flow.
Expand to see an example of stream's usage
The following example demonstrates creating and consuming a simple stream that emits numbers until it reaches a predefined limit:
For more advanced examples, please head to the MDN Web Docs on the Streams API.
Limitations
Currently, users can define and consume readable streams. However, this release does not include support for byte readers
and controllers, nor does it include support the
tee
,pipeTo
, andpipeThrough
methods of theReadableStream
object.New features and updates of WebCrypto API support #β3714
This release brings support for asymmetric cryptography to the
k6/experimental/webcrypto
module. We added support of the elliptic curves algorithms ECDH (xk6-webcrypto#67) and ECDSA (xk6-webcrypto#69) algorithms along with new import/export key formats likespki
andpkcs8
.One of the newly added operations is
deriveBits
, which allows parties to generate a unique shared secret by using shared public and non-shared private keys.Expand to see an example of generating a shared secret for Alice and Bob.
The
sign
andverify
operations got support for ECDSA algorithm. Thesign
operation allows you to sign a message with a private key, while theverify
operation allows you to verify the signature with a public key.Other notable updates and fixes:
See webcrypto's module documentation for more details.
Timers globally available #β3589
setTimeout
,setInterval
and related clear functions have been part of the JavaScript ecosystem, probably for as long as it has existed.In the previous releases we stabilized and made them available through
k6/timers
module. While the module isn't going anywhere and might get more identifiers,setTimeout
is usually used without importing it. For this reason it is now globally available alongclearTimeout
,setInterval
andclearInterval
.No code needs to be changed, but you no longer need to import
k6/timers
to use this functionality.UX improvements and enhancements
asyncInvoke
method to thek6/net/grpc
module. It's a non-blocking version of theinvoke
method.Bug fixes
execution.test.options
from Init context.k6_SYSTEM_TAGS
environment variable.mappings
field is empty in the provided SourceMap.Maintenance and internal improvements
golangci-lint
in the contribution guide. Thanks @βyomek33 for your contribution!Future plans
Use Blob as default value for WebSocket.binaryType
As the changes in documentation mention,
binaryType
was by default set toarraybuffer
, now instead it is""
(empty string).In a not so remote future, instead, we expect to introduce and use Blob object.
WebCrypto graduation
WebCrypto got more features in the current release, and we expect to continue its expansion in the next iterations. Reaching a wider coverage will push WebCrypto module to being graduated as a stable module.
Streams API
In the not so distant future, we have plans to start using the Streams API in existing modules. Our first iteration being adding a
.readable
property to the already existing fs.File object.Improve user experience for Cloud related commands
In the near future, we intend to reiterate on
k6 cloud
and related commands to create a simplified and more ergonomic user experience.Remove experimental timers module
The
k6/experimental/timers
module is now part of the stable k6 API ask6/timers
and via the globally available functions. The next release will make the experimental import no longer available.v0.50.0
Compare Source
k6
v0.50.0
is here π!This release:
options.cloud
option.k6/timers
module.k6/experimental/webcrypto
module.Breaking changes
name
tag, which also overwrites theurl
tag with thename
value. This change makes it consistent with the logic that was implemented in k6 v0.41. Thanks, @βmkadirtan for contributing!Browser APIs to Async
In future releases, we are going to be moving most of the synchronous browser APIs to asynchronous ones (promisifying them). We expect this will affect most of our users, so we are posting this upfront before making the change. Here are the reasons for making this large breaking change:
You can find a list of all the APIs that we expect to convert to async in a comment in issue browser#428.
Awaiting on something thatβs not a thenable just returns that value, which means you can add the
await
keyword against APIs that will become async to future proof your test scripts.New features
Add support for uploading files from the browser module browser#1097, browser#1244
You can now upload files using the available input forms on the website under test. The new API is
setInputFiles
which can be called from apage
,frame
orelementHandle
types. It can upload one or more files encoded in the test script. To upload files from the local file system, work with the experimental fs module.Expand to see the examples.
For the following examples, we will use the HTML file:
Uploading a file can be achieved with the following script:
Uploading multiple files can be done with the use of an array:
Thanks to @βbandorko! π π
Introducing options.cloud #β3348, #β3407
In this release, we introduce a new way of defining cloud options. From now on, you can use
options.cloud
instead ofoptions.ext.loadimpact
.To migrate, you can move the
loadimpact
object to the root of theoptions
object and rename it tocloud
. For example:All scripts with legacy
options.ext.loadimpact
will continue to function as before. There's no planned sunset date for the legacy option, but we highly encourage usingoptions.cloud
going forward. For more details about cloud options, refer to Cloud options.Timers API becomes part of the k6 core #β3587
With this release, the timers API is no longer experimental and can be imported as
k6/timers
instead of ask6/experimental/timers
. The later will be supported untilv0.52.0
.You can also contribute to the discussion on making the current timer exports globally available in #β3589, or just give it a π.
JSON Web Key support in
k6/experimental/webcrypto
module webcrypto#61The experimental webcrypto module now supports the JSON Web Key (JWK) format, using the
importKey
andexportKey
methods.This allows you to import and export keys in the JWK format for the supported algorithms.
UX improvements and enhancements
evaluate
APIs.testRunId
into thewindow.k6
object for external applications to query (for example, Grafana Faro).Browser Context Isolation browser#1112
With this release, we have overhauled and (tremendously) improved the performance and stability of the browser module. It's now possible to run tests with a larger number of VUs concurrently without any performance issues. Previously, when running tests with multiple VUs concurrently, each VU's browser context would attach to the pages from the other VUs' browser contexts. This led to unexpected behavior and performance issues and, to an extent, reduced the module's capability to run multi-VU tests.
Bug fixes
options.hosts
.DocumentFragment
.Maintenance and internal improvements
browser#1173, browser#1175, browser#1179,
browser#1183, browser#1186, browser#1188,
browser#1189, browser#1190, browser#1191,
browser#1193, browser#1163, browser#1205,
browser#1217 refactors internals to improve stability.
browser#1214, browser#1216 refactors to work with errors.Join and sets the minimum Go version to 1.20.
codeql
GitHub action to v3.newTestSetup
rely on k6's modulestest.Configuration
π Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
π¦ Automerge: Disabled by config. Please merge this manually once you are satisfied.
β» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
π Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate. View repository job log here.