1
votes

Using JMeter to support functional API testing and have run across a problem with reading data from a CSV file. The data from the file is used in building a POST data body which contains something like this:

"wibbles" : ${wibble-var},

${wibble-var} is read from a CSV file and has the format :

["wibble1","wibble2","wibble3"]

... there are over 1000 wibble values in the list.

If "wibbles" : ["wibble1","wibble2","wibble3"]... is hard-coded into the POST body, then JMeter is happy, builds the POST request and does the business, but it's proved impossible to create a CSV file with even the 3 value example above, that JMeter will parse. JMeter skips the thread containing the 'CSV read' without building the POST request or sending it, so there's no response to examine, and a Debug Sampler is similarly skipped. I've heard rumours that doubling up the quotes can work but haven't been able to find the right syntax. Can anyone throw any light on this issue? Thanks

3

3 Answers

1
votes

Double quotes will work if you can get "wibble1,wibble2,wibble3" & if you set Allow quoted data to true in CSV data set config

You can get this value and then use beanshell preprocessor to convert to the format "wibble1","wibble2","wibble3".

If you want to get in this format "wibble1","wibble2","wibble3" directly, you can use \t as the delimiter & modify the data in the CSV file accordingly.

0
votes

I would go for the following options:

  1. If your "wibbles" are a single string which you need to pass a a JSON Array it might be a lot easier to access them via __StringFromFile() or __FileToString() functions like:

    "wibbles" : ${_StringFromFile(/path/to/file/containing/wibbles,,,)},
    
  2. If you need to access individual "wibbles" and your CSV file is basically a JSON file:

    • Add HTTP Request Sampler to your test plan (before one which sends these "wibbles") and configure it as follows:

      • Protocol: file
      • Path: c:/testdata/yourfile.csv
    • Add JSON Path PostProcessor and use a JSON Path query to store the "wibbles" into a JMeter Variable(s)
0
votes

Trial and error led to the following solution.

The format of the single data variable I needed to parse is ["value1","value2","value3"] (i.e a JSON array.) and this is exactly what the CSV file contained (with a header name of course on the first row), including the [ and ] brackets.

I modified the parameterised POST body to:

"wibbles": [${wibble-var}], -- that is, I moved the square brackets out of the CSV file so that the CSV file now just contained the quoted elements of the array:

"value1","value2","value3" etc

I then set the delimiter in the CSV Data Set Config to | And Allow Quoted Data to FALSE. <--- This was a bit counter intuitive but without it JMeter would not read the whole comma separated list of 2000 quoted strings as a single variable.

With these changes in place the script executed correctly.

Thanks again for the responses, I will definitely look at the __String functions mentioned.