【问题标题】:TestNG Parallel Testing, Opens two browser but runs all tests only in 1 browserTestNG 并行测试,打开两个浏览器,但仅在 1 个浏览器中运行所有测试
【发布时间】:2021-04-13 16:45:29
【问题描述】:

大家好,我有一个 XML 类

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests" thread-count="2">
    <test name="Auto">
        <classes>
            <class name="Auto.....Name_of_class1......"/>
        </classes>
    </test>

    <test name="Bad">
        <classes>
            <class name="Bad.....Name_of_class2......"/>
        </classes>
    </test>
     </suit>

当我运行这个 XML 文件时,首先它会打开两个浏览器 (Chrome),然后运行这两个类。但这对我来说是令人困惑的部分

当浏览器打开时,在这两个浏览器中,只有一个浏览器会测试用例。 在我的情况下,我并行运行两个类,每个类有 2-3 个测试用例。 但所有测试用例都将在一个浏览器中运行。第二个浏览器刚刚打开并转到基本 URL

另外,我尝试将平行更改为“class”、“True”,但没有成功。 结果集也很乱,请看截图

两个类都调用:-

public static WebDriver initDriver() {
    
            if (driver == null) {
    
                switch (prop.getProperty("browser")) {
    
                case "chrome":
                    WebDriverManager.chromedriver().setup();
                    driver = new ChromeDriver();
                    driver.manage().deleteAllCookies();
                    break;
    
                case "firefox":    
                    driver = new FirefoxDriver(fOptions);
  
                    break;
    
                default:
                        System.out.println("Wrong driver was chosen!");
    
                }
    
                action = new Actions(driver);
                driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
                driver.manage().window().maximize();
            }
            return driver;
    
        }

【问题讨论】:

  • 如何在这个类中声明driver
  • 驱动从TestBase类调用,TestBase类函数initDriver() TestBase扩展为testClasses
  • 不! driver = new ChromeDriver(); 行,driver 是如何/在哪里声明的?是static吗?
  • 是的,它是静态的。
  • public static WebDriver driver;

标签: java selenium parallel-processing automated-tests testng


【解决方案1】:

这纯粹是一个Java问题,与(或)关系不大。

static 字段属于类(而不是类的实例),因此无论您调用该类多少次,它都只存在 一次。您可以阅读更多关于此herehere 以及许多其他来源的信息。

事实上,每次您的代码执行driver = new ChromeDriver()(或driver = new FirefoxDriver())时,它都会启动一个您观察到的新浏览器,并用新值覆盖字段driver

为了并行运行您的测试,您必须driver 设为static。您还必须调整代码以非静态方式访问此字段。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 2016-05-19
  • 2021-07-17
  • 2018-12-09
  • 2012-08-03
相关资源
最近更新 更多