selenium之多线程启动grid分布式测试框架封装(二)

五、domain类创建

  在domain包中创建类:RemoteLanchInfo.java 用来保存启动信息。

package com.lingfeng.domain;

public class RemoteLanchInfo {
	private String id;
	private String name;
	private String address;

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}

}

  这个javabean就是用来保存一条配置文件中的启动信息,后面会将这个javabean封装到集合中,以后需要到这些信息的时候调用起来也方便,比如碰到了IE6哪个页面不兼容,就可以使用名称来进行截图文件的命名,这样就知道了是哪个浏览器出了问题。

六、工具类,远程服务配置文件初始化类

   在utils包中创建java类RemoteServerInit.java

package com.lingfeng.utils;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

import com.lingfeng.domain.RemoteLanchInfo;

/**
 * 远程服务器初始化类
 * @author 凌风
 *
 */
public class RemoteServerInit {
	//存储读取配置文档
	private static Document DOCUMENT;
	//存储所有状态为on的远程服务端信息
	private static Map<String,RemoteLanchInfo> allLaunchInfoMap = new HashMap<String,RemoteLanchInfo>();
	//存储所有远程服务端浏览器启动的driver
	private static Map<String,WebDriver> allLaunchDriverMap = new HashMap<String, WebDriver>();

	//在调用launchBrowser方法后,可用此方法获取到所有远程服务端的driver
	public static Map<String,WebDriver> getAllLaunchDriverMap(){
		return allLaunchDriverMap;
	}
	//在调用launchBrowser方法后,可用此方法获取到所有远程服务端的启动信息。
	public static Map<String,RemoteLanchInfo> getAllLaunchInfoMap(){
		return allLaunchInfoMap;
	}

	public static void launchBrowser() throws DocumentException, MalformedURLException{

		File file = new File("src/RemoteServerLaunchInfo.xml");
		DOCUMENT = readInitFile(file);
		List<Element> servers = getAllRemoteServers(DOCUMENT);
		Iterator<Element> it = servers.iterator();
		while(it.hasNext()){
			addWebDriver(allLaunchDriverMap,it);
		}

	}

	/**
	 * 将启动信息以及相对应的driver存储到各自的map集合中
	 *
	 * @param allLaunchDriverMap
	 * @param it
	 * @throws MalformedURLException
	 */
	private static void addWebDriver(
			Map<String, WebDriver> allLaunchDriverMap, Iterator<Element> it) throws MalformedURLException {
		Element e = it.next();

		String remoteAddress = e.getText();
		String remoteID = e.attributeValue("ID");
		String remoteName = e.attributeValue("name");

		//将启动的所有信息存储到javabean当中。
		RemoteLanchInfo info = setRemoteLanchInfo(remoteAddress,remoteID,remoteName);
		allLaunchInfoMap.put(remoteName, info);//启动的信息放到map集合中

		DesiredCapabilities desiredCapabilities = DesiredCapabilities.internetExplorer();
		WebDriver driver = new RemoteWebDriver(new URL(remoteAddress), desiredCapabilities);
		allLaunchDriverMap.put(remoteName, driver);
	}

	/**
	 * 设置远程启动信息,作为一个作为一个对象保存到map集合中
	 * @param remoteAddress
	 * @param remoteID
	 * @param remoteName
	 * @return RemoteLanchInfo 远程启动信息
	 */
	private static RemoteLanchInfo setRemoteLanchInfo(String remoteAddress,
			String remoteID, String remoteName) {

		RemoteLanchInfo info = new RemoteLanchInfo();
		info.setAddress(remoteAddress);
		info.setId(remoteID);
		info.setName(remoteName);
		return info;
	}

	public static String getHomepage(){
		return  DOCUMENT.getRootElement().elementText("homepage");
	}
	/**
	 * 将所有配置文件中的remote-server标签对象存储到list集合中
	 * @param document
	 * @return List<Element> 存储一个remote-server标签对象的一个集合。
	 */
	private static List<Element> getAllRemoteServers(Document document) {
		List<Element> servers = new ArrayList<Element>();
		List<Element> list = document.getRootElement().elements("remote-server");
		Iterator<Element> it = list.iterator();

		while(it.hasNext()){
			Element element = (Element) it.next();
			if(element.attributeValue("status").equals("on")){
				servers.add(element);
			}
		}
		return servers;
	}
	/**
	 * 读取配置文件,返回文件
	 * @param file
	 * @return Document
	 * @throws DocumentException
	 */
	public static Document readInitFile(File file) throws DocumentException {
		SAXReader reader = new SAXReader();
		return reader.read(file);
	}
}

未完待续!!!马上奉上!!!

时间: 2024-07-31 23:59:43

selenium之多线程启动grid分布式测试框架封装(二)的相关文章

selenium之多线程启动grid分布式测试框架封装(四)

九.工具类,启动所有远程服务的浏览器 在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;

selenium之多线程启动grid分布式测试框架封装(一)

一.设计思路 在国内市场上,IE内核的浏览器占据了绝大部分的市场份额,那么此次框架封装将进行IE系列的浏览器进行多线程并发执行分布式测试的封装. 运行时主进程与多线程关系如下: 运行线程通俗的说就是我们用来跑用例的线程,其中<监控线程1>用来监控<运行线程1>的运行状态. 二.前期准备 1.创建一个java工程. 2.导入selenium.dom4j.log4j相关jar包 可到网上自行寻找jar包,也可到我云盘中下载,地址: selenium jar 以及源码jar :http:

selenium之多线程启动grid分布式测试框架封装(三)

七.工具类,线程监控器类创建 utils包中,创建java类:RemoteThreadStatusMonitor.java package com.lingfeng.utils; /** * 此监控器方法很重要,如果没有,那么将导致jvm退出,所有远程工作的线程全部抛出异常. * @author 凌风 * */ public class RemoteThreadStatusMonitor implements Runnable { private String driverName; priva

Selenium Grid分布式测试入门详解

本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chrome版本为62,Firefox版本为56,IE版本为11. 1. Selenium Grid简介 Selenium Grid允许你在多台机器的多个浏览器上并行的进行测试,即分布式测试. 通常,以下两种情况会需要使用Selenium Grid: 1) 通常多个浏览器的兼容性测试,即在不同浏览器或不同

Selenium Grid 分布式测试入门

本文对Selenium Grid进行了完整的介绍,从环境准备到使用Selenium Grid进行一次完整的多节点分布式测试. 运行环境为Windows 10,Selenium版本为 3.5.0,Chrome版本为62,Firefox版本为56,IE版本为11. 1. Selenium Grid简介 Selenium Grid允许你在多台机器的多个浏览器上并行的进行测试,即分布式测试. 通常,以下两种情况会需要使用Selenium Grid: 1) 通常多个浏览器的兼容性测试,即在不同浏览器或不同

Selenium grid 分布式测试搭建

应领导要求使用 selenium grid 搭建分布式测试平台,于是有了以下操作: 第一步:准备2台电脑,且2台电脑都安装好jdk,都准备好selenium-server-standalone-2.40.0.jar,IEDriver, ChromeDriver等工具,注意chrome版本与chromedriver需要匹配,详见我的另一篇博客:http://www.cnblogs.com/cherrysu/p/7815245.html 第二步:其中一台电脑作为hub,也就是老大,另一台作为node

分布式服务框架(二)

一.分布式服务框架其他组成 上一节<分布式服务框架(一)>讲述了RPC发展到SOA的过程,常见的SOA服务治理方案,以及分布式系统中常见的专业名词,这部分其实只是涉及到了一个分布式系统架构的轮廓,真正一个系统的构建,还需要很多模块互帮互助,协同工作和其他相关平台的搭建. 一个大型,稳健,成熟的分布式系统的背后,往往会涉及众多支撑运作的系统,我们统称这部分系统为分布式系统架构中的基础设施,下面将介绍一些常见甚至必用的基础设施. (1)CI/CD平台:即持续集成/持续交付,持续集成是指软件个人研发

大型分布式C++框架《二:大包处理过程》

本来这一篇是打算写包头在分布式平台中的具体变换过程的.其实文章已经写好了.但是想了这个应该是不能随便发表的.毕竟如果知道了一个包的具体每个字节的意义.能伪造包来攻击系统.其次来介绍一个包的具体变换过程意义不大.在每个分布式系统的里.包的扭转应该是个有不同.我们着重的应该是一种思想.一种共性.而不是个体的具体实现. 这里打算就介绍下大包的处理.其实这个更多的是介绍了下TCP切包.跟分布式没啥关系....  不过这也算是系统的一部分 下面介绍下一个大包的具体处理过程 一.发送请求并分析 1)首先我们

selenium 测试框架中使用grid

之前的测试框架:http://www.cnblogs.com/tobecrazy/p/4553444.html 配合Jenkins可持续集成:http://www.cnblogs.com/tobecrazy/p/4529399.html 在测试框架中使用Log4J 2 :http://www.cnblogs.com/tobecrazy/p/4557592.html 首先介绍一下grid ,selenium grid 是一种执行测试用例时使用的包含不同平台(windows.Linux.Androi