当前位置: 首页 > 知识库问答 >
问题:

无法使用TestNG和SpringBootTest并行运行Cucumber测试

傅志文
2023-03-14

我试图使用TestNG和SpringBootTest并行运行两个Cucumber测试,但当我的测试执行时,会发生以下情况

  • 两个浏览器都打开并导航到维基百科主页
  • 1个浏览器继续测试,另一个留在主页上
  • 1个测试通过,另一个测试失败

我不知道为什么一个测试会停止执行,欢迎任何帮助。

回购:https://github.com/cmccarthyIrl/spring-cucumber-testng-parallel-test-harness

测试转轮

@CucumberOptions(
        features = {
                "src/test/resources/feature/"
        },
        plugin = {
                "pretty",
                "html:target/cucumber/report-html",
                "json:target/cucumber/report.json",
                "junit:target/cucumber/junit_report.xml",
                "timeline:target/cucumber/timeline"
        })
public class ParallelRunner extends AbstractTestNGCucumberTests {

    @Override
    @DataProvider(parallel = true)
    public Object[][] scenarios() {
        return super.scenarios();
    }

}

DriverManager类

@Component
public class DriverManager {

    private WebDriver webDriver;
    private Wait<WebDriver> webDriverWait;
    private static ThreadLocal<WebDriver> driverThreadLocal = new ThreadLocal<>();
    private static ThreadLocal<Wait<WebDriver>> driverWaitThreadLocal = new ThreadLocal<>();

    @Autowired
    private ApplicationProperties applicationProperties;

    public void driverManager() {
        if (getDriver() == null) {
            setLocalWebDriver();
        }
    }

    public void setLocalWebDriver() {
        switch (applicationProperties.getBrowser()) {
...
            case ("firefox"):
                System.setProperty("webdriver.gecko.driver", System.getProperty("user.dir") + "/src/test/resources/geckodriver");
                FirefoxOptions firefoxOptions = new FirefoxOptions();
//                firefoxOptions.setHeadless(true);
                firefoxOptions.setCapability("marionette", true);

                webDriver = new FirefoxDriver(firefoxOptions);
                break;
       ...
            default:
                throw new NoSuchElementException("Failed to create an instance of WebDriver for: " + applicationProperties.getBrowser());
        }
        driverThreadLocal.set(webDriver);
        webDriverWait = new WebDriverWait(webDriver, 10, 500);
        driverWaitThreadLocal.set(webDriverWait);
        try {
            Runtime.getRuntime().addShutdownHook(CLOSE_THREAD);
        }catch(Exception ex){
            System.out.println("ex.getMessage() = " + ex.getMessage());
        }
    }

    ...

共有1个答案

通建安
2023-03-14

更改PageObject注释并添加@Scope(“prototype”)引用

@Retention(RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
@PageFactoryFinder(FindBy.FindByBuilder.class)
@Lazy
@Component
@Scope("prototype")
public @interface PageObject {
}

现在,对于每个场景,您都应该获得页面对象的新实例

此外,我可能更喜欢在DriverManager中进行一些更改,例如。

driverThreadLocal.set(new FirefoxDriver(firefoxOptions));
driverWaitThreadLocal.set(new WebDriverWait(driverThreadLocal.get(), 10, 500));

您可以删除清理驱动程序的逻辑

试试{Runtime.getRuntime().addShutdownHook(CLOSE_THREAD);}catch(Exception ex){System.out.println(“ex.getMessage()=”ex.getMessage());}

让开司机。别胡闹了。JAVAhttps://github.com/cmccarthyIrl/spring-cucumber-test-harness/blob/testng/wikipedia/src/test/java/com/cmccarthy/step/Hooks.java

  @After
    public void afterScenario(Scenario scenario) {
        hookUtil.endOfTest(StringUtils.capitalize(scenario.getStatus().toString()));
        driverManager.getDriver().quit();
    }
 类似资料:
  • 附加信息@Saifur我创建了一个单独的基类,在其中我初始化了驱动程序实例。我在@BeForeClass中调用这个实例,在@afterClass中调用driver.quit()。通过在testng.xml中提供两个不同的类,我试图运行这个实例。

  • Javav8. x-Springv5. xcucumberv4.2.0 我尝试了temyers/cucumber jvm并行插件,效果很好,但当我进入他们的gitihub页面时,他们宣布停止使用该插件b/c cucumber已经开始支持cucumber jvm 4.0的并行测试运行支持。0 我有使用以下maven依赖项的现有测试。 我有两个问题让我困惑。 为了使用cucumber-jvm,我必须更

  • 我正在使用cucumber测试和testng,我计划并行运行测试。我以前有使用testng框架和并行执行的经验,如果不使用mavensurfire插件(pom.xml),我如何实现相同的效果 我的配置, Cucumber JVM,TestNGCucumberRunner。用于触发特性文件的java文件

  • 我试图用TestNG并行运行一个示例测试项目。但它是在一个线程中顺序执行的。我漏掉什么了吗? 谢了。

  • 下面是我的pom.xml、testng.xml文件和TestRunners。 下面是我的pom.xml文件 [Utils][ERROR][ERROR]java.lang.NullPointerException在Cucumber.api.testng.AbstractTestngCucumberTests.Scenaries(AbstractTestngCucumberTests.java:31)

  • 我正在试验如何与maven surefire和testng并行运行测试。然而,配置似乎不是很简单,我无法让它工作。下面是我的虚拟测试。 这是我的surefire配置: 测试基本上是按顺序运行的。以下是日志作为证据: 我的意图是并行运行所有测试(直到方法级别)。那么,我该如何实现呢?