如何通过BAT文件运行应用程序时更新C#类中的参数?

问题描述 投票:0回答:1

我目前使用SpecFlow和C#(IDE是Visual Studio 2017)有一套Selenium自动化测试。

我创建了一个批处理文件来运行适用的功能文件。

目前,我使用以下属性在Environments.cs中设置我的测试环境(即QA,UAT,Prod)

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

我想要实现的是一些如何通过批处理文件传递测试环境,因此在运行BAT文件之前无需打开解决方案并进行修改。

将来我可能会想要通过此方法更新其他参数,例如Specflow参数,我可能希望覆盖参数值。

我试过谷歌搜索解决方案,但我发现结构化我的问题不会产生我想要的结果。

批处理文件:

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',我希望能够通过BAT文件覆盖它以说'QA'。

我需要对BAT文件进行哪些修改以及我的解决方案(如果有的话)?

c# batch-file selenium-webdriver specflow
1个回答
2
投票

您可以使用环境变量设置测试环境。 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;
        }
    }
}

你必须使用NuGet添加Newtonsoft.Json。然后我们可以在代码中读取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
© www.soinside.com 2019 - 2024. All rights reserved.