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)
}

代码说明:

  1. 首先导入必要的包,包括selenium驱动和chrome驱动
  2. 设置GGR服务器URL,包含认证信息
  3. 配置浏览器能力和选项
  4. 连接到GGR服务器
  5. 执行基本的浏览器操作(导航、获取标题等)
  6. 最后关闭会话

配额文件配置详解

配额文件(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
  • 多个浏览器版本支持
  • 按区域划分的节点
  • 每个节点的并发会话数限制

注意事项

  1. GGR项目目前已不再维护,建议考虑使用Moon作为替代方案。
  2. 确保配额文件中的浏览器名称和版本与实际Selenium节点上的浏览器匹配。
  3. 在生产环境中,建议使用HTTPS和更安全的认证方式。
  4. 监控GGR和Selenium节点的资源使用情况,根据负载调整配额配置。

更多关于golang轻量级Selenium WebDriver请求路由与代理服务器插件ggr的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于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 - 健康检查

最佳实践

  1. 将GGR部署在负载均衡器后面以实现高可用
  2. 为不同的团队或项目配置不同的配额
  3. 定期监控GGR和底层Selenium节点的资源使用情况
  4. 使用Docker简化部署

总结

GGR是一个强大的轻量级解决方案,可以有效地管理和路由Selenium WebDriver请求。通过合理的配置,可以实现负载均衡、配额管理和高可用性,是构建稳定自动化测试基础设施的重要组件。

以上示例展示了GGR的基本用法,您可以根据实际需求进行扩展和定制。

回到顶部