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

我目前有一套使用 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 文件进行哪些修改以及对我的解决方案(如果有)进行哪些修改?


慕神8447489
浏览 73回答 1
1回答

12345678_0001

您可以使用环境变量设置测试环境。Environment.GetEnvironmentVariable()是调用读取环境变量的方法。这是一个例子:Program.cs(在控制台应用程序中):using System;namespace TestEnvironmentVariable{&nbsp; &nbsp; class Program&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; static void Main(string[] args)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string testEnvironment = Environment.GetEnvironmentVariable("test_env");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine($"Test environment: {testEnvironment}");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}运行.bat:set test_env=uatTestEnvironmentVariable.exe运行 run.bat 时:>run.bat>set test_env=uat>TestEnvironmentVariable.exeTest environment: uat您还可以将所有设置放入一个用作配置文件的 json 文件中。它还使得无需编译即可更改设置成为可能。这是一个小例子:创建一个 json 文件,例如 settings.json:{&nbsp; "TestEnvironment": "UAT"}它可以在解决方案的根文件夹中创建。在文件的属性中,将 Copy to Output Directory 设置为Copy always或Copy if newer。这确保它被移动到二进制输出目录。然后创建一个 Settings.cs 文件,代表我们将 json 文件反序列化为的类:namespace TestEnvironmentVariable{&nbsp; &nbsp; public sealed class Settings&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; public Settings() { }&nbsp; &nbsp; &nbsp; &nbsp; public string TestEnvironment { get; set; }&nbsp; &nbsp; }}您可以在需要时在此处添加更多变量。json 文件应具有相同的变量。然后是反序列化的代码:using System.IO;using Newtonsoft.Json;namespace TestEnvironmentVariable{&nbsp; &nbsp; public static class SettingsUtil&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; public static T GetObjectFromJsonFile<T>(string filename)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string json = File.ReadAllText(filename);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var deserializedObject = JsonConvert.DeserializeObject<T>(json);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return deserializedObject;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}您必须使用 NuGet 添加 Newtonsoft.Json。然后我们可以在代码中读取 json 文件:using System;namespace TestEnvironmentVariable{&nbsp; &nbsp; class Program&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; static void Main(string[] args)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Settings settings = SettingsUtil.GetObjectFromJsonFile<Settings>("settings.json");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine($"Test environment: {settings.TestEnvironment}");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}输出:>TestEnvironmentVariable.exeTest environment: UAT
打开App,查看更多内容
随时随地看视频慕课网APP