使用 Sauce Labs 与 Travis CI

Travis CI 与 Sauce Labs 集成,Sauce Labs 是一个浏览器和移动测试平台。例如,它与 Selenium 集成良好。

集成会自动设置开始测试所需的隧道。为此,它使用 Sauce Connect。

请注意,由于安全限制,除非您使用 JWT 插件,否则拉取请求构建中无法使用 Sauce Labs 插件。

设置 Sauce Connect #

Sauce Connect 在 Sauce Labs 的基于云的 VM 和您的本地服务器之间安全地代理浏览器流量。Sauce Connect 使用端口 443 和 80 与 Sauce Labs 云通信。如果您正在将 Sauce Labs 用于 Selenium 测试,这将使连接到您的 Web 服务器变得更加容易。

首先,如果您还没有 注册 Sauce Labs(开源项目是 免费的),并从您的 帐户页面 获取您的访问密钥。获得密钥后,将其添加到您的 .travis.yml 文件中

addons:
  sauce_connect:
    username: "Your Sauce Labs username"
    access_key: "Your Sauce Labs access key"

如果您不希望访问密钥在您的存储库中公开可用,您可以使用 travis encrypt "your-access-key" 对其进行加密(有关加密的更多信息,请参阅 加密密钥),并添加拉取请求安全的密钥(请参阅 JWT 插件)。字符串如下所示

addons:
  sauce_connect:
    username: "Your Sauce Labs username"
  jwt:
    secure: "The secure string output by `travis encrypt SAUCE_ACCESS_KEY=Your Sauce Labs access key`"

如果您将它们分别命名为 SAUCE_USERNAMESAUCE_ACCESS_KEY,您还可以将 usernameaccess_key 添加为环境变量。在这种情况下,您只需将以下内容添加到您的 .travis.yml 文件中即可

addons:
  sauce_connect: true

为了允许同时打开多个隧道,Travis CI 会打开一个 Sauce Connect 隧道池。确保在打开到 Sauce Labs 的 Selenium 网格的连接时发送 TRAVIS_JOB_NUMBER 环境变量,作为所需的 tunnel-name 功能,否则它将无法连接到 VM 上运行的服务器。

外观将取决于您使用的客户端库,在 Ruby 的 selenium-webdriver 绑定中

caps = Selenium::WebDriver::Remote::Capabilities.firefox({
  'tunnel-name' => ENV['TRAVIS_JOB_NUMBER']
})
driver = Selenium::WebDriver.for(:remote, {
  url: 'http://username:access_key@ondemand.saucelabs.com/wd/hub',
  desired_capabilities: caps
})

其他选项 #

有时您可能需要将其他选项传递给 Sauce Connect。当前支持的参数为

  • direct_domains
  • no_ssl_bump_domains
  • tunnel_domains

例如,如果 某些 HTTPS 域名无法与 Sauce Connect 一起使用,则您可能需要 --direct-domains 选项

addons:
  sauce_connect:
    username: "Your Sauce Labs username"
    direct_domains: example.org,*.foobar.com
  jwt:
    secure: "The secure string output by `travis encrypt SAUCE_ACCESS_KEY=Your Sauce Labs access key`"

构建配置参考 #

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