Ask Learn
Preview
Please sign in to use this experience.
Sign inThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Frequently, we have to repeat a test with different data values. This ‘data-driving’ is made very easy in Coded UI Test. In the Tutorial, we created a Coded UI Test to verify the addition of two numbers in the calculator. Let us now see how we can convert it into a data-driven test.
Step 1:- Create the Coded UI Test – See Tutorial
Step 2:- Create the data sets. Coded UI Test supports multiple data sources. The data sets may be defined in a CSV (comma separated values) file, an Excel worksheet, an XML file, database table or from a test case on TFS. For this walkthrough, we will use a CSV file with the following data.
Add1 |
Add2 |
Sum |
7 |
2 |
9 |
5 |
2 |
7 |
3 |
2 |
5 |
Step 3:- Add the Data Source binding in Coded UI Test.
NOTE: In Visual Studio 11 Beta, the Test View Window and Data Source Wizard are no longer available.
You will have to insert the DataSource attribute directly in the code in the line immediately above your testmethod.
Sample Data Source strings are given below. Copy them to your code and make the necessary customizations.
Data Source Type | Data Source attribute |
CSV | [DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\data.csv", "data#csv", DataAccessMethod.Sequential), DeploymentItem("data.csv"), TestMethod] |
Excel | DataSource("System.Data.Odbc", "Dsn=Excel Files;Driver={Microsoft Excel Driver (*.xls)};dbq=|DataDirectory|\\Data.xls;defaultdir=.;driverid=790;maxbuffersize=2048;pagetimeout=5;readonly=true", "Sheet1$", DataAccessMethod.Sequential), TestMethod] |
Test Case in TFS | [DataSource("Microsoft.VisualStudio.TestTools.DataSource.TestCase", "https://vlm13261329:8080/tfs/DefaultCollection;Agile", "30", DataAccessMethod.Sequential), TestMethod] |
XML | [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\data.xml", "Iterations", DataAccessMethod.Sequential), DeploymentItem("data.xml"), TestMethod] |
SQL Express | [DataSource("System.Data.SqlClient", "Data Source=.\\sqlexpress;Initial Catalog=tempdb;Integrated Security=True", "Data", DataAccessMethod.Sequential), TestMethod] |
Other types | See this MSDN article |
If you are using Visual Studio 2010, continue with the other actions in Step 3.
If you are using Visual Studio 11 Beta, skip to Step 4.
a. Open the Test View window (from Test -> Windows -> Test View
b. Choose the Coded UI Test that we created and from the context menu click Properties.
c. In the Properties Window click on the button in Data Connection String property to create a new Data Connection.
d. This brings up the New Data source Wizard
e. Choose CSV file and click Next
f. Select the CSV file that we created in Step 2. A preview of the contents is shown in the Wizard.
g. Click Finish. A prompt comes up to add the Data file into the project.
h. Click Yes.
i. A Data Source attribute is added to the Coded UI Test.
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\data.csv", "data#csv", DataAccessMethod.Sequential), DeploymentItem("data.csv"), TestMethod]
Step 4:- Use the data in the Coded UI Test.
a. Open the Coded UI Test file. Add the following snippet of code before the invocation of this.UIMap.TestAdd().
this.UIMap.CalulatorWindow.Item7Window.item7Button.SearchProperties[WinProperties.Button.Name] = TestContext.DataRow[“Add1”].ToString();
This modifies the first button click action in the test. It will now search for a button whose value will be picked from the CSV file.
NOTE: Test Context object contains a handle to all the Data that is present in the Data Source. We can reference it with the column name (e.g:- “Add1”)
b. Similarly add the following code snippet which modifies the second button click in calculator
this.UIMap.CalulatorWindow.Item2Window.item2Button.SearchProperties[WinProperties.Button.Name] = TestContext.DataRow[“Add2”].ToString();
c. Add the following line before the invocation of this.UIMap.AssertSum()
this.UIMap.AssertSumExpectedValues.ItemEditText = TestContext.DataRow[“Sum”].ToString();
This now verifies the result of the action from the CSV file.
Step 5:- Run the data driven test.
Right click inside the Coded UI Test Method and choose ‘Run Tests’
The test will run 3 times (as many iterations as there rows in the Data Source). The Test Results will show each iteration details.
You have seen in this walkthrough how to create a data driven tests. If the Test Case is authored in Camano, there is an even simpler way to make it data-driven. More about this workflow in the next article.
Anonymous
March 16, 2009
PingBack from http://blog.a-foton.ru/index.php/2009/03/17/data-driving-coded-ui-tests/
Anonymous
March 16, 2009
Thank you for submitting this cool story - Trackback from DotNetShoutout
Anonymous
June 22, 2010
This Blog is really useful....it worked for me..
Thanks a lot..:)
Anonymous
July 20, 2010
Can you pls tell me how to connect to SQL database and update/add rows by running update scripts using coded ui test?
Thanks,
Neha
Anonymous
July 29, 2010
Hi,
When I'm trying to add csv file, after pressing Finish, there is error message:
The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))
Was trying to clean Temporary ASP.NET folders, and reinstall .NET framework, but it doesn't help.
Can anyone help?
Anonymous
August 02, 2010
Hi,
I am getting UIMap error.
Please advise.
Anonymous
September 21, 2010
The comment has been removed
Anonymous
September 28, 2010
Hi Matthew,
Please help me out resolving the below queries on coded UI testing
Anonymous
October 21, 2010
Hi Mathew,
First of all, I want to thank you for writing this blog, which is very useful.
I have a question that refers to data driven Coded UI testing. Is it possible to use variable in "DataSource" attribute in any way because I don't want to use hard coded values. For example, I have this attribute:
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.TestCase", "http://tfs:8080/tfs/CollectionName;Test", "12", DataAccessMethod.Sequential), TestMethod]
It works fine, but I'd like to put some variable inside "DataSource" attribute to replace this hard coded string: "http://tfs:8080/tfs/CollectionName;Test". It should look like this:
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.TestCase", serverName, "12", DataAccessMethod.Sequential), TestMethod]
As you can see serverName variable is used instead of hard coded value that can be placed to some configuration file or database.
Can I do that?
If I can't, what' the best way to manage it? In this particular case I need to use test case as data source. Can I use test case as data source programmatically instead of using "DataSource" attribute?
Thank you in advance.
Regards,
Goran
Anonymous
January 10, 2011
How to bind XML data source to Coded UI Test?
Anonymous
February 02, 2011
@svetlostvostoka
Have a look here to see how to make this DB connection string come from a config file (it applies to VS2005) but I'm assuming it's a similar process now.
blogs.mantiso.com/.../14
Please sign in to use this experience.
Sign in