pyhton+Selenium Girl2

Selenium Girl的作用

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

Selenium Server环境配置

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

下载Selenium Server

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

配置Java环境

Java环境的介绍:
Java环境分为JDK和JRE两种。jdk是面向开发人员使用的sdk,它提供了Java的开发环境和运行环境;jre是指Java的运行环境,面向的是Java程序的使用者,也就是用户。
Java下载地址:
下载后得到:jdk-8u111-windows-x64.exe,双击安装。安装好后配置环境变量,在dos中验证安装是否成功。
cmd.exe
java
......
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 5556
cmd.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 Remote
from 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 Remote
import threading
from 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()







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值