Используя приведенную ниже комбинацию версий, параллельное выполнение через surefire не работает должным образом. Если поменять Cucumber на 4.8.1, то работает параллельное выполнение через surefire.
**Cucumber 6.10.2 или более поздние версии, Cucumber-Spring, Junit 4.13.2 и Maven surefire 3.0.0.M3 и выше **
Но как только огуречную версию поменять на 6.10.2, не работает. Конкретная проблема заключается в том, что сеанс веб-драйвера просачивается среди потоков или, проще говоря, несколько потоков, действующих в одном и том же сеансе веб-драйвера.
Я провел много исследований и попробовал несколько конфигураций в POM, но это не сработало: Пробная версия 1. Исключены junit-jupiter и jupiter-vintage-engine из огурца-junit, исключены junit-jupiter и jupiter-vintage-engine из огурца-Spring, добавлена зависимость surefire-junit47 к плагину surefire. Пробная версия 2. Добавлен jupiter-vintage-engine в качестве зависимости от плагина surefire. Пробная версия 3. Использование Spring Boot версии 2.6.2, Cucumber 6.10.2 или более поздних версий, Cucumber-Spring, Junit 5 и surefire 3.0.0.M7
Будем признательны за любую помощь.
Если поменять Cucumber на 4.8.1, то работает параллельное выполнение через surefire. Но как только огуречную версию поменять на 6.10.2, не работает.
Проекты обычно публикуют журнал изменений со всеми соответствующими изменениями. Вы должны проконсультироваться с ним при обновлении основных версий.
https://github.com/cucumber/cucumber-jvm/blob/main/CHANGELOG.md
Конкретная проблема заключается в том, что сеанс веб-драйвера просачивается среди потоков или, проще говоря, несколько потоков, действующих в одном и том же сеансе веб-драйвера.
Это особенность Весны! При использовании Spring вы будете использовать один и тот же контекст приложения для всех тестов.
Вы можете предотвратить это, пометив bean-компонент с помощью веб-драйвера как сценарий.
@Component
@ScenarioScope
public class WebDriverComponent {
private WebDriver driver = // create WebDriverhere
public WebDriver getDriver() {
return driver;
}
}
https://github.com/cucumber/cucumber-jvm/tree/main/cucumber-spring#sharing-state
И если вы хотите повторно использовать WebDriver между сценариями в одном потоке, вы можете использовать локальный поток:
@Component
@ScenarioScope
public class WebDriverComponent {
private static ThreadLocal<WebDriver> driver = ThreadLocal.withInitial( create WebDriverhere );
public WebDriver getDriver() {
return driver.get();
}
}
Похоже, вы пропускаете ссылки на объекты области действия сценария в контекст приложения. Было бы хорошо пройти процесс создания MCVE, а затем задать новые вопросы. stackoverflow.com/help/минимально-воспроизводимый-пример
Спасибо, указание на @ScenarioScope действительно помогло преодолеть первоначальные препятствия, но наблюдение за проблемами с ScenarioScoping. Например, в классе pageAction, написанном на java, при использовании await().atLeast(3).until(()->pageObject.someObject.isDisplayed()); система выдает исключение с сообщением ScopeNotActive. В огурце-весне 4.8.1 это работало. Вы использовали Awaitability в какой-либо последней версии огурца-весны?