Контекстная инъекция для параллельного выполнения - PullRequest
0 голосов
/ 30 июня 2018

Мне удалось построить несколько довольно простых тестов, в которых не используется структура объектной модели страницы. Шаги Specflow будут просто вызывать методы драйвера (такие как поиск элемента на странице и утверждение текста правильно).

В тестах используется NUnit, и мне удалось добавить параллельное выполнение, добавив [Parallelizable (ParallelScope.Fixtures)] в класс сборки для решения. Это хорошо работает, но отчеты, которые приходят из NUnit, немного грязные, и я хотел бы получить больше полезной информации о них (например, скриншоты).

С тех пор я добавил отчеты об экстентах в решение, хотя это нормально работает, когда тесты выполняются последовательно, при параллельном запуске их появляется сообщение об ошибке.

The FeatureContext.Current static accessor cannot be used in multi- 
threaded execution. Try injecting the feature context to the binding 
class.

Шаги Context.Current используются при создании отчетов Extent. Я читал документацию, касающуюся многопоточности, с сайта Specflow, но у меня возникают проблемы с пониманием концепции и выяснением того, как я могу внедрить FeatureContext в класс привязки. Я пытаюсь следовать этому примеру с сайта:

[Binding]
public class StepsWithScenarioContext : Steps
{
    [Given(@"I put something into the context")]
    public void GivenIPutSomethingIntoTheContext()
    {
      this.ScenarioContext.Set("test-value", "test-key");
    }
}

Я также пытался следовать другим примерам, но мне еще не удалось увидеть какую-либо документацию, касающуюся использования ScenarioContext с чем-то вроде driver.findElement (By.Id ("blah")).

Буду признателен за любую помощь, я довольно новичок в автоматизации тестирования.

1 Ответ

0 голосов
/ 01 июля 2018

У вас должно быть свойство в вашем классе Steps: ScenarioContext _scenarioContext. В Конструкторе вы добавляете ScenarioContext scenarioContext в качестве параметра и инициализируете его, используя:

_scenarioContext = scenarioContext

Простой пример:

class Steps
ScenarioContext _scenarioContext;
public Steps (ScenarioContext scenarioContext)
{
  _scenarioContext = scenarioContext;
}

Только я не знаю, как это будет работать с наследованием.

...