当 运行 应用程序通过 BAT 文件时,如何更新 C# Class 中的参数?
How can I update a parameter within a C# Class when running the application via a BAT file?
我目前有一套使用 SpecFlow 和 C# 的 Selenium 自动化测试(IDE 是 Visual Studio 2017)。
我为 运行 适用的功能文件创建了一个批处理文件。
目前我使用以下 属性
在 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 文件进行哪些修改以及对我的解决方案(如果有)进行哪些修改?
您可以通过环境变量设置测试环境。 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"
}
可以在解决方案的根文件夹中创建。在文件的属性中,将复制到输出目录设置为 Copy always 或 Copy if newer。这确保它被移动到二进制输出目录。
然后创建一个 Settings.cs 文件代表 class 我们将 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
我目前有一套使用 SpecFlow 和 C# 的 Selenium 自动化测试(IDE 是 Visual Studio 2017)。
我为 运行 适用的功能文件创建了一个批处理文件。
目前我使用以下 属性
在 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 文件进行哪些修改以及对我的解决方案(如果有)进行哪些修改?
您可以通过环境变量设置测试环境。 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"
}
可以在解决方案的根文件夹中创建。在文件的属性中,将复制到输出目录设置为 Copy always 或 Copy if newer。这确保它被移动到二进制输出目录。
然后创建一个 Settings.cs 文件代表 class 我们将 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