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

TestNG和Selenium——并行执行问题

蔺沛
2023-03-14

我使用TestNG Selenium(ChromeWebDriver)并行执行测试时遇到了一些问题。基本上,我的测试实际上看起来并不是真正并行执行的。

尝试实现:从Excel电子表格读取数据。TestSuite中的所有测试用例。java应该在单独的WebDriver实例中对每一行数据执行——并行运行。例如,在单独的浏览器窗口中同时测试5个单独的登录/密码组合。

简图:

public class TestSuite {
    private String param;

    @DataProvider
    public static Object[][] provider() {
        return new Object[][] {{"1"},{"2"}};
    }

    @Factory(dataProvider = "provider")
    public TestSuite(String data) {
        this.param = data;
        System.out.println(String.format("[Thread: %d] TestSuite (%s)", Thread.currentThread().getId(), param));
        // Can't initialise webdriver instances here, different thread
    }

    @BeforeClass
    public void init() {
        System.out.println(String.format("[Thread: %d] BeforeClass (%s)", Thread.currentThread().getId(), param));
        // This is where I'm retrieving webdriver instances
    }

    @Test
    public void TC_001() {
        System.out.println(String.format("[Thread: %d] TC_001 (%s)", Thread.currentThread().getId(), param));
    }

    @Test
    public void TC_002() {
        System.out.println(String.format("[Thread: %d] TC_002 (%s)", Thread.currentThread().getId(), param));
    }
}

TestNG。xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite" parallel="instances" group-by-instances="true">
  <test name="Test">
    <classes>
      <class name="TestSuite" />
    </classes>
  </test>
</suite>

输出:

[Thread: 1] TestSuite (1)
[Thread: 1] TestSuite (2)
[Thread: 11] BeforeClass (1)
[Thread: 11] TC_001 (1)
[Thread: 11] TC_002 (1)
[Thread: 12] BeforeClass (2)
[Thread: 12] TC_001 (2)
[Thread: 12] TC_002 (2)

这里的主要问题是,我的测试显然是按顺序执行的。谁能解释一下我做错了什么——实现我上面解释的预期结果的正确方法是什么?

共有1个答案

柯星辰
2023-03-14

在TestNG中使用并行as方法。xml如下所示

suite name=“suite”parallel=“methods”group by instances=“true”

 类似资料:
  • 我正在尝试用Web驱动集线器和TestNG并行机制设置Web驱动程序并行执行。我正面临线程的问题 我有一个扩展TestBaseSetUp的类,它有一个Beforemethod和Aftermethod,并设置为始终运行。对于Web驱动程序的并行执行,我想使用线程本地,但是@测试和@之前/@之后方法在不同的线程中。所以如果我在我的TestBaseSetUp中设置Web驱动程序为线程本地,并尝试进入我的

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

  • 我一个类有5到6个方法,想在不同的节点上并行运行方法,我有网格2设置,里面有4个节点。 下面是我的测试。xml 我有一个测试工具,它初始化了login、common和utils类 在我的测试类中,我扩展了测试工具,在@Beforemethod中,我调用了inilze方法 如果我运行测试,我会看到以下问题 两个浏览器在每个节点中打开一个,但只有一个浏览器启动应用程序,另一个不启动。 如果我遗漏了什么

  • 我试图使用Selenium和TestNG进行测试设计,我将每个@test放在一个单独的类中,并对所有类使用once@beforeSuite&@afterSuite,原因是: 代码易于维护 数据驱动,以便能够选择通过文件运行的类。 案例1类: 注意:如果上面的代码在套件中使用单个运行,它就可以正常工作。 问题是它是否像下面的配置那样并行运行。

  • 当我使用Selenium网格在appium(Android)中运行并行测试脚本时,我得到以下错误。 默认套件运行得测试总数:6,失败:0,跳过:3配置失败:1,跳过:0 堆栈跟踪消息:org.openqa.selenium.sessionNotCreatedException:无法创建新会话。(原始错误:请求了一个新会话,但一个正在进行)我的TestNG xml文件: config.json文件:

  • 我正在尝试使用2个xml文件与Maven并行运行我的测试,但似乎不起作用。我已经尝试了Maven留档中的步骤/参数:http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html 以下是我的pom.xml文件: 这是功能1.xml文件: 我应该做哪些参数/更改才能使其生效? 谢谢你