Как я могу обновить параметр в классе C # при запуске приложения через BAT-файл? - PullRequest
0 голосов
/ 26 апреля 2019

В настоящее время у меня есть набор тестов автоматизации Selenium с использованием SpecFlow и C # (IDE - Visual Studio 2017).

Я создал командный файл для запуска соответствующих файлов функций.

В настоящее время я устанавливаю свою тестовую среду (т.е. QA, UAT, Prod) в Environments.cs, используя следующее свойство

public static string CurrentEnvironment { get; set; } = uat;'

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

Вероятно, в будущем появятся другие параметры, которые я захочу обновить с помощью этого метода, например параметры Specflow, с помощью которых я могу захотеть переопределить значение параметра.

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

Пакетный файл:

ECHO ON

set Date=%date:~0,2%%date:~3,2%%date:~6,4%
set Time=%time:~0,2%%time:~3,2%

cd C:\Users\%username%\source\repos\AutomationTests\TestProject\packages\SpecRun.Runner.1.8.0\tools

SpecRun.exe run default.srprofile /basefolder:C:\Users\%username%\source\repos\AutomationTests\TestProject\TestProject\bin\Debug /filter:testpath:"Feature:TestFeature"

В сущности, если для свойства CurrentEnvironment в моем решении установлено значение «UAT», я хочу иметь возможность переопределить его, сказав «QA» через файл BAT.

Какие изменения мне нужно внести в файл BAT и что в моем решении (если есть)?

1 Ответ

2 голосов
/ 26 апреля 2019

Вы можете установить тестовую среду с переменными среды. Environment.GetEnvironmentVariable () - метод для вызова переменных среды.

Вот пример:

Program.cs (в консольном приложении):

using System;

namespace TestEnvironmentVariable
{
    class Program
    {
        static void Main(string[] args)
        {
            string testEnvironment = Environment.GetEnvironmentVariable("test_env");
            Console.WriteLine($"Test environment: {testEnvironment}");
        }
    }
}

run.bat:

set test_env=uat

TestEnvironmentVariable.exe

При запуске run.bat:

>run.bat

>set test_env=uat

>TestEnvironmentVariable.exe
Test environment: uat

Вы также можете поместить все свои настройки в файл json, который вы используете в качестве файла конфигурации. Это также позволяет изменять настройки без необходимости компиляции. Вот небольшой пример:

Создайте файл json, например, settings.json:

{
  "TestEnvironment": "UAT"
}

Может быть создано в корневой папке решения. В свойствах файла установите для параметра Копировать в выходной каталог значение Копировать всегда или Копировать, если новее . Это гарантирует, что он перемещен в каталог двоичного вывода.

Затем создайте файл Settings.cs, представляющий класс, для которого мы десериализовываем файл json:

namespace TestEnvironmentVariable
{
    public sealed class Settings
    {
        public Settings() { }

        public string TestEnvironment { get; set; }
    }
}

Вы можете добавить больше переменных здесь, когда они необходимы. Файл json должен иметь те же переменные. А затем код, который делает десериализацию:

using System.IO;
using Newtonsoft.Json;

namespace TestEnvironmentVariable
{
    public static class SettingsUtil
    {
        public static T GetObjectFromJsonFile<T>(string filename)
        {
            string json = File.ReadAllText(filename);
            var deserializedObject = JsonConvert.DeserializeObject<T>(json);

            return deserializedObject;
        }
    }
}

Вы должны добавить Newtonsoft.Json с NuGet. Затем мы можем прочитать файл json в нашем коде:

using System;

namespace TestEnvironmentVariable
{
    class Program
    {
        static void Main(string[] args)
        {
            Settings settings = SettingsUtil.GetObjectFromJsonFile<Settings>("settings.json");
            Console.WriteLine($"Test environment: {settings.TestEnvironment}");
        }
    }
}

Выход:

>TestEnvironmentVariable.exe
Test environment: UAT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...