转:

因为selenium grid的官网介绍上说可以实现多线程,就认为只用selenium grid就可以实现多线程,查了很多资料都没有发现这方面的资料,后来在一篇博客上看到这么一句话:Selenium Grid只是提供多系统、多浏览器的执行环境,而不是说任务一个test case丢给它就能并行运行,才如梦初醒 (地址:Selenium Grid深入学习)

testng本身就是支持多线程的,让他和selenium grid结合在一起,就可以实现了

代码:

package Login;

import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class LoginClass
{

private WebDriver dr;
DesiredCapabilities browsers;

@Parameters({"browser","nodeIp"})
@Test
public void setUp(String browser,String nodeIp) {
if(browser.equals("ie")) browsers = DesiredCapabilities.internetExplorer();
else if(browser.equals("firefox")) browsers = DesiredCapabilities.firefox();
else if(browser.equals("chrome")) browsers = DesiredCapabilities.chrome();

try {
dr = new RemoteWebDriver(new URL(nodeIp+"/wd/hub"),browsers);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dr.get("https://www.baidu.com/");

//查看用的哪个进程
long id = Thread.currentThread().getId();
System.out.println("Thread id is: " + id);
}
}

配置xml文件:

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

<suite name="Suite1" parallel="tests" thread-count="5">
<test name="test1">
<parameter name="browser" value="chrome"/>
<parameter name="nodeIp" value="http://172.16.16.62:5555"/>
<classes>
<class name="Login.LoginClass"></class>
</classes>
</test>

<test name="test2">
<parameter name="browser" value="chrome"/>
<parameter name="nodeIp" value="http://172.16.16.62:5555"/>
<classes>
<class name="Login.LoginClass"></class>
</classes>
</test>

<test name="test3">
<parameter name="browser" value="chrome"/>
<parameter name="nodeIp" value="http://172.16.16.62:5555"/>
<classes>
<class name="Login.LoginClass"></class>
</classes>
</test>
</suite>

直接运行这个xml文件,就能看到node机器一起打开了3个chrome文件,在代码里特意加了两句来输出启动每个chrome用的线程:

Thread id is: 13

Thread id is: 11

Thread id is: 12

注意点:在运行时,如果不是并行的,可以查看xml文件这个参数parallel的设置

parallel=」tests」,指TestNG将test 作为并发的子单位,Parallel=」methods」的意思是指TestNG将method作为并发的子单位

如果没有并行,查看是不是子单位设置错误。

推荐阅读:

相关文章