在 Travis CI 中使用 BrowserStack

Travis CI 与 BrowserStack 集成,这是一个基于 Web 的跨浏览器和真实设备测试平台。BrowserStack 可用于通过 Selenium、Karma 等框架进行交互式和自动化测试。

此附加组件会自动设置 BrowserStack Local,它允许您使用 BrowserStack 云测试您的私有服务器以及公共 URL。为此,它使用您构建平台的 BrowserStackLocal 二进制文件

BrowserStack Local 在您的 Travis 构建容器/VM 和 BrowserStack 服务器之间建立安全连接。本地测试还支持防火墙、代理和 Active Directory。建立安全连接后,所有 URL 都会立即生效,包括您的 Web 服务器、本地文件夹以及使用 HTTPS 的 URL。

设置 BrowserStack #

如果您还没有,请注册一个 BrowserStack 帐户;对于开源项目它是 免费的。注册后,从 帐户设置 页面获取您的用户名和访问密钥。您的用户名和访问密钥是配置项目 .travis.yml 文件所需的。

选择是要将您的访问密钥存储为纯文本还是以安全/加密形式存储。对于开源项目,我们建议以安全形式存储访问密钥,以便拉取请求无法使用存储在您的 .travis.yml 中的密钥。有关更多信息,请参阅 拉取请求页面

加密的访问密钥 #

要加密您的访问密钥以在 .travis.yml 中使用,您可以使用 travis encrypt "您的 BrowserStack 访问密钥"。您需要安装 travis cli 才能执行此操作(有关更多详细信息,请参阅 加密密钥)。加密访问密钥后,您可以添加安全字符串

addons:
  browserstack:
    username: "Your BrowserStack username"
    access_key:
      secure: "The secure string output of `travis encrypt`"

纯文本访问密钥 #

要以纯文本格式存储访问密钥,请将以下配置添加到您的 .travis.yml 文件中

addons:
  browserstack:
    username: "Your BrowserStack username"
    access_key: "Your BrowserStack access key"

我们强烈建议以加密格式存储您的 BrowserStack 访问密钥,因为可以访问您的存储库的其他用户可以读取和使用您的纯文本访问密钥在 BrowserStack 上进行测试。

本地标识符 #

本地标识符是多个本地连接时每个本地连接的唯一标识符。附加组件将始终为创建的每个本地连接创建本地标识符。如果您使用的是 Selenium 测试框架,则必须将本地标识符添加到 Selenium 功能中。

本地标识符作为环境变量 BROWSERSTACK_LOCAL_IDENTIFIER 公开。您可以使用它来设置 Selenium 功能。以下示例使用 Ruby 的 selenium-webdriver

require 'rubygems'
require 'selenium-webdriver'

# Input capabilities
caps = Selenium::WebDriver::Remote::Capabilities.new
caps['browserstack.local'] = 'true'
caps['browserstack.localIdentifier'] = ENV['BROWSERSTACK_LOCAL_IDENTIFIER']
# Add other capabilities like browser name, version and os name, version
...

driver = Selenium::WebDriver.for(:remote,
  :url => "http://USERNAME:ACCESS_KEY@hub-cloud.browserstack.com/wd/hub",
  :desired_capabilities => caps)

本地标识符对于 矩阵构建 至关重要。由于 travis 中的矩阵构建可以在同一个 VM 上运行,因此我们需要在启动连接时添加本地标识符以确保正确的本地隧道获得正确的请求。

应用程序上传 #

构建应用程序后,将其上传到 BrowserStack 服务器。应用程序应在安装步骤中构建,并且测试脚本必须在脚本步骤中运行。要上传应用程序,请在 .travis.yml 文件中配置应用程序的路径

install:
  - "Build script for the app"
script:
  - "Test script"
addons:
  browserstack:
    username: "Your BrowserStack username"
    access_key: "Your BrowserStack access key"
    app_path: "path to your app file"

应用程序上传到 BrowserStack 服务器后,生成的应用程序 ID 将在环境变量 BROWSERSTACK_APP_ID 中设置。您可以使用它在测试中设置 Appium 功能。

caps['app'] = ENV['BROWSERSTACK_APP_ID']

查看 BrowserStack Android 示例应用程序 .travis.yml 文件。

其他选项 #

代理 #

本地测试还允许您设置代理主机、端口、用户名和密码,所有 URL 都将通过这些代理进行解析

addons:
  browserstack:
    username: "Your BrowserStack username"
    access_key:
      secure: "The secure string output of `travis encrypt`"
    proxyHost: "Proxy server host"
    proxyPort: "Proxy server port"
    proxyUser: "User to use when accessing proxy server"
    proxyPass: "Password to use when accessing proxy server"

更多选项 #

附加组件支持的一些其他选项是:

  • forcelocal:如果将其设置为 true,则所有网络流量都将通过 Travis CI 容器/VM 进行解析。
  • only:将本地测试访问权限限制为指定的本地服务器和/或文件夹。

示例用法:

addons:
  browserstack:
    username: "Your BrowserStack username"
    access_key:
      secure: "The secure string output of `travis encrypt`"
    forcelocal: true
    only: dev.example.com,80,0,*.example.org,80,0

only 标志的格式为“主机模式、主机端口、SSL 为真(1)/假(0)的标志”,并重复。

构建配置参考 #

您可以在我们的 Travis CI 构建配置参考 中找到有关 Browserstack 的构建配置格式的更多信息。