解决方案是同时使用 BrowserStackLocal 和 browserstack-cli 工具。BrowserStackLocal 的 64 位 linux 版本建立了从 circleCI 服务器到 Browserstack 服务器的隧道。之后,我们可以使用 browserstack-cli 启动浏览器并从 testem 运行测试。
下载 BrowserStackLocal
并插入.browserstack
项目的文件夹中。
- BrowserStackLocal 的 64 位 linux 版本:http ://www.browserstack.com/local-testing (Binnaries)
创建脚本,
它将运行并为 browserstack-cli 创建设置。您必须在 circleCI 中设置全局变量,并且可以将访问详细信息秘密保存在那里。让我们调用这个文件runthis.sh
并保存在.browserstack
文件夹中。该脚本也将运行您的 BrowserStackLocal 二进制文件,因此隧道将存在。
#!/bin/bash
echo "{\"username\":\"`echo $BS_USER`\", \"password\":\"`echo $BS_PASSWORD`\", \"privateKey\": \"`echo $BS_KEY`\", \"apiKey\":\"`echo $BS_KEY`\"}" >> ~/.browserstack/browserstack.json
./.browserstack/BrowserStackLocal $BS_KEY &
CircleCI 配置
( circle.yml
) 文件主要取决于您的项目。我们必须复制.browserstack
主文件夹中的文件夹,安装 bower、browserstack-cli 和 testem。
一个例子:
machine:
timezone:
Pacific/Auckland
node:
version: v0.10.28
dependencies:
pre:
- mv ./.browserstack ~/
- sh ~/.browserstack/runthis.sh
post:
- bower install
- npm install browserstack-cli -g
- npm install testem -g
test:
override:
- PATH=$PATH:bin grunt integration_tests_cli; testem ci
- PATH=$PATH:bin grunt tests_cli; testem ci
测试配置:
testem.yml
- 大部分内容取决于您的项目。在我们的例子中重要的是launchers
部分。
framework: "qunit"
test_page: "tmp/index.html"
src_files:
- "tmp/assets/application.js"
- "tmp/tests.js"
- "tmp/integration_tests.js"
launchers:
bs_chrome:
command: browserstack launch chrome --attach
protocol: browser
timeout: 300
launch_in_ci:
- "PhantomJS"
- "bs_chrome"
launch_in_dev:
- "Chrome"
- "Firefox"
- "PhantomJS"
parallel: 2
所以,如果你在 github 上更新你的项目,circleci 将启动你的测试并连接到 browserstack 并在那里使用浏览器......