问题描述
我想针对特定环境使用一堆配置设置运行某些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.GetEnvironmentVariable
(https://github.com/SpecFlowOSS/SpecFlow.Plus.Examples/blob/master/MultipleBrowserAgainstDifferentEnvironments/TestApplication.UiTests/Drivers/ConfigurationDriver.cs#L9)即可获取它们的值。
您还可以编写多个不同的srProfile
-文件,并且如果您是在本地或在CI管道中运行测试,则可以使用不同的runsettings files进行不同的设置。
如果环境变量不足或处理太多,我建议仅使用一个环境变量来存储文件名。 然后,在绑定中,您可以使用此文件名将其读出。
我希望这个例子可以帮助您达到要求。
全部披露:我是SpecFlow和SpecFlow +的开发人员