Specflow - 创建预定义数据以在并行执行的测试执行中的所有场景之间共享

Specflow - Create Pre-defined data to be shared between all scenarios in test execution with parallel execution

我正在尝试重新创建我的 BeforeTestRun 步骤 运行 我的设置每次整个执行只一次,而不是每个线程。

我查看了自定义部署步骤我已经实施了一些但是对于我的设置我需要从 app.config 文件中引入一些值我正在尝试这样的事情

我的 Default.srprofile 文件包含:

 <DeploymentTransformation>
    <GlobalSteps>
      <Custom type="Test.CustomDeploymentStep, Test"></Custom>
    </GlobalSteps>
  </DeploymentTransformation>

和我的 CustomDeploymentStep.cs:

public class CustomDeploymentStep : IDeploymentTransformationStep
{
    public static string baseUrl;

    public void Apply(IDeploymentContext deploymentContext)
    {
       
        baseUrl = ConfigurationManager.AppSettings["URL"];
    }
    public void Restore(IDeploymentContext deploymentContext)
    {
        
        DoSomething();
    }

}

我的应用配置包含以下内容:

<add key="URL" value="http://google.com" />

但是不行,ConfigurationManager.AppSettings只有returns一键一值

"key" : "TestProjectRetargetTo35Allowed" "value":"true"

如何将我的配置从 app.config 加载到 CustomDeploymentStep 中的 Apply() 方法中?

此外,如果有 better/more 在 specflow 中生成线程安全执行的预定义数据的有效方法,请告诉我

我 运行 曾经遇到过同样的问题,因为我需要在一个大型解决方案的多个项目中使用自定义部署步骤。这似乎是 TechTalk.SpecRun.Framework 中的错误。该错误可能是“应用全局部署步骤时出错。全局步骤不能包含特定于测试程序集的设置。”如果您在调试时查看 TestAssembly 内部,您将看到 TestAssemblyConfigFilePath 为 null and/or 并吞下了另一个异常。

它没有注册项目特定的配置文件。我的解决方法是将配置文件保存到调试中并访问我需要的内容,如下所示:

      string appConfigFilePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\App.config";

      ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
      configMap.ExeConfigFilename = appConfigFilePath;
      var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
      var baseUrl = config.AppSettings.Settings["URL"].Value;