九、工具类,启动所有远程服务的浏览器
在utils包中创建java类:LaunchAllRemoteBrowsers
package com.lingfeng.utils; import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import org.dom4j.DocumentException;
import org.openqa.selenium.WebDriver; import com.lingfeng.staticPage.RemoteServerOpenHomepage;
import com.lingfeng.utils.RemoteServerInit; /**
* 此类提供启动所有远程服务端浏览器的方法
* @author 凌风
*
*/
public class LaunchAllRemoteBrowsers {
private static String driverName;
/**
* 此方法为浏览器启动入口,启用了此方法就意味着调起了所有远程服务端的浏览器
* @return Map<String,Thread> 包含浏览器名称和所运行的所有线程。key为浏览器名称,value是运行的线程。
*/
public static Map<String,Thread> launch(){ //存储所有正在运行的浏览器名称和线程
Map<String,Thread> threadMap = new HashMap<String, Thread>(); try {
//初始化浏览器配置信息
RemoteServerInit.launchBrowser();
//获取初始化后的所有浏览器启动的driver
Map<String,WebDriver> driverMap = RemoteServerInit.getAllLaunchDriverMap();
//获取启动浏览器的driver以及name
Set<Entry<String, WebDriver>> driverInfoSet = driverMap.entrySet(); Iterator<Entry<String, WebDriver>> driverIterator = driverInfoSet.iterator();
while(driverIterator.hasNext()){
Thread currentThread = launchThread(driverIterator);
threadMap.put(driverName, currentThread);
}
return threadMap;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
return threadMap;
} /**
* 多线程调用,启动一个线程
* @param driverIterator
* @return Thread 当前启动的线程
*/
private static Thread launchThread(Iterator<Entry<String, WebDriver>> driverIterator) { Entry<String, WebDriver> driverEntry = driverIterator.next();
driverName = driverEntry.getKey();
WebDriver webdriver = driverEntry.getValue();
RemoteServerOpenHomepage homepage= new RemoteServerOpenHomepage(webdriver,driverName);
Thread t = new Thread(homepage);
t.start();
return t; }
}
十、开始测试类来喽
在start包中创建java类:StartTest
package com.lingfeng.start; import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; import com.lingfeng.utils.LaunchAllRemoteBrowsers;
import com.lingfeng.utils.RemoteThreadStatusMonitor; public class StartTest { public static void start(){ Map<String, Thread> allRunningThreads = LaunchAllRemoteBrowsers.launch();
Set<Entry<String,Thread>> RunningThreadsSet = allRunningThreads.entrySet();
Iterator<Entry<String,Thread>> it = RunningThreadsSet.iterator(); int threadCount=0; //记录启动线程个数
while(it.hasNext() ){
threadCount++;
Entry<String, Thread> entry = it.next();
//启动监控器线程,监控运行线程的状态。
RemoteThreadStatusMonitor c = new RemoteThreadStatusMonitor(entry.getKey(),entry.getValue());
Thread t = new Thread(c);
t.start();
}
//消亡线程个数等于了启动线程的个数则jvm退出。
while(RemoteThreadStatusMonitor.getDeadThreadCount()!=threadCount){
//必须加此线程休眠方法,不然主这个线程结束不了。
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
在调试此类时需要了一个问题,可能是小弟的java的基础还是不够扎实,问题如下:
//消亡线程个数等于了启动线程的个数则jvm退出。
while(RemoteThreadStatusMonitor.getDeadThreadCount()!=threadCount){
//必须加此线程休眠方法,不然主这个线程结束不了。
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
在上边这段代码中,如果我不加入sleep方法,while循环中什么都不放的话,主进程就不会结束,加上就没事了,所有工作的线程结束后,主进程自然就结束了,目前还没有弄清楚原因。如有高手看到此文,希望能够给予解惑,感激不尽!
十一、junit测试
junit包中,直接创建一个测试类即可。
package com.lingfeng.junit; import org.junit.Test; import com.lingfeng.start.StartTest; public class JunitTest {
@Test
public void testStart(){
StartTest.start();
} }
运行后打印结果如下:
aaarticlea/png;base64,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" alt="" />
备注:所有java包及类创建完目录如下:
aaarticlea/png;base64,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" alt="" />
可自行对比。
至此,selenium之多线程启动grid分布式测试框架封装 ,封装完成。
源码jar:http://yunpan.cn/cKacLZvv4BA3Q 访问密码 c81b
持续关注,会抽时间继续封装多种工具类以及日志、报告框架等的封装。