Доступ к области тестирования во время параллельного выполнения в Specflow и Nunit

Я реализовал тестовую среду с использованием NUnit с ParallelScope.Children на дочернем уровне без проблем. Я создал вложенный класс в textFixture, чтобы каждый [Test] имел свою собственную область видимости и не перекрывал друг друга.

Теперь мне нужно интегрировать Specflow в приведенный выше тест. Я использовал «инъекцию зависимостей», чтобы поделиться некоторым состоянием в соответствии с инструкциями, и все работает нормально без проблем, без параллелизма.

Проблема возникает, когда я пытался запустить Parallel на уровне Fixture для Specflow - это означает, что 1 тест из этой функции выполняется параллельно с другим тестом в другой функции.

Вот мои конфигурации: NUnit 3.11 Specflow 2.41 (У меня возникла проблема с Specflow 3, поэтому я использовал 2.41) Net 4.6.1 NUnit Test Adapter 3

Крючки:

private static TestScopeContext _testScope;
private readonly IObjectContainer _objectContainer;

public Hooks(IObjectContainer objectContainer)
{
     _objectContainer = objectContainer;
}

[BeforeTestRun]
public static void SetUpTestScope()
{
     _testScope = new TestScopeContext();
}

[BeforeScenario]
public void CreateScenario(FeatureContext featureContext, ScenarioContext scenarioContext)
{
     _objectContainer.RegisterInstanceAs<TestScopeContext>(_testScope);
     //some codes that need access to feature context, scenario context. Not sure if this is the correct way
}

TestScopeContext.cs

public class TestScopeContext:IDisposable
{
   public string value;
   //other codes
}

Шаги привязки

FileA.cs


[Binding]
    public class FileProcessingTestSteps
    {
        private readonly TestScopeContext _testScope;
        private readonly ScenarioContext _scenarioContext;

        public FileProcessingTestSteps(
            TestScopeContext testScope,
            ScenarioContext scenarioContext)
        {
            _testScope = testScope;
            _scenarioContext = scenarioContext;
        }


        [When(@"The user drops the file to (.*) UNC path")]
        public void WhenTheUserDropsTheFileToUNCPath(string client)
        {
            Console.WriteLine(_scenarioContext.ScenarioInfo.Title);
            Console.WriteLine(_testScope.value);  //issue at this line          
        }
}

FileB.cs

[Binding]
    public class CitiTestStepsDefinition
    {
        private readonly TestScopeContext _testScope;
        private readonly ScenarioContext _scenarioContext;

        public CitiTestStepsDefinition(
            TestScopeContext testScope,
            ScenarioContext scenarioContext)
        {
            _testScope = testScope;
            _scenarioContext = scenarioContext;
        }

        [Given(@"The user modifies the File (.*)")]
        public void GivenTheUserModifiesTheFile(string text)
        {            
            _testScope.value= _scenarioContext.ScenarioInfo.Title;           
        }
    }

Вопрос 1:

Учитывая, что у меня есть 2 теста - Test1, Test2.

Console.WriteLine(_testScope.value); при запуске выдаст либо Test1 для обоих тестов, либо Test2, в зависимости от того, какое значение назначено последним.

Является ли этот testScope только одним экземпляром, независимо от того, сколько рабочих я определил.

Вопрос 2: Я пытался удалить этот код _objectContainer.RegisterInstanceAs<TestScopeContext>(_testScope);

После этого область проверки выполняется правильно, _testScope.value возвращает Test1 для этого сценария и Test2 для другого сценария.

Я думал, что RegisterInstanceAs используется для того, чтобы состояние «TestScope» можно было разделить между этапами привязки. Что-то не так с моими конфигурациями?

Если что-то непонятно, дайте мне знать, я могу попробовать продублировать свой рабочий проект и прикрепить сюда код.


person Minh Quan Huynh    schedule 07.08.2019    source источник


Ответы (1)


Я ошибся, объявив TestScopeContext _testScope статическим. Удалите ключевое слово static, переместите логику для создания нового экземпляра TestScopeContext в [BeforeScenario], чтобы исправить эту проблему.

person Minh Quan Huynh    schedule 13.08.2019