【问题标题】:SpecFlow+ config file transformation alternatives in .net core?.net 核心中的 SpecFlow+ 配置文件转换替代方案?
【发布时间】:2020-08-21 18:18:38
【问题描述】:

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

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

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

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

【问题讨论】:

  • 环境变量对你有用吗?我们在这个例子中使用它们:github.com/SpecFlowOSS/SpecFlow.Plus.Examples/blob/master/…
  • 我相信这个例子需要使用标签来提取环境变量(?)。如果我想运行指向不同配置设置的整个测试套件,我宁愿不向所有测试添加标签。我所追求的灵活性是可以在一个环境(您的建议确实解决)、多个环境(例如测试、沙盒、实时)上运行多个浏览器的测试,并可以选择在这些环境中的特定实例上运行(例如测试 1、测试 2 等)。调试时始终能够在这些实例之间轻松切换。
  • 好的,总是使用多个不同的浏览器,并且根据配置,您可以针对一对多环境进行测试。可能由 URL 配置。这是你的情况吗?然后我可以为你创建一个合适的例子。
  • 是的,就是这样,配置可能还有其他详细信息,例如 API 端点 URL、数据库连接字符串、用户名等。我一直在尝试使用 Azure 应用程序配置,它允许我提取一堆基于标签(例如测试)的设置,然后我可以通过环境设置将其输入到我的应用程序中。这可以在管道中针对不同的目标进行设置。唯一的缺点是它不适合调试,需要手动更改代码或手动更改环境变量值。
  • 您所描述的是 SpecFlow+ Runner 的目标的用例。结合一些部署步骤,您的要求应该是可能的。发布的示例同时使用两者,但方式略有不同。我希望我能在接下来的几天里找到一些时间来创建一个满足您要求的示例。

标签: specflow


【解决方案1】:

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

您可以在Default.srProfile 中定义哪个浏览器用于哪个环境。
基本 URL 是通过 __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+ 的开发人员

【讨论】:

  • 非常感谢。我需要抽出一些时间来详细介绍它,但我会确保报告回来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多