Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to access TestRunParameters within RunSettings file

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

enter image description here

@williamfalconeruk I have updated my test class as above, but I am still getting the same error, any idea what I'm doing wrong?

like image 894
Kritner Avatar asked Jul 29 '15 17:07

Kritner


People also ask

Where do Runsettings files go?

Autodetect the run settings file runsettings . To autodetect the run settings file, place it at the root of your solution.

How do I generate code coverage in Runsettings?

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.

How can a test be configured in Mstest v2?

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.

What is TestContext C#?

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.


2 Answers

For those that use Resharper with this issue, I discovered the fix (no need to disable Resharper):

  1. Go to Visual Studio top menu -> Resharper -> Options

  2. Find the Tools section, expand "Unit Testing"

  3. 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.

  4. 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.

like image 199
starmandeluxe Avatar answered Oct 10 '22 00:10

starmandeluxe


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...

Test Settings in Visual Studio

like image 20
williamfalconeruk Avatar answered Oct 09 '22 23:10

williamfalconeruk