Подтвердить что ты не робот

Как получить доступ к TestRunParameters в файле RunSettings

Чтение через https://msdn.microsoft.com/en-us/library/jj635153.aspx Я создал файлы .RunSettings с несколькими параметрами, похожими на пример:

  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>

Я планирую иметь файл .RunSettings для каждой из наших сред с соответствующими URL-адресами и учетными данными для запуска теста CodedUI в указанной файловой среде RunSettings.

Я вижу, что из командной строки для ссылки на файл настроек я могу запустить:

vstest.console myTestDll.dll /Settings:Local.RunSettings /Logger:trx
vstest.console myTestDll.dll /Settings:QA.RunSettings /Logger:trx

и т.д...

Но я не вижу никакого способа, чтобы узнать, как реально использовать TestRunParameters из теста codedUI.

Что мне нужно сделать, так это настроить инициализаторы тестов, которые используют TestRunParameters, чтобы определить, где войти и какие учетные данные использовать. Что-то вроде этого:

[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
}

Приветствуется информация о том, как ссылаться на TestRunParameters!

ИЗМЕНИТЬ

/// <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
}

Исключение, которое я получаю при запуске:

Исключение NullReference

введите описание изображения здесь

@williamfalconeruk Я обновил свой тестовый класс, как указано выше, но я все еще получаю ту же ошибку, любая идея, что я делаю неправильно?

4b9b3361

Ответ 1

Я также встретил это недавно, так как мы хотели отказаться от использования переменной устаревшей среды. Решение, приведенное ниже, подходит для наших нужд, но может быть лучше...

Оказывается, вы можете получить доступ к ним в TestContext метода ClassInitialize вашего тестового прибора. Существует словарь Properties, который имеет эти параметры, и вы можете получить доступ к этим значениям здесь:

[ClassInitialize]
public static void TestClassinitialize(TestContext context)
{
    var webAppUrl = context.Properties["webAppUrl"].ToString();

   //other settings etc..then use your test settings parameters here...
}

Примечание: они являются статическими, поэтому, если вам нужен доступ к этому, вам может потребоваться настроить статические свойства для доступа в вашем тестовом коде.

Альтернативно предлагается использовать подход, основанный на анализе данных. Здесь приведена базовая информация о проверенных данным тестах, которая также может помочь: https://msdn.microsoft.com/en-us/library/ms182527.aspx

Как я уже сказал, вышеупомянутое решение соответствует нашим потребностям на базовом уровне.

ОБНОВЛЕНИЕ: см. изображение ниже в ответ на параметры теста, возвращающие нуль...

Настройки теста в Visual Studio

Ответ 2

Для тех, кто использует Resharper с этой проблемой, я обнаружил исправление (нет необходимости отключать Resharper):

  • Перейдите в главное меню Visual Studio → Resharper → Options

  • Найдите раздел "Инструменты", разверните "Unit Testing"

  • Нажмите "MsTest". Флажок должен быть включен, но путь к файлу тестовых настроек ниже этого может быть пустым. Если это так, нажмите на просмотр и выберите файл настроек, который вы хотите использовать.

  • Нажмите "Сохранить", перестройте и попробуйте запустить тесты, теперь параметры должны работать.

Не знаю почему, но просто выбрать файл настройки тестирования из меню Tests → Настройки тестирования фактически не работает при использовании Resharper, так что этот файл должен быть явно указывал непосредственно в настройках ReSharper.

Ответ 3

Альтернативой отключению Resharper является включение поддержки MSTest и выбор файла настроек теста в диалоговом окне "Параметры параметров" (- > "Инструменты" > "Тестирование устройств" > "MsTest" ).

Ответ 4

Для проблемы с NullReferenceException:

В то же время я столкнулся с той же проблемой, и решение для него - иметь последнее обновление Visual Studio 2013. Сейчас последнее обновление - обновление 5. Я не уверен, какое конкретное обновление устраняет эту проблему. Я применил обновление 5 и смог успешно получить доступ к TestRunParameters в методе ClassInitialize.

Вы можете найти обновления @https://support.microsoft.com/en-us/kb/2829760 Таким образом, у меня было две машины, на одном все было нормально, а с другой я получал исключение. Я исследовал, что единственное различие заключается в обновлении VS; применил его, и это решило проблему.:)

Ответ 5

Я смог разрешить это для модульных тестов, отключив Resharper. Хотелось бы сказать то же самое для тестов кодированного интерфейса.

Ответ 6

Я тоже пытался это сделать. Как многие из вас могут знать, выполнение тестов через MTM предоставляет некоторые дополнительные свойства TestContext, включая имя используемых параметров запуска. Я использовал это свойство как "внешний ключ" для наших тестовых данных, позволяя нам указывать URL-адреса среды и т.д. Без их жесткого кодирования или с помощью невероятно тусклых инструментов "Data Driving", которые поставляются без тестирования.

Разумеется, нет способа показать какие-либо свойства времени выполнения при выполнении тестов как часть рабочего процесса BDT или выпуска, кроме того, что пытается выполнить @kritner, который описывает Microsoft ЗДЕСЬ. Однако, если вы прочтете комментарии по этой ссылке, вы обнаружите, что вы можете здесь сделать:

  • Для использования этого решения вам необходимо использовать VS 2013 R5 или VS 2015.
  • Работает только только для тестирования модулей!

Те из нас, кто пытается выполнить тесты пользовательского интерфейса или нагрузки как часть рабочего процесса CI или CD, полностью завинчиваются. Вы не получаете никаких дополнительных свойств в testContext даже при выполнении плана /Suite с определенными тестовыми конфигурациями (не настройками), созданными в MTM. @Adam, возможно, смог заставить это работать при запуске отладки, но это может работать только с модульными тестами. Через CodedUI мне не удалось получить свойства без получения исключения NullReferenceException. Вот пример кода janky, который я использовал для исследования:

if (testContextInstance.Properties["__Tfs_TestConfigurationName__"] != null) //Exposed when run through MTM
{
TFSTestConfigurationName = testContextInstance.Properties["__Tfs_TestConfigurationName__"].ToString();
}
else TFSTestConfigurationName = "Local"; //Local
var configName = testContextInstance.Properties["configurationName"] ?? "No Config Found";
Trace.WriteLine("Property: " + configName);

И XML моего файла .runsettings:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- Parameters used by tests at runtime. These are required as a substitute for TFS/MTM test settings.-->
  <!-- File instructions: https://msdn.microsoft.com/en-us/library/jj635153.aspx#example -->
  <!-- TFS instructions: https://blogs.msdn.microsoft.com/visualstudioalm/2015/09/04/supplying-run-time-parameters-to-tests/ -->  
  <TestRunParameters>
    <Parameter name="configurationName" value="Local" />
  </TestRunParameters>
</RunSettings>

И выдержка из .trx, созданная рабочим процессом BDT:

Property: No Config Found 

Ответ 7

Это работает для меня (VS2017-pro):

namespace TestApp.Test
{
    [TestClass]
    public class UnitTest1
    {
        // This enables the runner to set the TestContext. It gets updated for each test.
        public TestContext TestContext { get; set; }
        [TestMethod]
        public void TestMethod1()
        {
            // Arrange
            String expectedName = "TestMethod1";
            String expectedUrl = "http://localhost";

            // Act
            String actualName = TestContext.TestName;
            // The properties are read from the .runsettings file
            String actualUrl = TestContext.Properties["webAppUrl"].ToString();

            // Assert
            Assert.AreEqual(expectedName, actualName);
            Assert.AreEqual(expectedUrl, actualUrl);
        }

        [TestMethod]
        public void TestMethod2()
        {
            // Arrange
            String expectedName = "TestMethod2";

            // Act
            String actualName = TestContext.TestName;

            // Assert
            Assert.AreEqual(expectedName, actualName);
        }
    }
}

Обязательно выберите файл настроек, который вы хотите использовать, здесь: Test → Test Settings.

Ответ 8

Почему вы не используете настройки приложения?

AppSettings

вы можете читать их в любом месте, например

var yesICan= Properties.Settings.Default.IToldYou;

вы можете создать "Свойства" из них, в значительной степени вы можете многое сделать.

public string URL_WEBOFFICE
    {
        get
        {
            return Properties.Settings.Default.WEBOFFICE_URL.Replace("***", Properties.Settings.Default.SiteName);
        }

    }