I needed to add another .CSV data file for my main VUser that I am currently working on so I did a copypasta of a pre-existing DataBinding and DataSource. When I first created the coded web test I had added so much custom code that I deleted the web test and left only the coded web test. The fear was that I might accidently re-gen the code from the web test and over write my work. That in and of itself shouldn't be too bad since we all know to use a code repository, right? Of course we do.
Anyhoo, I made the code changes and was greeted by an error when my file couldn't be loaded. Huh? How rude!
I finally got it to work, but I wanted to note the way .CSV data binding works in a coded web test in greater detail just to remind myself next time this happens. There are plenty of examples of binding a .CSV file to a web test, but few on a pre-existing coded web test. So, here goes!
First we have to have a DataSource declaration that takes five parameters for a .CSV file:
1: dataSourceName
This is the name we are giving the DSN for our .CSV file.
2: providerName
In my case for a .CSV file I am using "Microsoft.VisualStudio.TestTools.DataSource.CSV"
3: connectionString.
For my use, this is the path with escaped back-whacks to the .CSV file. In my case, it is "c:\\data\\streetNames.csv"
4: DataBindingAccessMethod
For my use, I want a random selection of data from the .CSV file so I am using "Microsoft.VisualStudio.TestTools.WebTesting.DataBindingAccessMethod.Random"
5: tableName
I thought that I could provide my own table name to reference the .CSV file but that didn't work and was forced to use the form of
Here is what I am using for my entire Data Source:
1: [DataSource("streetNameDataSource",
2: "Microsoft.VisualStudio.TestTools.DataSource.CSV",
3: "C:\\Data\\streetNames.csv",
4: Microsoft.VisualStudio.TestTools.WebTesting.DataBindingAccessMethod.Random,
5: "streetNames#csv")]
Next, we have to define what column we are pulling from the .CSV file. In my case, it is a single column CSV file but we still have to have a column name defined. For my CSV file I am using the form of:
8<---------------------------
streetNames
"ABBINGTON"
"ALDRICH"
"ALEXANDER"
"ALICE"
"ALLISON"
"ALMOND"
"ALTA"
"AMHERST"
--------------------------->8
These are all the street names in Grover's Mill, NJ as reported by Melissa Data.
The DataBinding declaration that I am using takes four parameters.
1: dataSourceName
This is the DSN that we previously defined.
2: tableName
This is the tableName that we defined in the form of
3: columnName
This is the column name of the CSV that we are extracting. I've found this to be case insensitive.
4: contextVariableName
This is the key name of the entry that will be created in the Context for the iteration.
Here is what I am using for my DataBinding:
1: [DataBinding("streetNameDataSource", "streetNames#csv", "streetNames", "streetNames")]
Now with each iteration of the vuser I can reference the Context for the randomized street name, ala:
1: Debug.WriteLine("Street name is " + this.Context["streetNames"].ToString());
Works like a champ!
No comments:
Post a Comment