I have encountered several methods of storing variables that can be accessed across tests, and I am wondering what the recommended scenario is. My goal is to be able to run a master test with several sub-tests (and some with sub-tests themselves), but to have each primary sub-test store variables based on input, and then to react to those variables by skipping unnecessary tests or adding/subtracting/modifying values to fit certain constraints. Basically, I need to set and get variables across multiple tests in a longer process.
Here is what I know currently, but correct me if I'm wrong:
1. Extracted Values
Using SetExtractedValue(string dataBindVariableName, object value) I can create variables that are accessible across tests. This allows me to access the values via GetExtractedValue(string dataBindVariableName). The challenge is that these get/set methods automatically fail the test whenever the variable is not present (e.g., I used a "get" in a scenario where the variable has not been "set"), so I have to nest all of them in Try/Catch blocks. If I want to conditionally check to see if these values exist, I have to put each one in its own Try/Catch block so I can respond to each variable independently. While possible and functional, this gets tedious and very cluttered in code, so I have looked at 2 other options:
2. DataBound Variables
Using Data["variableName"] I know I can access the values stored in local or external data sources, based on the column name. My confusion is how this interacts with extracted values, as sometimes I seem to be able to switch back and forth between Data[""] and GetExtractedValue(""), but sometimes I can't. Also, the same rigid constraints exist on data bindings as with extracted values, meaning that I have toput them in try/catch blocks if I want to conditionally test for whether the variable is present yet or not.
3. Utility Classes
This might be the easiest option, and the limitation might be my programming knowledge here. I found documentation talking about creating a utility class in Test Studio standalone. It's a static class with static variables, which works great for some of the stock browser interactions I want to do in dozens of places throughout my test suite. The challenge is that I have to add in references to the Browser (for ActiveBrowser.Refresh/ActiveBrowser.RefreshDomTree), the Log (for Log.WriteLine), and the Manager (for Manager.Desktop). However, since a static class is not instantiated, my only option is to pass in all of these values every time I run a function. Not the end of the world, I suppose. I am currently using a standalone non-static class file (extending BaseWebAiiTest) to work around this, but I don't know of an easy way to pass this between tests and sub-tests. Is there one?
I imagine you will want code samples, and I can provide them, but I'm mostly looking for a general principle. My question is about the expected way these features function in general, and which one fits my need to pass variables and functions between tests.
Thanks ahead of time!
Regards,
Steven Klassen