Selenium Grid分布式测试环境搭建

Selenium Grid简介
Selenium Grid实际上是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成。Hub用来管理各个代理节点的注册信息和状态信息,并且接受远程客户端代码的请求调用,然后把请求的命令转发给代理节点来执行(官方说明)

简单来说通过selenium grid可以实现一台服务器控制多台node节点机器远程执行selenium自动化测试脚本。比如自动化测试脚本存放在一台hub主机上,那么通过grid就可以控制多台node客户端来执行hub主机上的自动化测试脚本,下面我们就开始配置一下分布式测试运行环境

环境准备
其实hub主机和node节点可以同时配置在一台物理机上,但是为了模拟真实的测试环境,我准备了2台真实的物理机,当然你也可以使用一台物理机+虚拟机的方式练习

1. 准备2台处于同一个局域网下的物理机,保证2台物理机能够相互ping通

2.下载selenium-server-standalone包

3.作为node节点的物理机需要配置好浏览器和对应驱动,并把驱动程序加入环境变量

4.hub主机和node主机均需要配置java jdk 1.8 (切记本版,否则可能配置不成功)

问题
如果你的两台机器处于同一个网络,但是无法相互ping通,你可以尝试下面的办法解决

打开控制面板-打开防火墙设置-点击【高级设置】-点击【入站规则】找到下面两个规则并开启

下载selenium-server-standalone

访问官网 Downloads | Selenium 下载 selenium-server-standalone

下载好selenium-server-standalone-3.141.59.jar包后,分别放到两台电脑的任意位置

配置浏览器驱动
浏览器驱动如何配置,请自行百度(谷歌的驱动可以从这里下载https://npm.taobao.org/mirrors/chromedriver),我后面主要使用的是firefox浏览器

安装JDk
https://www.cnblogs.com/linuxchao/p/linuxchao-jenkins-setup.html 我的这篇文章里面有安装jdk的教程,但是请注意jdk的版本

搭建环境
配置hub主机
我选择作为hub主机的地址为:192.168.1.103

打开cmd终端,并切换到selenium-server-standalone-3.141.59.jar所在的目录下,执行命令:java -jar selenium-server-standalone-3.141.59.jar -role hub

执行命令后,会初始化本机为hub服务器,自动分配一个ip地址(如图,这个地址是个虚拟地址,作为hub的主机地址,因为同一台机器可以同时作为hub和note,所以会自动生成一个虚拟地址),端口号默认为4444,当然你在初始化hub主机的时候也可以修改默认端口,添加-port=指定端口号即可

初始化完成后,我们可以访问http://192.168.24.1:4444:/grid/console来查看初始化的hub状态如图

配置node节点
我选择的node节点机器的地址为:192.168.1.102

同样打开cmd终端,并切换到selenium-server-standalone-3.141.59.jar所在的目录下,执行命令:

java -jar selenium-server-standalone-3.141.59.jar -role webdriver -browser "browserName=firefox,platform=WINDOWS" -hubHost 192.168.1.103(hub所在的主机地址)

如果你使用的浏览器是chrome,可能你需要执行这个命令(别问我为什么,我使用chrome浏览器的时候,使用上面的命令,只是修改了browserName=chrome,没有成功)

java -jar -Dwedriver.chrome.driver=driver所在的目录\chromedriver.exe selenium-server-standalone-3.141.59.jar -browser "browserName=chrome, version=75" -role node -hubHost 192.168.1.103

命令执行完毕后你会看到下面的输出信息

ok,现在我们再次访问一下hub主机的地址看下状态

右边就是我初始化成功后的远程node节点机器的配置,左边我也配置了一个,是在hub所在的主机配置的一个note节点

到这里,我们的分布式自动化测试环境就配置完成了,接下来开始编写我们的测试代码,看下是否能够在远程note机器上执行测试

测试脚本
测试脚本放在hub所在的机器(我们的目的就是控制远程note机器执行测试(打开浏览器执行测试),并不是hub所在机器执行(要不然还有啥意义呢?))

"""
------------------------------------
@Time : 2019/7/6 16:55
@Auth : linux超
@File : testCaseNodeB.py
@IDE  : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ   : 28174043@qq.com
@GROUP: 878565760
------------------------------------
"""
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class TestSeleniumGrid(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Remote(command_executor="http://192.168.1.102:16891/wd/hub",
                                       desired_capabilities={"browserName": "firefox",  # 浏览器名称
                                                             "platform": "WINDOWS"
                                                             })

    def test_grid(self):
        self.driver.get("https://www.baidu.com")
        self.driver.find_element_by_id('kw').send_keys('linux超')
        self.driver.find_element_by_id('su').click()
        WebDriverWait(self.driver, 10). \
            until(EC.visibility_of_element_located((By.XPATH, '//a[text()="https://www.cnblogs.com/"]')))
        page_source = self.driver.page_source
        self.assertIn('linux', page_source)

    def tearDown(self):
        self.driver.quit()


if __name__ == '__main__':
    unittest.main()
执行过程
我们运行hub主机上的代码然后看一下note节点机器上执行的过程, 并注意看hub主机和note点击机器cmd终端的输出结果

执行过程中有一些警告信息,也不知道什么原因,我还没找到解决的办法,但是并不影响测试的执行,到此为止整个测试环境搭建就完成了

最后
搭建过程需要注意

1.浏览器和浏览器驱动版本要匹配,且添加到系统环境变量

2.初始化hub和node时的命令不要敲错,算这次我一共搭过2次环境, 之前2次折腾命令参数就折腾了好久(对一个参数选项不太理解)

3.不要被hub和node机器的ip搞晕,脚本中的要在哪里运行测试就要配置哪个node节点机器的地址 (command_executor="http://192.168.1.102:16891/wd/hub",而且要主要后面接的/wd/hub是固定的不要写错)

需要注意的差不多就这么多吧, 自己不手动配置一遍你也不会知道究竟会遇到什么问题

TODO
配置这个测试环境之后,我一直有个疑问,我的代码只能在一个node上的一个浏览器上执行,分布式分布式,这样的话还有啥意义呢?我的理解是应该能同时在不同的node机器上不同的浏览器上运行才符合这个概念,所以呢我试着使用python线程并发修改了几次代码也没有成功,试着找资料也没有解决我这个疑惑,也可能我理解的有问题,不管怎么样了,以后有了思路再更新这篇文章吧!

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  1. 文档获取方式:

  2. 加入我的软件测试交流群:1007119548免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/475689.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DoRA(权重分解低秩适应):一种新颖的模型微调方法

来自:小互 DoRA(权重分解低秩适应):一种新颖的模型微调方法 DoRA在LoRA的基础上进一步发展,通过将预训练权重分解为“幅度”和“方向”两个部分进行微调。 这种权重分解方法允许DoRA更精细地控制模型的学习过程&…

模型训练 —— AI算法初识

一、背景 AI算法中模型训练的主要目的是为了让机器学习算法从给定的标注数据中学习规律、特征和模式,并通过调整模型内部参数,使模型能够对未见过的数据进行准确预测或决策。具体来说: 1. **拟合数据**:模型通过训练来识别输入数…

Kafka(二)

第 4 章 Kafka Broker 4.1 Kafka Broker 工作流程 4.1.1 Zookeeper 存储的 Kafka 信息 (1)启动 Zookeeper 客户端。 bin/zkCli.sh (2)通过 ls 命令可以查看 kafka 相关信息。 ls /kafka 4.1.2 Kafka Broker 总体工作流程…

图像接入协议之LVDS

LVDS (Low-Voltage Differential Signaling) 是一种高速串行通信协议,用于在电子设备之间传输数据。它通常用于连接液晶显示屏、摄像头、显示器、模拟数字转换器(ADC)等设备。 LVDS具有以下特点 差分信号传输 LVDS使用差分信号传输数据&am…

K8s进阶之路-控制器无状态服务:

RC/RS/Deployment 控制器 deployment无状态(最常用): nginx和Apache statefulset有状态: mysql和redis damonset初始化 job一次性任务 cronjob任务计划 1无状态:不会对本地环境产生依赖如:nginx和Apache …

Docker 镜像是什么?常用的镜像命令有哪些?

docker 镜像仓库相关的命令:Docker 镜像仓库是什么?有哪些镜像仓库命令?-CSDN博客 1. Docker 镜像 Docker 镜像是一个轻量级、独立、可执行的软件包,它包含了运行特定应用程序所需的所有内容:代码、运行时环境、系统工…

【uCore 操作系统】1. 应用程序与基本执行环境

文章目录 【 1. 代码框架简述 】1.1 OS 是怎么跑起来的?1.1.1 qemu 的作用1.1.2 rustsbi.bin 的作用 1.2 qemu 是怎么跑起来的?1.3 OS 文件夹1.3.1 kernel.ld1.3.2 entry.S1.3.3 main.c1.3.4 sbi.c 1.4 bootloader 文件夹 【 2. makefile 和 qemu 】2.1 …

第三节作业:基于 InternLM 和 LangChain 搭建你的知识库

参考文档:https://github.com/InternLM/tutorial/tree/main/langchain 基础作业:复现课程知识库助手搭建过程 (截图) 1.环境配置 2.知识库搭建 (1)数据收集 收集由上海人工智能实验室开源的一系列大模型工具开源仓库作为语料库来…

软件价值12-射箭游戏

射箭游戏,按空格键发射,打击移动靶,左上角显示成绩状态。 代码: import pygame import sys import random# 初始化Pygame pygame.init()# 设置窗口大小 SCREEN_WIDTH 800 SCREEN_HEIGHT 600 screen pygame.display.set_mode((…

Linux网络----防火墙

一、安全技术和防火墙 1、安全技术 入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安…

分享几个丝滑oled代码

最近一段业余时间在捣鼓esp32,发现对于一个搞diy的来说,它的生态,不管是开发环境、氛围还是可玩度都是独一挡的,国内外基于此的扩展真是太多了,找了几个通过按键/旋钮进行0.96寸OLED控制的案例,超级丝滑&am…

Docker打包离线镜像到本地,上传解压到服务器

在我们部署Docker镜像时,难免会遇到服务器没有网络情况,Centos7离线安装Docker 这篇文章中,我们已经离线安装Docker完成,现在需要离线创建容器。 1 查看所有镜像 docker images注:如果我们想打包本服务器没有的镜像&…