使用 BrowserStack 自动 + 云托管测试具有 IP 地址白名单的站点 CI

Testing site with IP addr whitelist using BrowserStack automate + cloud hosted CI

我有一个测试系统(各种网页/网络应用程序),该系统托管在只能通过具有白名单 IP 地址的计算机访问的环境中。白名单我管

我们的 CI 系统是云托管的 (Gitlab),因此 VM 会根据需要动态启动,以 运行 自动化集成测试作为构建管道的一部分。

有问题的测试使用 BrowserStack 自动化来 运行 基于 Selenium 的测试,这意味着 BrowserStack 自动化驱动的请求的源 IP 地址命中测试环境是动态的,因为 BS 是云托管的。我们的测试 运行 调用 BrowserStack 自动化的 ner 机器的 IP 地址也是动态的。

在测试环境引入IP白名单之前,整个系统运行良好。由于启用了白名单,BrowserStack 测试无法再访问环境 URL(由于无法将动态 IP 列入白名单)。

我一直在尝试使用 BS "Local Testing" 功能使 CI 驱动测试再次运行,此处概述 https://www.browserstack.com/local-testing

我已经设置了一个专用 Linux 具有静态 IP 地址的虚拟机(云托管)。我已经使用我们的 BS 密钥安装并正在 运行 宁 BrowserStackLocal.exe 二进制文件。它启动正常,并表示它已通过网络套接字连接到 BrowserStack。我的理解是,这应该会导致来自我的 CI / BrowserStack 自动化驱动测试的所有 http(s) 等请求通过该独立机器(通过 BS 云)进行路由,从而导致它的静态 IP 地址成为在测试环境中看到的请求的来源。此 IP 地址已列入白名单。

这是在专用/静态 IP 计算机上 运行ning 的命令:

BrowserStackLocal.exe --{access key} --verbose 3

我也试过下面的方法,但没有明显区别:

BrowserStackLocal.exe --{access key} --force-local --verbose 3

不过,这好像不行?如果我尝试直接通过 BrowserStack 或通过 BS 自动化访问测试环境,则通过 "live" 测试。在这两种情况下,http(s) 请求都超时并且无法访问我们的测试环境 URL。此外,即使在 BrowserStackLocal.exe 进程上启用了 --verbose 3 日志记录级别,当我尝试以各种方式 运行 测试时,我也从未在独立/静态 IP 机器上看到任何请求被记录。

所以我想知道这是否是解决这个问题的正确方法?我误解了该怎么做吗?我是否需要 运行 BrowserStackLocal.exe 也许在调用 BS 自动化的同一台 CI 运行ner 机器上?这会有问题,因为它们也有动态 IP(当前)。

在此先感谢您的帮助!

EDIT/UPDATE:我设法让它工作了!! (有点)- 只是有点慢。如果我 运行 在我现有的专用/静态 IP 服务器上执行以下命令:

BrowserStackLocal.exe --key {mykey} --force-local --verbose 3

然后在另一台机器(比如我的开发笔记本电脑)上,如果我点击 BS 网络驱动程序服务器 http://hub-cloud.browserstack.com/wd/hub, and access the site http://www.whatsmyip.org/ 以查看返回的 IP 地址,它确实(最终)返回了我的静态 IP 机器地址!但问题是速度很慢——访问一个站点需要 20-30 秒,因此仍在寻找替代解决方案。请注意,要使其正常工作,您的测试代码必须将 "local" browserstack 功能标志设置为 'true' - 例如 Node.js:

  // Input capabilities
  var capabilities = {
    'browserstack.local' : 'true'
  }

更新 2:调低本地二进制文件的 --verbose 日志记录级别(或完全关闭该标志)似乎有所改善 - 我现在每个请求的响应时间为 5-10 秒。这可能是必须的。但这确实像描述的那样工作。

解决方案:我设法让它工作 - 它只是有点慢。如果我 运行 在我现有的专用/静态 IP 服务器上执行以下命令(注意添加详细日志记录似乎会减慢速度,所以现在不使用 --verbose 标志):

BrowserStackLocal.exe --key {mykey} --force-local

然后在另一台机器(比如我的开发笔记本电脑)上,如果我点击 BS 网络驱动程序服务器 http://hub-cloud.browserstack.com/wd/hub, and access the site http://www.whatsmyip.org/ 以查看返回的 IP 地址,它确实返回了我的静态 IP 机器地址。请注意,要使其正常工作,您的测试代码必须将 "local" browserstack 功能标志设置为 'true' - 例如 Node.js:

  // Input capabilities
  var capabilities = {
    'browserstack.local' : 'true'
  }

所以虽然有点慢,但这可能是必须的。但这确实像描述的那样工作。