Specflow — Создание предопределенных данных для совместного использования между всеми сценариями при выполнении теста с параллельным выполнением

#c# #.net #specflow #configurationmanager

#c# #.net #specflow #configurationmanager

Вопрос:

Я пытаюсь воссоздать свой шаг 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 возвращает только один ключ и одно значение

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

Как я могу загрузить свою конфигурацию из app.config в Apply() метод в CustomDeploymentStep?

Также, если есть лучший / более эффективный способ генерации предопределенных данных в specflow с потокобезопасным выполнением, пожалуйста, дайте мне знать

Комментарии:

1. Не так ли ConfigurationManager.AppSettings — множественное число?

2. Это действительно опечатка

3. Глупый вопрос, но используете ли вы .NET Framework или .NET Core?

4. @GregBurghardt NET Framework

5. Можете ли вы добавить больше app.config к своему вопросу?

Ответ №1:

Я столкнулся с той же проблемой, когда мне понадобилось использовать пользовательские шаги развертывания в нескольких проектах в большом решении. Похоже, это ошибка в TechTalk.SpecRun.Фреймворк. Вероятно, ошибка «Ошибка при применении шага глобального развертывания. Глобальные шаги не могут содержать настройки, специфичные для тестовой сборки.» и если вы заглянете внутрь TestAssembly во время отладки, вы увидите, что TestAssemblyConfigFilePath равен нулю и / или проглатывает другое исключение.

Он не регистрирует файл конфигурации, специфичный для проекта. Мой обходной путь заключался в том, чтобы сохранить файл конфигурации в debug и получить доступ к тому, что мне нужно, вот так:

       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;
  

Комментарии:

1. Не могли бы вы просмотреть мой ответ и признать его полезным? Это устраняет вашу проблему.

2. Эй, извините за поздний ответ, это действительно решает проблему выше, спасибо