如何用 Selenium Grid 4 的 relay 功能把多个 Appium 服务器接入同一个 Hub?
如何用 Selenium Grid 4 的 relay 功能把多个 Appium 服务器接入同一个 Hub【免费下载链接】appiumCross-platform automation framework for all kinds of apps, built on top of the W3C WebDriver protocol项目地址: https://gitcode.com/GitHub_Trending/ap/appium当你手上有多个 Appium 服务器实例比如分别跑不同设备、不同 driver 或不同端口配置希望测试客户端只对接一个统一入口时可以用 Selenium Grid 4 的 relay 功能把每个 Appium 服务器挂在 Grid node 后面再通过一个 Grid hub 统一管理。最终效果是节点探测到各自的 Appium 服务器并注册到 hub 后所有 Appium 流量都可以经由单个 hub 端点默认为http://localhost:4444发出。这套方案一共会跑 5 个进程2 个 Appium 服务器、2 个 Grid node、1 个 Grid hub。文档建议每个进程开一个独立的终端窗口避免日志混淆。准备条件Appium 已安装例如通过npm install -g appium详见 安装文档。机器上有 Java 环境和 Selenium 4 的 jar 文件下文命令中的/path/to/selenium.jar指代它需要替换成你本地 jar 文件的实际路径。定义每个 Appium 实例的配置文件每个 Appium 实例各用一份配置文件写清该服务器独有的信息——尤其是端口目的是避免同主机上其他 driver 抢占系统端口或资源。下面示例中 2 台服务器使用不同的 server 端口、wdaLocalPort、mjpegServerPort等# appium1.yml server: port: 4723 use-drivers: - xcuitest default-capabilities: appium:wdaLocalPort: 8100 appium:mjpegServerPort: 9100 appium:mjpegScreenshotUrl: http://localhost:9100 appium:platformVersion: 26.0 appium:deviceName: iPhone 17第二份配置只需调整端口避免冲突示例中的设备名和platformVersion按你的实际设备改# appium2.yml server: port: 4733 use-drivers: - xcuitest default-capabilities: appium:wdaLocalPort: 8110 appium:mjpegServerPort: 9110 appium:mjpegScreenshotUrl: http://localhost:9110 appium:platformVersion: 26.0 appium:deviceName: iPhone 16配置文件的格式和字段说明可参考 Appium 配置文件文档注意 CLI 参数优先于配置文件同时设置时以 CLI 为准。定义 Grid node 配置文件每台 Appium 服务器对应一个 Grid node由 node 负责 relay 命令、上报容量和在线状态。node 配置里要写三部分node 自己监听的端口、事件总线地址指向 hub、以及 relay 段指向要代理的 Appium 服务器地址并声明接受哪些 capability 组合来转发会话请求# node1.toml [server] port 5555 [node] detect-drivers false [events] publish tcp://HUB_IP_ADDRESS:4442 subscribe tcp://HUB_IP_ADDRESS:4443 [relay] url http://localhost:4723 status-endpoint /status configs [ 1, {\platformName\: \iOS\, \appium:automationName\: \XCUITest\} ]# node2.toml [server] port 5565 [node] detect-drivers false [events] publish tcp://HUB_IP_ADDRESS:4442 subscribe tcp://HUB_IP_ADDRESS:4443 [relay] url http://localhost:4733 status-endpoint /status configs [ 1, {\platformName\: \iOS\, \appium:automationName\: \XCUITest\} ]两个需要替换/确认的地方HUB_IP_ADDRESS替换为 hub 所在机器的 IP 地址relay.url指向对应 Appium 服务器地址要与上面 YAML 里的server.port一致示例中 node1 → 4723node2 → 4733。同时注意每个 node 配置自身的端口也要不同示例为 5555 和 5565relay.configs里的 capability JSON 决定哪些会话请求会被转发到该 node 后面的 Appium 服务器。启动全部 5 个进程建议每个进程开一个独立终端依次启动appium --config appium1.ymlappium --config appium2.ymljava -jar /path/to/selenium.jar node --config node1.tomljava -jar /path/to/selenium.jar node --config node2.tomljava -jar /path/to/selenium.jar hub其中--config是 Appium 用来指定配置文件自定义位置的参数/path/to/selenium.jar需要替换为你本地 Selenium jar 的实际路径。验证接入是否成功启动后等待片刻让 node 完成两件事探测到各自的 Appium 服务器、向 hub 完成注册。之后就可以把全部 Appium 流量发往唯一的 hub 端点默认http://localhost:4444会话请求会按 relay 配置被转发到对应的 Appium 实例而不是直接连单个 Appium 端口。如果你的 Appium 服务器和 node 分布在内网的不同机器上同样可以组成更大的 grid——此时注意 relay 的url要写对端机器的可达地址而不是localhost。边界说明以上是 Selenium Grid 4 的做法。如果你用的是 Selenium Grid 3机制不同Appium 通过--nodeconfig服务器参数直接注册进 Gridappium server --nodeconfig /path/to/nodeconfig.json --base-path/wd/hub在 nodeconfig JSON 中定义browserName、version、platform等 capability 供 Grid 路由若 Appium 与 Grid 不在同一台机器host和url必须写外部名称/IPlocalhost和127.0.0.1会导致 Grid 无法正确连接。两种方案的完整示例见 Grid 集成文档。【免费下载链接】appiumCross-platform automation framework for all kinds of apps, built on top of the W3C WebDriver protocol项目地址: https://gitcode.com/GitHub_Trending/ap/appium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考