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

TestNG中的并行执行

岳凯康
2023-03-14

我试图使用Selenium和TestNG进行测试设计,我将每个@test放在一个单独的类中,并对所有类使用once@beforeSuite&@afterSuite,原因是:

  1. 代码易于维护
  2. 数据驱动,以便能够选择通过XML文件运行的类。
public class Base {
    protected static WebDriver driver;

    @BeforeSuite
    public void setup() {
        System.setProperty("webdriver.chrome.driver", "/Users/.../chromedriver");
        driver = new ChromeDriver();
    }

    @AfterSuite
    public void tearDown() {
        driver.quit();
    }
}
public class LoginApps extends Base{
    @Test(groups= {"logintest"})
    @Parameters({"data"})
    public void loginApps(String data) {
        driver.get("https://TheUrl.com/");
        //some code here
    }
}

案例1类:

public class Case1 extends Base{
    @Test(dependsOnGroups= {"logintest"})
    @Parameters({"data"})
    public void case1(String data) {
        driver.get("https://TheUrl.com/");
        //some code here
    }
}

注意:如果上面的代码在套件中使用单个 运行,它就可以正常工作。

问题是它是否像下面的xml配置那样并行运行。

<suite name="SuiteTest" parallel="tests" thread-count="2">
    <test name="Test1">
        <parameter name="data" value="data1"></parameter>
        <classes>  
            <class name="com.main.LoginApps"/>
            <class name="com.main.Case1"/>
            .....
            More class
        </classes>
    </test>
    <test name="Test2">
        <parameter name="data" value="data2"></parameter>
        <classes>
            <class name="com.main.LoginApps"/>
            <class name="com.main.Case1"/>
            .....
            More class
        </classes>
    </test>
</suite>
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.0.0</version>
    <scope>compile</scope>
</dependency>

共有1个答案

穆宾白
2023-03-14

创建具有线程安全性的驱动程序,以确保两次驱动程序会话都是唯一的。

public class ThreadLocalDriver {

    private static ThreadLocal<WebDriver> threadLocalDriver = new ThreadLocal<>();

    public synchronized static void setTLDriver(WebDriver driver) {
        threadLocalDriver.set(driver);
    }

    public synchronized static WebDriver getTLDriver() {
        return threadLocalDriver.get();
    }
}

public class BaseClass {
    @BeforeMethod
    public void setup (String deviceName, String platformVersion) throws IOException {
        DesiredCapabilities caps = new DesiredCapabilities();
        // Add caps here    
        ThreadLocalDriver.setTLDriver(new ChromeDriver(caps));
    }

    @AfterMethod
    public synchronized void teardown(){
        ThreadLocalDriver.getTLDriver().quit();
    }
}
 类似资料:
  • 我有4个@Test方法,希望每个方法都运行3次。我想在12个线程中同时执行所有这些。 我创建了一个testng。像这样的xml文件 如果我设置并行="方法",TestNG在Test1的4个线程中执行4个测试方法,之后对Test2执行相同的操作,然后对Test3执行相同的操作。但是我不想在运行Test2之前等待Test1完成。TestNG能够运行Test1、Test2 有没有办法告诉TestNG不要

  • 请查看testng.xml并建议 我想运行2个类(下面提到),但面临一些挑战,因为它在下面提到的2个场景下显示了一些不稳定的行为。 这些测试类下的方法具有组和优先级 **目标是使用组运行这些测试 Scenario1:当我使用Threadcount=1时; [test name=“autopracticee”parallel=“classes”thread-count=“1”] 以下是行为: 1.1

  • 本文向大家介绍如何在TestNG中实现并行执行?,包括了如何在TestNG中实现并行执行?的使用技巧和注意事项,需要的朋友参考一下 我们可以借助TestNG实现并行执行。TestNG中有一个并行属性,用于此实现。TestNG中的并行执行与另一个称为thread-count的属性相关联。 parallel属性可以具有以下列出的值- 方法。 类。 执行个体 测验 示例 Testng xml文件。 对于

  • 类TestParallel.FirstTestClass线程ID:22名称:TestNG 类TestParallel.SecondTestClass线程ID:23名称:TestNG 类TestParallel.TestSetup线程ID:23名称:TestNG java.lang.NullPoInterException位于TestParallel.TestSetup.OnTestFailure(

  • 我使用TestNG Selenium(ChromeWebDriver)并行执行测试时遇到了一些问题。基本上,我的测试实际上看起来并不是真正并行执行的。 尝试实现:从Excel电子表格读取数据。TestSuite中的所有测试用例。java应该在单独的WebDriver实例中对每一行数据执行——并行运行。例如,在单独的浏览器窗口中同时测试5个单独的登录/密码组合。 简图: TestNG。xml: 输出

  • 问题内容: 我有一个测试,可以从数据提供者那里接收数据。我希望此测试与数据提供者的不同值并行运行。 我尝试了类似的方法: } 我收到的输出是: 你好:10 你好:12 你好:17 你好:11 你好:16 你好:14 你好:13 你好:15 产生10个线程,而我在线程池大小中指定5个。您能否告诉我们必须在上述代码段中添加哪些内容来控制数据提供程序线程池的大小。 问题答案: 您需要使用。在和不需要的值