16
votes

I'm using a CSV dataset config element, which is reading from a file like this:

abd
sds
ase
sdd
ssd
cvv

Which, basically, has a number of 3 letter random string.

I'm assigning them to a variable called ${random_3}.

Now, I want to use values from this list multiple times within the same thread, but each time I want to move to next. For example, I want the first sampler to use abd, the 2nd to use sds, then ase, etc. But if I just use ${random_3} then only the first one (abd) is used wherever it's referred to. Is there a way I can specify to loop through the values from the CSV dataset within a thread?

4

4 Answers

34
votes

CSV Data Set Config works fine for this. All of the values need to be in one column in the file and assign them to the variable as described.

Create a Thread Group that has as many threads for as many users as you want iterating over the file (i.e. acting on the HTTP Request). Assuming 1 user, set the number of threads to 1, loop count to 1.

Inside the thread group you will need to add a Loop Controller or a While Controller. You indicated that you want to loop through the whole data set. If you add a loop controller you will want to set the Loop Count to 6, since you have 6 values, one for each value. Alternately (and easier for processing the whole file) add a While Controller instead of a Loop Controller and set ${random_3} as the while condition.

It is important to set the CSV Data Set Recycle on EOF and Stop Thread on EOF values correctly. If you plan to iterate over the file more than once you must set "Recycle on EOF" to True (i.e. instruct jMeter to move back to the top of the CSV file). Set "Stop Thread on EOF" to False if you are using a loop controller, true if you are using a while controller and want to stop after reading the whole csv dataset.

Add the CSV Data Set Config as a child of the controller along with the HTTP Request. View the results using any listener you want to use.

3
votes

CSV data set moves through file only when each thread iteration starts.

You can use Raw Data Source PreProcessor to move throuhg file with each request, that's your solution.

1
votes

Note that you need to have the values for a given variable name in the same column.

Doing: abd sds ase sdd ssd cvv is very different from

abd 
sds 
ase 
sdd 
ssd 
cvv

The first has 6 variables with one value each; the second has one variable with 6 values.

1
votes

Update:

CSV Dataset does not seem to be a suitable too for this purpose.

I ended up creating some simple beanshell scripts that create a random 1, 2, or 3 letter word as needed, and also another one that reads a random words from a large set. This way, each time they are called they give a random value. They are called like this:

${__BeanShell(getRandomStr(3))}

or

${__BeanShell(getRandomWord())