golang轻量级Selenium WebDriver请求路由与代理服务器插件ggr的使用
Golang轻量级Selenium WebDriver请求路由与代理服务器插件GGR的使用
Go Grid Router简介
Go Grid Router (简称GGR) 是一个轻量级的主动负载均衡器,用于创建可扩展和高可用的Selenium集群。
快速入门指南
1. 安装Docker
首先需要在主机上安装Docker。
2. 创建配置目录
$ mkdir -p /etc/grid-router/quota
3. 创建用户认证文件
$ htpasswd -bc /etc/grid-router/users.htpasswd test test-password
4. 启动Selenium独立服务器
$ java -jar selenium-server-standalone.jar -port 4445
或者你也可以选择启动Selenoid替代。
5. 创建配额文件
创建/etc/grid-router/quota/test.xml
文件,内容如下(确保使用正确的浏览器名称和版本):
<qa:browsers xmlns:qa="urn:config.gridrouter.qatools.ru">
<browser name="firefox" defaultVersion="59.0">
<version number="59.0">
<region name="1">
<host name="localhost" port="4445" count="1"/>
</region>
</version>
</browser>
</qa:browsers>
注意:文件名应与你在htpasswd文件中添加的用户名对应。例如我们之前添加了用户test
,所以这里创建test.xml
。
6. 启动GGR容器
# docker run -d --name ggr -v /etc/grid-router/:/etc/grid-router:ro --net host aerokube/ggr:latest-release
7. 访问GGR
通过以下URL访问GGR(端口4444),访问方式与Selenium Hub相同:
http://test:test-password@localhost:4444/wd/hub
Golang使用示例
以下是一个使用Golang通过GGR连接Selenium的完整示例:
package main
import (
"fmt"
"time"
"github.com/tebeka/selenium"
"github.com/tebeka/selenium/chrome"
)
func main() {
// GGR服务器地址
const (
ggrURL = "http://test:test-password@localhost:4444/wd/hub"
)
// 设置Chrome浏览器选项
caps := selenium.Capabilities{
"browserName": "chrome",
}
// Chrome特定选项
chromeCaps := chrome.Capabilities{
Path: "",
Args: []string{
"--headless", // 无头模式
"--no-sandbox",
"--disable-dev-shm-usage",
},
}
caps.AddChrome(chromeCaps)
// 连接到GGR
wd, err := selenium.NewRemote(caps, ggrURL)
if err != nil {
panic(fmt.Sprintf("Failed to open session: %s\n", err))
}
defer wd.Quit()
// 导航到示例网页
err = wd.Get("https://www.example.com")
if err != nil {
panic(fmt.Sprintf("Failed to load page: %s\n", err))
}
// 获取页面标题
title, err := wd.Title()
if err != nil {
panic(fmt.Sprintf("Failed to get page title: %s\n", err))
}
fmt.Printf("Page title: %s\n", title)
// 等待5秒查看效果
time.Sleep(5 * time.Second)
}
代码说明:
- 首先导入必要的包,包括selenium驱动和chrome驱动
- 设置GGR服务器URL,包含认证信息
- 配置浏览器能力和选项
- 连接到GGR服务器
- 执行基本的浏览器操作(导航、获取标题等)
- 最后关闭会话
配额文件配置详解
配额文件(test.xml
)用于定义用户的浏览器配额和路由规则。以下是一个更复杂的配置示例:
<qa:browsers xmlns:qa="urn:config.gridrouter.qatools.ru">
<!-- Firefox浏览器配置 -->
<browser name="firefox" defaultVersion="78.0">
<version number="78.0">
<region name="europe">
<host name="selenium-node-1" port="4444" count="5"/>
<host name="selenium-node-2" port="4444" count="5"/>
</region>
<region name="asia">
<host name="selenium-node-3" port="4444" count="3"/>
</region>
</version>
<version number="77.0">
<region name="europe">
<host name="selenium-node-4" port="4444" count="2"/>
</region>
</version>
</browser>
<!-- Chrome浏览器配置 -->
<browser name="chrome" defaultVersion="83.0">
<version number="83.0">
<region name="global">
<host name="chrome-node-1" port="4444" count="10"/>
<host name="chrome-node-2" port="4444" count="10"/>
</region>
</version>
</browser>
</qa:browsers>
这个配置定义了:
- 两种浏览器:Firefox和Chrome
- 多个浏览器版本支持
- 按区域划分的节点
- 每个节点的并发会话数限制
注意事项
- GGR项目目前已不再维护,建议考虑使用Moon作为替代方案。
- 确保配额文件中的浏览器名称和版本与实际Selenium节点上的浏览器匹配。
- 在生产环境中,建议使用HTTPS和更安全的认证方式。
- 监控GGR和Selenium节点的资源使用情况,根据负载调整配额配置。
更多关于golang轻量级Selenium WebDriver请求路由与代理服务器插件ggr的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang轻量级Selenium WebDriver请求路由与代理服务器插件ggr的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang轻量级Selenium WebDriver请求路由与代理服务器插件GGR使用指南
GGR (Go Grid Router) 是一个轻量级的Selenium WebDriver请求路由器和代理服务器,主要用于管理Selenium Grid中的浏览器会话路由。
GGR简介
GGR的主要特点:
- 轻量级,基于Go语言开发
- 支持请求路由到不同的Selenium Hub节点
- 提供负载均衡功能
- 支持配额管理
- 易于部署和扩展
安装GGR
# 下载预编译二进制文件
wget https://github.com/aerokube/ggr/releases/download/1.8.0/ggr_linux_amd64
# 或从源码编译
go get -u github.com/aerokube/ggr
基本配置
创建配置文件/etc/ggr/hosts.json
:
{
"example.com": {
"browsers": {
"chrome": {
"default": "47.0",
"versions": {
"47.0": {
"image": "selenoid/chrome:47.0",
"port": "4444",
"path": "/",
"tmpfs": {
"/tmp": "size=128m"
}
}
}
}
},
"hosts": {
"selenoid-1.example.com": {
"port": 4444,
"count": 5,
"username": "user",
"password": "password"
}
}
}
}
启动GGR
ggr -quotaDir /etc/ggr/quota -listen :4444 -guestsAllowed
Golang客户端示例
以下是使用Golang通过GGR连接到Selenium Grid的示例代码:
package main
import (
"fmt"
"time"
"github.com/tebeka/selenium"
"github.com/tebeka/selenium/chrome"
)
func main() {
// GGR服务器地址
const (
ggrHost = "http://ggr.example.com:4444/wd/hub"
)
// 设置Chrome选项
caps := selenium.Capabilities{
"browserName": "chrome",
"version": "47.0",
"platform": "LINUX",
}
// 如果需要特定配置
chromeCaps := chrome.Capabilities{
Path: "",
Args: []string{
"--headless",
"--no-sandbox",
"--disable-dev-shm-usage",
},
}
caps.AddChrome(chromeCaps)
// 连接到GGR
wd, err := selenium.NewRemote(caps, ggrHost)
if err != nil {
panic(fmt.Sprintf("Failed to open session: %s\n", err))
}
defer wd.Quit()
// 导航到网页
err = wd.Get("https://www.example.com")
if err != nil {
panic(fmt.Sprintf("Failed to load page: %s\n", err))
}
// 获取页面标题
title, err := wd.Title()
if err != nil {
panic(fmt.Sprintf("Failed to get page title: %s\n", err))
}
fmt.Printf("Page title: %s\n", title)
time.Sleep(5 * time.Second)
}
高级功能
1. 配额管理
GGR支持基于用户的配额管理。创建配额文件/etc/ggr/quota/user1
:
10 chrome 47.0
5 firefox 45.0
2. 负载均衡
GGR会自动在配置的多个主机之间分配负载:
"hosts": {
"selenoid-1.example.com": {
"port": 4444,
"count": 5
},
"selenoid-2.example.com": {
"port": 4444,
"count": 5
}
}
3. 自定义路由规则
可以通过修改配置文件实现基于浏览器版本或平台的路由。
监控与日志
GGR提供以下监控端点:
/status
- 获取当前状态/hosts
- 列出所有配置的主机/ping
- 健康检查
最佳实践
- 将GGR部署在负载均衡器后面以实现高可用
- 为不同的团队或项目配置不同的配额
- 定期监控GGR和底层Selenium节点的资源使用情况
- 使用Docker简化部署
总结
GGR是一个强大的轻量级解决方案,可以有效地管理和路由Selenium WebDriver请求。通过合理的配置,可以实现负载均衡、配额管理和高可用性,是构建稳定自动化测试基础设施的重要组件。
以上示例展示了GGR的基本用法,您可以根据实际需求进行扩展和定制。