JMeter use Variable as CSV File Location - csv

In my JMeter test, I have a Loop Controller nested inside a few other modules with contains a CSV Data Set Config. I also have a CSV Data Set Config in the top of my Thread Group that reads from a CSV to get a file location. I was to use this file location in the nested CSV Data Set Confing to grab the CSV from that location and loop through that one. An error is being thrown because all the CSV files are loaded at once, in the beginning of the test. Is there a way to delay the loading of a CSV so that I can ensure the file path variable has already been set?

You will not be able to use CSV Data Set Config the way you describe. All the config elements get loaded before the test begins.
You can use Beanshell Pre/Post Processor/Sampler.
I had a requirement to load csv file in CSV Data set config of my JMeter script- Name of the csv file can be anything. I run my script with ANT. So i get the name from ANT and pass it to JMeter via a property. CSV data set config uses the property to load the CSV. Thought of sharing this as It might help you as I am not sure of your exact requirement.
EDIT:
You can have a look # __CSVRead(), __StringFromFile() functions.
http://jmeter.apache.org/usermanual/functions.html

Related

JMeter CSV Read and group the number of lines read

I have encounter a challenge where I have to read a CSV file and read it till a defined variable size limit( BATCH_SIZE). Once the no of lines from CSV has been read then send it to different AWS API. As my CSV file size can be anywhere 1Gb to 2Gb, therefore I am avoiding to use JSR223 CSV file read.
I want to know how can I can achieve it with JMeter and CSV Data Set Config.
Theoretically you can achieve it using CSV Data Set Config by putting it under the Loop Controller and using your BATCH_SIZE as the loop count.
Another option is importing your CSV file to the RDBMS and use JMeter's JDBC Request sampler for accessing the data
Another solution could be by placing the CSV Data Set Config under a While Controller.
${__groovy(vars.get("__jm__WC__idx").toInteger()< vars.get("BATCH_SIZE").toInteger())}

How to read csv file using CSV Data Set Config at once in Jmeter (instead of line by line)

I need to get whole text from csv file using CSV Data Set Config at once.
You cannot, if you want to load the whole file into certain place in the Test Plan or into a JMeter Variable you can use __FileToString() function and provide the relative or full path to the CSV file like:
${__FileToString(/path/to/your/file.csv,,)}
if you want to save the file into the variable just provide the variable name as the last parameter:
${__FileToString(/path/to/your/file.csv,,foo)}
Check out Apache JMeter Functions - An Introduction article to learn more about JMeter Functions concept

How can I pass multiple CSV files in a directory with same column headers to single REST API in JMETER and test with 1000 users

Test scenario: The folder contains multiple CSVs. Columns are same in all the CSVs.I have to pass multiple csv files one after the other to the single REST API (GET CALL).
Each user (Total 1000 users) should get assigned a set of records/rows from csv file currently in use.
I am new to the JMeter and finding a solution using the CSV Data Set Config. And I realize I could not pass multiple csv files using this.
I also see that __CSVRead() function but I could not pass dynamically the csv file using BeanShell scripting.
Can someone please help me with this?
The CSV file names from the folder can be read one by one using Directory Listing Config plugin
Depending on the CSV file nature you might want to use either __CSVRead() or __StringFromFile() functions directly in your HTTP Request sampler, you don't need to go for any scripting.

How can i pass files to a CSV Sampler in JMeter

I have a directory with CSV files. each file contains a list of GET requests I'd like to make with JMeter. What I'd like to do is read all the files in a directory, and then loop through each CSV to send the requests in JMeter. The number of files isn't consistent so I don't want to hard code the file names into CSV samplers.
So in effect I'd like to read all the files in the directory and store the files in an array variable. The loop through the array and send the CSV file to the CSV sampler which will in turn read the CSV file and pass the content to an HTTP Request sampler to send the GET requests.
I created a beanshell script to read the files in the directory and store them in an array, but when I try to pass this to the CSV config element, I get errors stating the variable doesn't exist.
I've tried another beanshell script to read the file and pass the lines to an HTTP request Sampler as a variable, but the issue was, it would store all the file contents in memory per thread.
I'd like to know the best approach to read the files, send the requests and use the response data to generate reports
You will not be able to populate CSV Data Set config using Beanshell as CSV Data Set Config is a Configuration Element and according to Execution Order user manual chapter Configuration Elements are executed before anything else.
Since JMeter 3.1 you should not be using Beanshell, it is recommended to switch to JSR223 Elements and Groovy language
I would recommend going for Directory Listing Config plugin, it scans the provided folder (in your case with CSV files) and stores the found paths to files into a JMeter variable
So you can use the Directory Listing Config in combination with __StringFromFile() or __CSVRead() functions and that should be more or less good way of implementing your requirements.

How to pass variable as file name to jmeter CSV Data set Config?

I am using multiple csv files in one thread for comparision purpose.
Here first CSV Data set Config returns the file names
1.csv
5.csv
1000.csv
now I want to pass above file name to second CSV Data set Config
C:\\Softwares\\Installed\\jmeter-3.0\\bin\\TestData\\files\\${filename}
Is it possible in jmeter? can any one help me to resolve the problem.
Thanks,
Vijay
CSV Data Set Config is getting initialized before any JMeter Variable therefore your ${filename} will never be resolved and you will be getting "File not found" errors.
The options are in:
Consider using __CSVRead() function instead of CSV Data Set Config
Switch to JMeter Properties instead of JMeter Variables.
Change ${filename} to ${__P(filename)} (see __P() function documentation for syntax)
Define filename property. It can be done in 2 ways:
Via user.properties file. Add the next line to the file:
filename=C:\\Softwares\\Installed\\jmeter-3.0\\bin\\TestData\\files\\1.csv
JMeter restart will be required to pick up the property
Via -J command-line argument:
jmeter -Jfilename=C:\Softwares\Installed\jmeter-3.0\bin\TestData\files\1.csv
See Apache JMeter Properties Customization Guide for more information on JMeter properties and ways of setting, getting and overriding them