Data parameterization is the process of turning test values into reusable parameters, for example, through variables and shared arrays.
This page gives some examples of how to parameterize data in a test script. Parameterization is typically necessary when Virtual Users (VUs) will make a POST, PUT, or PATCH request in a test. You can also use parameterization when you need to add test data from a separate file.
Parameterization helps to prevent server-side caching from impacting your load test. This will, in turn, make your test more realistic.
Performance implications of SharedArray
Each VU in k6 is a separate JS VM. To prevent multiple copies of the whole data file, SharedArray was added. It does have some CPU overhead in accessing elements compared to a normal non shared array, but the difference is negligible compared to the time it takes to make requests. This becomes even less of an issue compared to not using it with large files, as k6 would otherwise use too much memory to run, which might lead to your script not being able to run at all or aborting in the middle if the system resources are exhausted.
For example, the Cloud service allocates 8GB of memory for every 300 VUs. So if your files are large enough and you are not using SharedArray, that might mean that your script will run out of memory at some point. Additionally even if there is enough memory, k6 has a garbage collector (as it's written in golang) and it will walk through all accessible objects (including JS ones) and figure out which need to be garbage collected. For big JS arrays copied hundreds of times this adds quite a lot of additional work.
A note on performance characteristics of SharedArray can be found within its API documentation.
From a JSON file
From a CSV file
k6 doesn't parse CSV files natively, but you can use an external library, Papa Parse.
You can download the library and import it locally like this:
Or you can grab it directly from jslib.k6.io like this.
Here's an example using Papa Parse to parse a CSV file of username/password pairs and using that data to login to the test.k6.io test site:
Retrieving unique data
It is often a requirement not to use the same data more than once in a test. With the help of k6/execution, which includes a property scenario.iterationInTest, you can retrieve unique rows from your data set.
⚠️ Multiple scenarios
scenario.iterationInTest property is unique per scenario, not the overall test. That means if you have multiple scenarios in your test you might need to split your data per scenario.
Alternatively, if your use case requires using a unique data set per VU, you could leverage a property called vu.idInTest.
In the following example we're going to be using per-vu-iterations executor to ensure that every VU completes a fixed amount of iterations.
Generating data using faker.js
The following articles show how to use faker.js in k6 to generate realistic data during the test execution: