pyhton+Selenium Girl2

来源:互联网 发布:结对编程 编辑:程序博客网 时间:2024/06/18 11:11

Selenium Girl的作用

  • 利用selenium girl可以在不同的主机上建立主节点(hub)和分支节点(node),可以使主节点上的测试用例在不同的分支节点上运行;
  • 对于不同的节点来说,可以搭建不同的测试环境(操作系统、浏览器),使得一份测试用例有不同环境下的测试结果;
  • Selenium Girl提供多系统、多浏览器的执行环境,可以分布式执行测试用例,(分布式负责将测试用例远程调到不同的环境下执行)

Selenium Server环境配置

Selenium girl2 已经集成到Selenium Server中,所以要下载和运行Selenium Server才可以使用Girl2的功能。

下载Selenium Server

下载地址:http://www.seleniumhq.org/download/
在该页面找到Selenium Standalone Server,单击版本好下载最新版或者点击先前的版本下载指定版本。
下载完成后的到Selenium-server-standalone-xxx.jar包。

配置Java环境

Java环境的介绍:
Java环境分为JDK和JRE两种。jdk是面向开发人员使用的sdk,它提供了Java的开发环境和运行环境;jre是指Java的运行环境,面向的是Java程序的使用者,也就是用户。
Java下载地址:
https://www.java.com/zh_CN/download/manual.jsp
下载后得到:jdk-8u111-windows-x64.exe,双击安装。安装好后配置环境变量,在dos中验证安装是否成功。
cmd.exejava......javac.........................
java命令用于运行class文件字节码,javac命令可以经Java源文件编译为class字节码文件。

运行Selenium Server

切换到Selenium Server所在的目录,输入命令:
>java -jar selenium-server-standalone-2.48.0.jar

那么运行成功。

Selenium Girl工作原理

  • Girl是用于设计帮助我们进行分布式测试的工具,其整个结构由一个hub主节点和若干个node代理节点组成;
  • hub用来管理各个代理节点的注册和状态信息,并且接收远程客户端代码的请求调用,然后吧请求的命令在转发给代理节点来执行;
  • 使用girl远程执行测试的代码与直接调用Selenium server 是一样的,,只是环境启动方式不同,需要同时启动一个hub和至少一个node;
启动一个hub、一个node实例:
cmd.exe>java -jar selenium-server-standalone-2.48.jar -role hub   #主节点cmd.exe>java -jar selenium-server-standalone-2.48.jar -role node  #代理节点
hub默认端口是4444,node默认端口是5555。
同一台主机上启动多个node实例:
cmd.exe>java -jar selenium-server-standalone-2.48.jar -role hub                   #主节点cmd.exe>java -jar selenium-server-standalone-2.48.jar -role node -port 5555       #代理节点cmd.exe>java -jar selenium-server-standalone-2.48.jar -role node -port 5556cmd.exe>java -jar selenium-server-standalone-2.48.jar -role node -port 5557
同一台主机启动多个node需要指定端口!!

通过浏览器访问Girl的控制台:http://127.0.0.1:4444/girl/console,
通过控制台查看启动的节点信息,如图:

当测试用例需要验证的环境比较多时,可以并行地执行这些用例从而缩短测试总耗时。Girl可以根据用例中指定的平台配置信息把用例转发给符合匹配要求的测试代理。

Remote应用

可以把remote看作一种驱动类型,但它不是支持某一款特定的浏览器或平台,而是一种配置模式,我们可以在这种配置模式下指定任意的平台或浏览器,这种模式的执行都需要Selenium server的支持。

Remote实例(一个测试平台、一个浏览器)

通过remote来运行测试用例:
先启动Selenium server:
> java -jar selenium-server-standalone-2.48.2.jar
把启动命令生成批处理文件,不用每次都要输入一大串命令,直接双击就可以启动了:
Selenium Server存放在C盘中,再创建一个批处理文件startup.bat,在里面输入:
java -jar C:\\selenium\selenium-server-standalone-2.48.2.jar -role hub

编写自动化测试脚本:
from selenium.webdriver import Remotefrom Email126Login import Login                                   #import登录模块from time import *driver = Remote(command_executor='http://127.0.0.1:4444/wd/hub',  #指向本机的4444端口                desired_capabilities={'platform':'ANY',           #测试平台,ANY指默认平台                                      'browserName':'firefox',    #浏览器                                      'version':'',               #浏览器版本                                      'javascriptEnabled':True    #JavaScript启动状态                })driver.get('http://www.126.com')driver.maximize_window()driver.implicitly_wait(10)username = "tesxxxt1"password = "yXXX."l = Login()          #实例化登录类l.login_on(driver,username,password)sleep(10)l.login_off(driver)

参数化测试平台及浏览器(多个测试平台、多个浏览器)

同一主机上运行测试用例

在同一个主机上运行测试用例,host :127.0.0.1,不同的浏览器:(同一主机不同浏览器运行脚本)
启动Selenium Girl,一个主节点、两个代理节点:
>java -jar selenium-server-standalone-2.48.2.jar -role hub >java -jar selenium-server-standalone-2.48.2.jar -role node -port 5555>java -jar selenium-server-standalone-2.48.2.jar -role node -port 5556
实例代码:
from selenium.webdriver import Remote#定义主机和浏览器lists ={'http://127.0.0.1:4444/wd/hub':'firefox',  #同一主机127.0.0.1,不同浏览器        'http://127.0.0.1:5555/wd/hub':'chrome',        'http://127.0.0.1:5556/wd/hub':'internet explorer'}#通过不同的浏览器执行脚本for host,browser in lists.items():                #遍历字典,获取每一个主机及浏览器    print(host,browser)    driver = Remote(command_executor=host,                    desired_capabilities={                        'platform':'ANY',                        'browseName':browser,                        'version':'',                        'javascriptEnabled':True                    }                    )    driver.get(r"http://www.baidu.com")    driver.find_element_by_link_text("新闻").click()    driver.back()    url = driver.current_url    print(url)    driver.quit()

不同主机和不同的浏览器运行脚本:

启动Selenium server:

1.在本机启动一个主hub和一个node节点:本机IP地址(192.168.0.101),节点端口4444/5555

java -jar selenium-server-standalone-2.48.0.jar -role hub

java -jar selenium-server-standalone-2.48.0.jar -role node -port 5555

2.启动一个远程node:centos7,ip地址:192.168.0.102 在虚拟机里面:端口是6666

java -jar selenium-server-standalone-2.48.0.jar -role node -port 6666 -hub http://192.168.0.101:4444/gird/register

3.修改远程主机的IP地址及端口号,在其上面的Firefox浏览器下运行脚本

测试脚本:(结合多线程运行脚本)

'''在不同主机、不同浏览器同时执行测试用例,多线程;利用Selenium Girl提供分布式执行测试用例;先启动Selenium server,这里分别在本地主机启动一个hub和一个node,在其他主机(虚拟机)启动一个node。'''from selenium.webdriver import Remoteimport threadingfrom time import *#测试用例def test_baidu(host,browser):    print("开始:%s"%ctime())    print(host,browser)    dc ={'browserName':browser}    driver = Remote(                    command_executor=host,                    desired_capabilities=dc    )    driver.get(r'http://www.baidu.com')    driver.implicitly_wait(10)    driver.find_element_by_link_text("新闻").click()    sleep(2)    driver.get_screenshot_as_file(r'D:\testscreen\baidu.jpg')    driver.quit()if __name__ =='__main__':    #启动参数,指定运行主机和浏览器    lists={'http://127.0.0.1:4444/wd/hub':'chrome',           'http://127.0.0.1:5555/wd/hub':'internet explorer',           'http://192.168.216.128:6666/wd/hub':'firefox'  #远程节点node           }    threads =[]    files = range(len(lists))    #创建线程,并append进线程组    for host,browser in lists.items():        t = threading.Thread(target=test_baidu,args=(host,browser))        threads.append(t)    #启动每一个线程    for i in files:        threads[i].start()    #守护每一个线程    for i in files:        threads[i].join()







0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 儿子死了欠的钱怎么办 儿子欠银行的钱怎么办 惹了社会上的混混怎么办 我是五年级惹上混混怎么办 孩子挨欺负家长怎么办幼儿园 孩子被同学欺负不敢上学怎么办 孩子被欺负不敢还手怎么办 2个月的婴儿内热怎么办 孩子把别人打了怎么办 学生在学校被打怎么办 妈和老丈人搞外遇怎么办? 丈人住在双方出资房中怎么办 金木水火土缺水怎么办? 练太极注意不集中怎么办 白色裙子被染色了怎么办 两边的头发向外翘怎么办 感冒的前兆来了怎么办 压腿把筋拉伤了怎么办 压腿压不下去了怎么办 床的气压杆坏了怎么办 床打开压不下去怎么办 裤子大了怎么办小窍门 小孩不准守课堂纪律怎么办 学生在学校体育课受伤怎么办 手指被篮球砸肿了怎么办 眼睛被篮球砸了怎么办 宝宝被篮球砸了怎么办 手被篮球砸肿了怎么办 上体育课时脚不慎扭伤怎么办 孩子受伤没有参加考试怎么办 如果我想离婚对方不愿意怎么办 金龙自切尾怎么办 微信无法正常打开怎么办 大三下体育挂了怎么办 大二体育挂科了怎么办 大四体育老师不给成绩怎么办 大四必修挂科了怎么办 大学挂了20科怎么办 大专重修都没过怎么办 如果孩子一年级就考不及格怎么办 后滚翻做不过去怎么办