【问题标题】:Selenium Grid Parallel Test Is Not Work ParallelSelenium Grid 并行测试不能并行工作
【发布时间】:2018-01-31 08:52:06
【问题描述】:

您好,我有两个节点,名称分别为 Node1Node2,我在一台计算机上进行此测试。我的问题是Node1Node2 测试不能同时工作,所以它们不是并行的。因此,当Node1Node2 测试开始后完成但我不想要它时,我希望它们一起开始。我已经在TestNG.xml 文件中尝试过parallel="tests"parallel="classes"

这是我的Node1.java 文件:

package grid;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.Test;

public class Node1 {
    WebDriver driver;
    String nodeUrl;
  @Test
  public void f() {
        try {
            //configuration
            nodeUrl= "http://192.168.56.1:5555/wd/hub";
            DesiredCapabilities capabilities = DesiredCapabilities.chrome();
            capabilities.setBrowserName("chrome");
            capabilities.setPlatform(Platform.WIN10);
            driver = new RemoteWebDriver(new URL(nodeUrl), capabilities);

            //test scripts
            driver.manage().deleteAllCookies();
            driver.manage().window().maximize();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            driver.manage().timeouts().pageLoadTimeout(45, TimeUnit.SECONDS);
            driver.get("https://www.amazon.com/");
            driver.findElement(By.linkText("Today's Deals")).click();
            driver.findElement(By.linkText("Gift Cards")).click();
            driver.findElement(By.linkText("Today's Deals")).click();
            driver.findElement(By.linkText("Gift Cards")).click();
            driver.findElement(By.linkText("Today's Deals")).click();
        } 
        catch (MalformedURLException e) {       
            e.printStackTrace();            
        }
  }
}

这是我的Node2.java 文件:

package grid;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.Test;

public class Node2 {    
    WebDriver driver;
    String nodeUrl;
  @Test
  public void f() {
        try {
            //configuration
            nodeUrl= "http://192.168.56.1:5555/wd/hub";
            DesiredCapabilities capabilities = DesiredCapabilities.chrome();
            capabilities.setBrowserName("chrome");
            capabilities.setPlatform(Platform.WIN10);
            driver = new RemoteWebDriver(new URL(nodeUrl), capabilities);

            //test scripts
            driver.manage().deleteAllCookies();
            driver.manage().window().maximize();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            driver.manage().timeouts().pageLoadTimeout(45, TimeUnit.SECONDS);
            driver.get("https://www.google.com/");
        } 
        catch (MalformedURLException e) {       
            e.printStackTrace();            
        }
  }
}

这是我的TestNG.xml 文件:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Test Grid" parallel="tests">
    <test name="Test Node1">
        <classes>
            <class name="grid.Node1" />
        </classes>
    </test>
    <test name="Test Node2">
        <classes>
            <class name="grid.Node2" />
        </classes>
    </test>
</suite>

【问题讨论】:

  • 添加线程数
  • @AnkurSingh 同样的问题继续,它不起作用。
  • 您使用的是哪个测试版本
  • @AnkurSingh 最后一个版本
  • @DijitalDünya 你必须使用parallel="classes"。试试看

标签: java selenium testing parallel-processing selenium-grid


【解决方案1】:

尝试使用下面对我有用的testNG.xml` 文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test name="Test" parallel="classes" thread-count="2">
    <classes>
      <class name="com.github.parallel.Parallel1"/>
      <class name="com.github.parallel.Parallel2"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

【讨论】:

    【解决方案2】:

    试试下面的xml代码。

    <?xml version="1.0" encoding="UTF-8"?>
        <suite name="Test Grid" parallel="classes" thread-count="2" >
            <test name="Test ALl" preserve-order="false">
                <classes>
                    <class name="grid.Node1" />
                </classes>
                <classes>
                    <class name="grid.Node2" />
                </classes>
            </test>
        </suite>
    

    【讨论】:

    • 第二行给出这个错误:The content of element type "test" must match "(method-selectors?,parameter*,groups?,packages?,classes?)".
    • Change parallel="method" 现在运行
    • 但它给出了这个错误:The content of element type "test" must match "(method-selectors?,parameter*,groups?,packages?,classes?)".
    • parallel="classes" 尝试使用并行参数。
    【解决方案3】:

    如果在两个测试中都将 WebDriver 字段声明移到 @Test 方法中。它也应该使用 parallel="methods"。字段不是线程安全的。

     @Test
    public void f() {
        try {
            WebDriver driver;
            //configuration
            nodeUrl= "http://192.168.56.1:5555/wd/hub";
            DesiredCapabilities capabilities = DesiredCapabilities.chrome();
            capabilities.setBrowserName("chrome");
            capabilities.setPlatform(Platform.WIN10);
            driver = new RemoteWebDriver(new URL(nodeUrl), capabilities);
    
            //test scripts
            driver.manage().deleteAllCookies();
            driver.manage().window().maximize();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            driver.manage().timeouts().pageLoadTimeout(45, TimeUnit.SECONDS);
            driver.get("https://www.google.com/");
        }
        catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多