Reading through https://msdn.microsoft.com/en-us/library/jj635153.aspx I have created a .RunSettings
files with a few parameters similar to the example:
<TestRunParameters> <Parameter name="webAppUrl" value="http://localhost" /> <Parameter name="webAppUserName" value="Admin" /> <Parameter name="webAppPassword" value="Password" /> </TestRunParameters>
I plan on having a .RunSettings
file for each of our environments with appropriate URLs and credentials for running a CodedUI test on the specified RunSettings file's environment.
I can see that from command line to reference the Settings file I can run:
vstest.console myTestDll.dll /Settings:Local.RunSettings /Logger:trx vstest.console myTestDll.dll /Settings:QA.RunSettings /Logger:trx
etc...
But I don't see any way that calls out how to actually utilize the TestRunParameters
from within the codedUI test.
What I would like to do is set up test initializers that use the TestRunParameters
to determine where to log in, and what credentials to use. Something like this:
[TestInitialize()] public void MyTestInitialize() { // I'm unsure how to grab the RunSettings.TestRunParameters below string entryUrl = ""; // TestRunParameters.webAppUrl string userName = ""; // TestRunParameters.webAppUserName string password = ""; // TestRunParameters.webAppPassword LoginToPage(entryUrl, userName, password); } public void LoginToPage(string entryUrl, string userName, string password) { // Implementation }
Information on how to reference the TestRunParameters
is greatly appreciated!
EDIT
/// <summary> /// Summary description for CodedUITest1 /// </summary> [CodedUITest] public class CodedUITest1 { public static string UserName = string.Empty; [ClassInitialize] public static void TestClassInitialize(TestContext context) { UserName = context.Properties["webAppUserName"].ToString(); Console.WriteLine(UserName); } [TestMethod] public void CodedUITestMethod1() { this.UIMap.RecordedMethod1(); // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items. } // Rest of the default class - TestContext instantiation, UI map instantiation, etc }
The exception I'm getting when running:
NullReference Exception
@williamfalconeruk I have updated my test class as above, but I am still getting the same error, any idea what I'm doing wrong?
Autodetect the run settings file runsettings . To autodetect the run settings file, place it at the root of your solution.
Add a run settings file to your solution. In Solution Explorer, on the shortcut menu of your solution, choose Add > New Item, and select XML File. Save the file with a name such as CodeCoverage. runsettings.
To create a test, you have to write a method with the attribute [TestAttribute] in a class decorated with the [TestClass] attribute. The TestClass attribute may seem superfluous, but we'll see in another post its importance 😃 You can use the methods of the Assert class to validate the behavior of the method under test.
Each NUnit test runs in an execution context, which includes information about the environment as well as the test itself. The TestContext class allows tests to access certain information about the execution context.
For those that use Resharper with this issue, I discovered the fix (no need to disable Resharper):
Go to Visual Studio top menu -> Resharper -> Options
Find the Tools section, expand "Unit Testing"
Click on "MsTest". The checkbox should be on enabled, but the Test Settings file path below that may be blank. If it is, click on browse and select the runsettings file you want to use.
Click save, rebuild and try to run the tests, the parameters should now work.
Not sure why but simply selecting the Test Settings file from the Tests menu -> Test Settings does not actually work when using Resharper, so this file needs to be explicitly pointed to directly in the Resharper options.
I also came across this recently, as we wanted to move away from legacy environment variable usage. The solution provided below was suitable for our needs, but there may be a better one...
It turns out you can access these in the TestContext
of a ClassInitialize
method of your Test fixture. There is a Properties
dictionary which has these parameters, and you could access the values here:
[ClassInitialize] public static void TestClassinitialize(TestContext context) { var webAppUrl = context.Properties["webAppUrl"].ToString(); //other settings etc..then use your test settings parameters here... }
Note: these are static so if you need access to this you may need to set up static properties to access within your Test code.
An alternative suggested is using a Data Driven Test approach. Here's some basic info on data driven tests here which may also help: https://msdn.microsoft.com/en-us/library/ms182527.aspx
As I said, the above solution suited our needs at a basic level.
UPDATE: see image below in response to test settings returning null...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With