使用BrowserStack自动化+云托管CI

时间:2018-01-04 12:27:57

标签: selenium browserstack

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

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

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

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

我一直在努力让CI驱动的测试再次使用BS“本地测试”功能,这里概述https://www.browserstack.com/local-testing

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

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

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

我也尝试了以下内容,但没有明显区别:

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

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

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

提前感谢您的帮助!

编辑/更新:我设法让这个工作! (排序) - 它有点慢。如果我在现有的专用/静态IP服务器上运行以下命令:

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

然后在另一台机器上(比如我的开发笔记本电脑),如果我点击BS网络驱动程序服务器http://hub-cloud.browserstack.com/wd/hub,并访问网站http://www.whatsmyip.org/以查看返回的IP地址,并且(最终)用我的静态IP机地址回来!但问题是这个问题非常缓慢 - 对于那个网站命中20-30秒,所以仍然在寻找其他解决方案。注意这项工作你的测试代码必须将“本地”browserstack功能标志设置为'true' - 例如对于Node.js:

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

更新2:关闭本地二进制文件的--verbose日志记录级别(或完全关闭该标志)似乎改善了一些事情 - 我现在每个请求的响应时间为5-10秒。这可能需要做。但这确实如上所述。

1 个答案:

答案 0 :(得分:0)

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

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

然后在另一台机器上(比如我的开发笔记本电脑)如果我点击BS网络驱动程序服务器http://hub-cloud.browserstack.com/wd/hub,并访问网站http://www.whatsmyip.org/以查看返回的IP地址,它确实回来了我的静态IP机器地址。注意这个工作你的测试代码必须设置" local" browserstack功能标志为' true' - 例如对于Node.js:

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

所以虽然有点慢,但可能还有。但这确实如上所述。