Selenium Grid分布式测试环境搭建
项目需要测试多浏览器兼容性 因此对selenium进行调研使用
链接: 下载Selenium Grid.
需要把下载的selenium-server-standalone-<version>.jar 和 浏览器webdriver放在同一目录
第 1 步:启动集线器
Hub 是接收所有测试请求并将它们分发到正确节点的中心点。
打开命令提示符并导航到复制 selenium-server-standalone 文件的目录。输入以下命令:
java -jar selenium-server-standalone-<version>.jar -role hub
默认情况下,集线器将使用端口 4444 自动启动。要更改默认端口,您可以在运行命令时添加可选参数 -port
您可以通过打开浏览器窗口并导航到:http://localhost:4444/grid/console来查看集线器的状态
第 2 步:启动节点
无论您是要运行具有新 WebDriver 功能的网格,还是具有 Selenium 1 RC 功能的网格,或同时运行两者,
您都可以使用相同的 selenium-server-standalone jar 文件来启动节点。
在其他机器启动可把 localhost 改为 服务器IP 进行关联
java -jar selenium-server-standalone-<version>.jar -role node -hub http://localhost:4444/grid/register
注意:如果提供了“-role”选项且不是集线器,则如果未指定端口,则默认为 5555。
为了向后兼容,“wd”和“rc”角色仍然是“node”角色的有效子集。但是这些角色将远程连接的类型限制为它们对应的 API,
而“节点”允许 RC 和 WebDriver 远程连接。
这时通过刷新浏览器可以查看电脑信息,初步配置selenium成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210707164959920.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NjA2Nzkz,size_16,color_FFFFFF,t_70)
第3步:运行调试代码
需要使用RemoteWebDriver和DesiredCapabilities对象来定义您希望使用的浏览器、版本和平台。创建要针对其运行测试的目标浏览器功能:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME
)
driver.get("http://www.google.com")
driver.quit()
pytest-xdist实现并发执行测试用例
前面提到selenium grid执行并不是并发的,要实现并发执行测试用例还需要多线程机制配和,pytest-xdist插件支持多线程并发执行测试用例,首先使用pip安装pytest-xdist插件。
pip install pytest-xdist
安装成功后,执行如下命令即可实现并发执行,其中-n后面的参数表示cpu的数量,也可以指定为auto,它会自动检测cpu核数并发运行用例。
pytest -n 6
pytest -n auto
另外,selenium需要通过Remote方式执行,以chrome为例,关键部分的代码如下:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from time import sleep
import pytest
driver = webdriver.Remote(
command_executor='http://192.168.10.88:4444/wd/hub',
desired_capabilities=DesiredCapabilities.FIREFOX,
)
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("search content")
driver.find_element_by_xpath('//input[@type="submit"]').click()
sleep(30)
driver.quit()