Python+Selenium笔记(十一):配置selenium Grid

(一) 前言

Selenium Grid可以将测试分布在若干个物理或虚拟机器上,从而实现分布方式或并行方式执行测试。

这个链接是官方的相关说明。

https://github.com/SeleniumHQ/selenium/wiki/Grid2

(二) Selenium Grid

大概就是这个意思(一个中心节点(HUB),N个子节点(NODE,操作系统+浏览器))

(三) 环境配置

1. 前提:已经配置相应的 JDK环境(LINUX自带JDK环境(我装的LINUX自带的是1.8),WINDOWS要自己配置JDK环境(我装的是1.9))

2. https://docs.seleniumhq.org/download/ 下载 Selenium Standalone Server

3. 启动Selenium Grid server(hub)

Selenium Grid server(hub,作为中心节点的电脑),切换到Selenium Standalone所在的目录(直接在Selenium Standalone所在的文件夹shift+鼠标右键,选择在此处打开命令窗口,或者CD 路径),然后执行下面的命令

java -jar selenium-server-standalone-<version>.jar -role hub
例如:java -jar selenium-server-standalone-3.9.1.jar -role hub
可以加 -port 指定端口号,默认4444
http://localhost:4444/grid/console 启动后用这个地址访问

4. 配置node(节点)

(1)   Node(也就是其他电脑或虚拟机环境,也可以直接将hub所在的那台电脑添加为node),在系统变量path中加上相应的驱动文件的路径。(例如:将chromedriver所在的路径添加到path中,之前已经说过火狐、IE、谷歌浏览器环境的配置)

(2)   执行下面的命令

java -jar selenium-server-standalone-3.9.1.jar -role node -browser "browserName=firefox,version=62,maxSession=3,platform=WINDOWS" -hub http://192.168.4.196:4444/grid/register -port 5555

说明:

browserName:浏览器名称

Version:浏览器版本

maxSession:支持并发浏览器实例的数量

platform:操作系统

-hub:http:// (Selenium Grid server(hub)的IP)+启动时设置的端口号/ grid/register

-port :指定端口号

(3)   要在同一电脑(或虚拟机)添加其他节点,再打开一个CMD窗口,运行上面的命令就行了(记得修改浏览器信息),记得同一电脑上端口号别重复。

(四) 环境配置好后如下图所示(我电脑开着一个linux的虚拟机太卡了,有点浪费时间的感觉,不想弄了,不过应该和windows上的差距不会太大,有环境的可以试下添加path变量、在终端执行相关命令添加节点)

(五) 示例(运行脚本会发现,直接在相匹配的环境中运行测试)

 1 import sys
 2 import unittest
 3 from selenium import webdriver
 4 from selenium.webdriver.common.action_chains import ActionChains
 5 class SearchTest(unittest.TestCase):
 6     #定义2个全局属性,没有外部参数时,使用默认值
 7     PLATFORM = "WINDOWS"
 8     BROWSER = "firefox"
 9     @classmethod
10     def setUpClass(cls):
11         #设置操作系统和浏览器
12         desired_caps = {}
13         desired_caps[‘platform‘] = cls.PLATFORM
14         desired_caps[‘browserName‘] = cls.BROWSER
15         #这里的IP就是HUB所在电脑的ip
16         cls.driver = webdriver.Remote(‘http://192.168.3.2:4444/wd/hub‘,desired_caps)
17         cls.driver.implicitly_wait(10)
18         cls.driver.maximize_window()
19         cls.driver.get("https://www.cnblogs.com/")
20
21     def test_search_by_look(self):
22         seach_class = self.driver.find_element_by_xpath(‘//li/a[@href="/cate/2/"]‘)
23         #定位编程语言下的小类Python
24         seach_small =self.driver.find_element_by_xpath(‘//li/a[@href="/cate/python/"]‘)
25         ActionChains(self.driver).move_to_element(seach_class).perform()
26         seach_small.click()
27         #检查打开的网页标题是不是 Python - 网站分类 - 博客园
28         self.assertEqual(self.driver.title,"Python - 网站分类 - 博客园" )
29
30     @classmethod
31     def tearDownClass(cls):
32         cls.driver.quit()
33
34 if __name__ == ‘__main__‘:
35     #使用命令行运行脚本时,如果添加了参数,PLATFORM和BROWSER使用外部参数
36     if len(sys.argv)>1:
37         SearchTest.PLATFORM = sys.argv.pop()
38         SearchTest.BROWSER = sys.argv.pop()
39     #加verbosity=2参数,在命令行中显示具体的测试方法
40     unittest.main(verbosity=2)

(六) 未解决的问题(单单配置环境是不够的)

1、 实现多环境并行运行同一测试脚本

2、 实现多个测试脚本并行运行(例如几百个测试脚本要是一个个运行的话,要用很长时间)

原文地址:https://www.cnblogs.com/simple-free/p/8468480.html

时间: 2024-10-10 02:09:07

Python+Selenium笔记(十一):配置selenium Grid的相关文章

[Python爬虫] 之十一:Selenium +phantomjs抓取活动树中会议活动

最近在抓取活动树网站 (http://www.huodongshu.com/html/find.html) 上数据时发现,在用搜索框输入中文后,点击搜索,phantomjs抓取数据怎么也抓取不到,但是用IE驱动就可以找,后来才发现了原因. 例如URL: http://www.huodongshu.com/html/find_search.html?search_keyword=数字, phantomjs抓取的内存中url变成了http://www.huodongshu.com/html/find

python 学习笔记十一 SQLALchemy ORM(进阶篇)

SqlAlchemy ORM SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如: MySQL-Python mysql+mysqldb://<user>:<password>@<host>[:<port&g

Python学习笔记十一:面向对象

面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据. 方法重载:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重载. 实例变量:定义在方法中的变量,只作用于当前实例的类.

python学习笔记十一:操作mysql

一.安装MySQL-python # yum install -y MySQL-python 二.打开数据库连接 #!/usr/bin/python import MySQLdb conn = MySQLdb.connect(user='root',passwd='admin',host='127.0.0.1') conn.select_db('test') cur = conn.cursor() 三.操作数据库 def insertdb(): sql = 'insert into test(n

python学习笔记(十一) - 正则表达式

一.基础知识: \d 匹配一个数字 \w 匹配一个字母或数字 . 匹配任意字符 * 表示任意个字符 + 表示至少一个字符 ? 表示0个或1个字符 {n} 表示n个字符,{n, m} 表示n - m个字符 \s 表示匹配一个空格(包括Tab等空白符),\s+表示至少一个空格 [0-9a-zA-Z\_] 可以匹配一个数字.字母或者下划线 [0-9a-zA-Z\_]+ 可以匹配至少由一个数字.字母或者下划线组成的字符串 [a-zA-Z\_][0-9a-zA-Z\_]* 可以匹配由字母或下划线开头,后接

python学习笔记(十一)-python程序目录工程化

在一个程序当中,一般都会包含文件夹:bin.conf.lib.data.logs,以及readme文件. 所写程序存放到各自的文件夹中,如何进行串联? 首先,通过导入文件导入模块方式,引用其他人写好的代码. 其次,找到最顶层的程序所在文件夹,加入到环境变量中 import sys,os BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(file))) #取到工程目录 sys.path.insert(0,BASE_PATH)#加

自动化测试学习笔记1——Python + Selenium自动化测试环境配置

Python + Selenium自动化测试环境配置(Windows平台) 准备工具: 下载python    http://python.org/getit/ 下载setuptools http://pypi.python.org/pypi/setuptools 下载pip https://pypi.python.org/pypi/pip 下载selenium   https://pypi.python.org/pypi/selenium 下载selenium服务端 https://code.

Python selenium chrome 环境配置

Python selenium chrome 环境配置 一.参考文章: 1. 记录一下python easy_install和pip安装地址和方法 http://heipark.iteye.com/blog/1916758 2. selenium + python自动化测试环境搭建 http://www.cnblogs.com/fnng/archive/2013/05/29/3106515.html 3. Python-selenium-Firefox-chrome-IE问题解决方法 http:

Python+Selenium笔记(四):unittest的Test Suite(测试套件)

(一) Test Suite测试套件 一个测试套件是多个测试或测试用例的集合,是针对被测程序的对应的功能和模块创建的一组测试,一个测试套件内的测试用例将一起执行. 应用unittest的TestSuites特性,可以将不同的测试组成一个逻辑组,然后设置统一的测试套件,并通过一个命令来执行测试.这都是通过TestSuites.TestLoader和TestRunn类来实现的. (二) 类级别的setUp()方法和tearDown()方法 使用setUpClass()方法和tearDownClass

Python+Selenium笔记(十):元素等待机制

 (一) 前言 突然的资源受限或网络延迟,可能导致找不到目标元素,这时测试报告会显示测试失败.这时需要一种延时机制,来使脚本的运行速度与程序的响应速度相匹配,WebDriver为这种情况提供了隐式等待和显式等待两种机制. (二) 隐式等待 一旦设置隐式等待时间,就会作用于这个WebDriver实例的整个生命周期(对所有的元素查找都生效),设置隐式等待时间后,Webdriver会在一定时间内持续检测和搜寻DOM,以便于查找一个或多个不是立即加载成功并可用的元素.隐式等待的默认时间是0. WebDr