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

使用selenium grid testng并行执行测试

谷泽宇
2023-03-14

我一个类有5到6个方法,想在不同的节点上并行运行方法,我有网格2设置,里面有4个节点。

下面是我的测试。xml

<suite name="Test" parallel="methods"  thread-count="2">

    <test name="Test1">
        <classes>
             <class name="test.LoginTest"/>
        </classes>
    </test>

</suite>

我有一个测试工具,它初始化了login、common和utils类

Public class TestHarness{
public WebDriver driver = null;
public DesiredCapabilities cap = null;

public Login login;
public Common common;
    public void initilize(){
        cap = DesiredCapabilities.firefox();
                cap.setBrowserName("firefox");
                cap.setPlatform(Platform.ANY);
        driver = new RemoteWebDriver(new URL(CONFIG.getProperty("hub")),cap);

        common = new Common(driver);
        login = new Login(driver);
        utils = new Utils(driver);

    }

}

在我的测试类中,我扩展了测试工具,在@Beforemethod中,我调用了inilze方法

public class LoginTest extends TestHarness{

    @BeforeMethod
    public void startTest() {

        initilize();
        login.loginAsAdmin();
    }

    @Test
    public void testLoginWithCorrectPassword(){
        common.goToAdminSettings();
    }

    @Test
    public void testLoginwithInCorrectPassword(){
        utils.getMessage();
    }
}

如果我运行测试,我会看到以下问题

两个浏览器在每个节点中打开一个,但只有一个浏览器启动应用程序,另一个不启动。

如果我遗漏了什么,请告诉我?

谢谢你

共有2个答案

轩辕远
2023-03-14

即使驱动程序是非静态的,它也在测试方法之间共享,因为它们是从同一个类实例调用

让我们把测试方法分为不同的类

a) 将@BeforeMethod移动到TestHarness类

b) 创造

public class LoginTest2 exteds TestHarness 

然后把第二个@Test method移到那里

c) 修改套件:

<suite name="Test" parallel="classes"  thread-count="2">

<test name="Test1">
    <classes>
         <class name="test.LoginTest"/>
         <class name="test.LoginTest2"/>
    </classes>
</test>

如果这有帮助,最终解决方案可以如下所示:

使用testng并行执行webdriver

董胡媚
2023-03-14

1)你确定你运行的是正确的测试类吗?

<class name="test.LoginTest"/>

您的测试在:

public class Testing123 extends TestHarness{

2) 您的代码不显示驱动程序声明。确保此字段不是静态的

3) 此外,请检查网格的实际配置:http://localhost:4444/grid/admin/AllNodes

4) 将测试配置中的线程数提高到4。

 类似资料:
  • 我使用testNg用于使用java的自动化,我使用从excel获取数据并作为参数传递给测试脚本。 假设我在中有10行数据,我的测试用例将按顺序执行10次,但现在我想并行运行这10个测试,同时使用线程。 这能做到吗?如果是的话,有人能给我一个同样的例子吗?

  • 我正在将并行执行引入我的testNG套件中。当我将“parallel”设置为“tests”时,两个浏览器打开,两个测试的第一个类同时开始--这是我所期望的。当我将其设置为“classes”时,我希望第一个测试中的两个类同时开始,但是只有一个浏览器打开,第一个类中的第一个方法执行,然后用第二个类中的第一个方法打开一个新的浏览器,依此类推。谁能告诉我我做错了什么? 下面是我的xml文件:

  • 在对如何并行运行Cucumber测试用例做了大量的研究之后,我发现了下面这篇非常有用的文章: https://www.opencredo.com/2013/07/02/running-cucumber-jvm-tests-in-parallel/ 这篇文章提供了一些很好的信息,可以帮助您开始使用多线程环境,包括一些可以从Github下载的代码。 https://github.com/tristan

  • 问题内容: 在对如何并行运行Cucumber测试用例进行了大量研究之后,我发现以下有关该主题的非常有用的文章: https://www.opencredo.com/2013/07/02/running-cucumber-jvm-tests-in- parallel/ 本文提供了一些很好的信息,可帮助您开始使用多线程环境,其中包括一些可以从Github下载的代码。 https://github.co

  • 问题内容: 我有一些正在使用Jenkins运行的自动化测试。 我已经将Jenkins连接到我的GitSwarm,它从我的分支中提取代码, 然后将其执行。 我已经为Jenkins安装了“并行测试作业执行插件”。 在插件中,我指定了要分三批运行的测试 屏幕截图 还有什么我应该指定的吗?我认为我不必这样做,因为 我已经连接到GitSwarm来运行代码。控制台输出似乎 另有说明! 在工作空间C:\ Jen

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