.NET Core中的SpecFlow +配置文件转换替代方案?

问题描述

我想针对特定环境使用一堆配置设置运行某些SpecFlow +测试,然后选择针对不同环境针对不同设置进行相同测试。

使用.net框架中的SpecFlow +,可以通过将.srprofile文件转换为特定于环境的.runsettings文件来实现。然后,您可以将.srprofile文件连接到#if DEBUG文件,并通过更改Visual Studio中的测试运行设置来无缝更改要运行测试的环境。

.net核心中是否有等效的解决方案?

我能想到的唯一解决方法是为每个环境使用不同的构建配置,然后在代码中使用npm样式的预处理程序指令。然后可以加载特定的appsettings.json文件或指向特定的Azure应用配置设置。然后,我可以在运行测试时在管道中设置BuildConfiguration。

解决方法

我为您的用例创建了一个新示例。您可以在https://github.com/SpecFlowOSS/SpecFlow.Plus.Examples/tree/master/MultipleBrowserAgainstDifferentEnvironments

上找到它

您可以在Default.srProfile中定义哪种浏览器用于哪种环境。
基本网址是通过__BaseUrl环境配置的。

这是将Firefox与google.com用作基本地址的示例。

<Target name="Firefox-COM">
  <DeploymentTransformationSteps>
     <EnvironmentVariable variable="Test_Browser" value="Firefox" />
     <EnvironmentVariable variable="__BaseUrl" value="https://www.google.com" />
  </DeploymentTransformationSteps>
</Target>

如果需要更多的值来配置,则只需添加新的环境变量并使用简单的Environment.GetEnvironmentVariablehttps://github.com/SpecFlowOSS/SpecFlow.Plus.Examples/blob/master/MultipleBrowserAgainstDifferentEnvironments/TestApplication.UiTests/Drivers/ConfigurationDriver.cs#L9)即可获取它们的值。

您还可以编写多个不同的srProfile-文件,并且如果您是在本地或在CI管道中运行测试,则可以使用不同的runsettings files进行不同的设置。

如果环境变量不足或处理太多,我建议仅使用一个环境变量来存储文件名。 然后,在绑定中,您可以使用此文件名将其读出。

我希望这个例子可以帮助您达到要求。


全部披露:我是SpecFlow和SpecFlow +的开发人员