In my web application I have a screen used to edit variables. Some of these are structured in an easy to automate way, however a few are a bit too dynamic and need more intelligence in the test. Something that I am struggling to get my brain around currently and need a bit of cloud thinking!
For example, I have a variable type called Distribution. This variable defines the percentage of items that go down a specific path. It can have anything between 2 and 20 paths and the total of all the path percentages must equal 100.
The basic structure that I've come up with for the test is shown in the attachment below. What I want to do is have a data source on the "Distribution" test case which can define between 1 and n distribution variables which I want to update. I figure that including the variable details within that data source would get quite difficult so I then want a separate data source for the "Paths" test case which actually has the details of each path for a variable. The way I figure it though I can't actually assign the CSV file to the "Paths" test case as that would limit me to just one varibale. Is it possible to assign a CSV as a data source for a test case whilst it's actually running?
Does that make any sense? Can anyone provide thoughts on the best way forward with this or will I need to limit it to one variable per run?
Thanks in advance for any help or suggestions!
Dynamically assigning data sources
-
- Posts: 78
- Joined: Tue Dec 04, 2012 2:30 pm
Dynamically assigning data sources
You do not have the required permissions to view the files attached to this post.
-
- Posts: 78
- Joined: Tue Dec 04, 2012 2:30 pm
Re: Dynamically assigning data sources
Well as it turns out I haven't found a solution that is exactly what I want...but nobody else seems to have any ideas either!
Anyway, What I've got is a User Code module I can feed specific csv files into for each of the distribution variables and then loops round. Code Below.
Not sure if this will help anyone but since its the best I've got I thought I'd share!
Anyway, What I've got is a User Code module I can feed specific csv files into for each of the distribution variables and then loops round. Code Below.
Not sure if this will help anyone but since its the best I've got I thought I'd share!
Code: Select all
string variableName = "bob";
int i = 0;
try {
// Create CSV Connector and output for rows and cols
Ranorex.Core.Data.CsvDataConnector csvConnector = new Ranorex.Core.Data.CsvDataConnector("myCSVConnector", "C:\\Users\\Public\\Documents\\" + variableName +".csv", true);
Ranorex.Core.Data.ColumnCollection col;
Ranorex.Core.Data.RowCollection row;
csvConnector.LoadData(out col, out row);
// Create list of cells in dist edit window
DivTag myDivTag = repo.website.FrmChildMain.Ctl00ContentPlaceHolder1DivGrdPCD;
IList<Ranorex.InputTag> myCells = myDivTag.FindDescendants<Ranorex.InputTag>();
foreach(Ranorex.Core.Data.Row dataRow in row)
{
for (i = 0; i < count; i += 2) {
if (dataRow["branchName"].ToString() == myCells[i].TagValue.ToString())
{
myCells[i+1].Click();
myCells[i+1].PressKeys("{Home}{Shift down}{End}{Shift up}");
myCells[i+1].PressKeys("{Back}");
myCells[i+1].PressKeys(""+dataRow["branchPercentage"].ToString());
}
}
}
} catch (Exception) {
}
Re: Dynamically assigning data sources
I use SQL Connectors and SQL Server Express for all my data.
I create stored procedures in SS and just call them in my tests.
When I need to make a connector dynamic, I just change the connector's SQL query string right before the test case that uses that connector.
This is pretty simple and I don't have to manipulate a lot of data directly.
The module that I use to change the connector takes as Test Variables any parameters that I am passing to the sql query, so I can then bind those to the parent test case's (or global params as needed) data so it is all dynamic.
So, say I need to loop through customer orders, but only for the current customer:
I would have 2 stored procedures (SPs) that take default parameters so they would always return null if nothing was passed, which allows me to skip test cases if there is no matching SQL data:
Get_CustomerInfo (returns CustomerID, FirstName, LastName, EmailAddress, Password, etc.)
Get_CustomerOrderInfo_for_CustomerID (returns CustomerOrderID, Date, Store, etc.)
I would then make 2 connectors:
CustomerInfoSQL
CustomerOrderInfoSQL
Both would call the SPs without parameters so they would default to no records returned, but would allow for data binding in Ranorex.
Then I would have a UserCode Module:
Set_CustomerOrderInfoSQL_for_CustomerID
It would have CustomerID as a Test Variable (right-click the code and select "Add Test Variable") that defaults to "0".
In the Run() method I would add the following to the last line:
Which in turn calls the following:
It takes a bit, but once you get it working I think it is much easier to work with.
I create stored procedures in SS and just call them in my tests.
When I need to make a connector dynamic, I just change the connector's SQL query string right before the test case that uses that connector.
This is pretty simple and I don't have to manipulate a lot of data directly.
The module that I use to change the connector takes as Test Variables any parameters that I am passing to the sql query, so I can then bind those to the parent test case's (or global params as needed) data so it is all dynamic.
So, say I need to loop through customer orders, but only for the current customer:
I would have 2 stored procedures (SPs) that take default parameters so they would always return null if nothing was passed, which allows me to skip test cases if there is no matching SQL data:
Get_CustomerInfo (returns CustomerID, FirstName, LastName, EmailAddress, Password, etc.)
Get_CustomerOrderInfo_for_CustomerID (returns CustomerOrderID, Date, Store, etc.)
I would then make 2 connectors:
CustomerInfoSQL
CustomerOrderInfoSQL
Both would call the SPs without parameters so they would default to no records returned, but would allow for data binding in Ranorex.
Then I would have a UserCode Module:
Set_CustomerOrderInfoSQL_for_CustomerID
It would have CustomerID as a Test Variable (right-click the code and select "Add Test Variable") that defaults to "0".
In the Run() method I would add the following to the last line:
Code: Select all
MYLIB.Data.SetupSqlDataConnector("CustomerOrderInfoSQL", string.Format("exec Get_CustomerOrderInfo_for_CustomerID @CustomerID={0}", CustomerID));
Code: Select all
public static void SetupSqlDataConnector(string dataCacheName, string queryString) {
((SqlDataConnector)DataSources.Get(dataCacheName).Connector).Query = queryString;
}
Shortcuts usually aren't...
Re: Dynamically assigning data sources
When I need a variable number of values, I usually type them all into a single variable separated by comma:AccidentReport wrote: For example, I have a variable type called Distribution. This variable defines the percentage of items that go down a specific path. It can have anything between 2 and 20 paths and the total of all the path percentages must equal 100.
Code: Select all
percentages = 20,27,50,10
Code: Select all
string[] percents = percentageList.Split(',')