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

Я пытаюсь воссоздать свой шаг 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 с потокобезопасным выполнением, пожалуйста, дайте мне знать


person AutoTester213    schedule 31.08.2020    source источник
comment
Разве это не ConfigurationManager.AppSettings -- во множественном числе?   -  person Greg Burghardt    schedule 02.09.2020
comment
Это действительно опечатка   -  person AutoTester213    schedule 03.09.2020
comment
Глупый вопрос, но вы используете .NET Framework или .NET Core?   -  person Greg Burghardt    schedule 21.09.2020
comment
@GregBurghardt NET Framework   -  person AutoTester213    schedule 23.09.2020
comment
Можете ли вы добавить больше app.config к своему вопросу?   -  person Greg Burghardt    schedule 23.09.2020
comment
Конфигурация моего приложения из того, что я вижу в отладке, не загружается и не заменяется значениями здесь: TestProjectRetargetTo35Allowed value: true   -  person AutoTester213    schedule 24.09.2020


Ответы (1)


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

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

      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;
person ethomas    schedule 14.04.2021
comment
Не могли бы вы просмотреть мой ответ и принять его как полезный? Это решает вашу проблему. - person ethomas; 22.04.2021
comment
Эй, извините за поздний ответ, это действительно решает проблему, описанную выше, спасибо. - person AutoTester213; 04.05.2021