Unique VU index per scenario or data parameterization in multiple scenarios

Hey, I have a question which as far as I see, was already asked long time ago here: Shared state or unique sequential vu index per scenario

But it looks like there’s still no answer) Or maybe I just couldn’t find it.
I need to use data parameterization per scenario. Using VU indexes works fine if working with 1 scenario. But when it comes to several scenarios - I couldn’t find the answer how to do this.

Let’s say I have 4 scenarios. Each scenario uses 25 users. So in the setup() I create arrays of users and share them. It’s not a problem to access the needed array itself. The question is - how do I make each VU working with only 1 user from the shared array? Especially assuming those VU indexes are random and scenario 1 might get VU index 90 etc. So I can’t use VU index to access the array. Some VU index per scenario would work but it looks like there’s no any.

Or maybe there is a way to read some file per scenario and use only 1 line per virtual user inside that scenario? It’s possible in jMeter but I can’t figure out how to do this in K6.

Please help

Hi @eugene_tst,
Welcome back to the community forum :tada:

did you try to use exec.scenario.iterationInTest index as explained in the Data Parameterization guide?

If it is not enough, can you clarify better your case, please?

1 Like

Hi, @codebien , the scenario.iterationInTest is not what I needed because it’s not connected to the VU itself. I ended up using 2 instances of k6 for what I need…

The case is the following:
First of all, I’m using more than 1 scenario (let’s say, 2 scenarios).
I register users during the setup and put them to arrays so each array is made for it’s own scenario (scenario a1 users might have some own properties).
What I need is being able to work with exact array for exact scenario (array a1 is used in scenario a1 only). As VUs indexes are allocated randomly, I can’t rely on the VU index and use it as an array index. Of course, I could use iteration indexes in some simple cases but in my specific situation this would lead to re-login each user which is absolutely not what I wanted. Having some kind of scenario VU indexes would help me because I need to use each VU with the same app user during the whole run.

Also, being able to modify the shared objects would help here so I could use 1 shared array and set needed properties during the test runtime but it’s not possible, I can only read the shared data from setup and not modify it…

Hi @eugene_tst,
sorry for the late reply but I was on PTO.

Can you share the code or explaing how you’re setting the arrays? Do you use the Setup data? What do you put in the arrays (e.g tokens)? How many items do you set?

I’m not getting why you reference exec.scenario.iterationInTest as a per-VU index as the API report it is a per-scenario index.

Can you clarify why in your case it would re-login the users?

This is typically achieved using an external database. For example, Redis is a common solution for this kind of problem. You can interact with a Redis server using the dedicated k6 ihttps://k6.io/docs/javascript-api/k6-experimental/redis module.

1 Like