使用 Selenium 和 Browserstack 配置 Jenkins 构建
Configuring a Jenkins build using Selenium with Browserstack
社区中有没有人使用 Browserstack 作为他们的云提供商在 Jenkins 中成功创建了一个 Selenium 构建,同时需要防火墙后面的本地测试连接?
我可以肯定地说,Saucelabs 非常容易在持续部署环境中使用 Sauce Jenkins 插件执行构建,正如我所做的那样。但是,我不能对 Browserstack 说同样的话。我工作的组织目前使用 Browserstack,尽管他们的服务确实支持使用二进制应用程序进行自动化测试,但我发现 Jenkins 很麻烦。如果是的话,我需要绝对确保 Browserstack 不是一个可行的解决方案。我喜欢 Saucelabs 和他们的组织提供的东西,但如果 Browserstack 工作,我不想切换,如果我不需要。
Browserstack 文档指导您 运行 一个带有一些可用选项的命令,以便在执行前创建本地连接。
nohup ./[binary file] -localIdentifier [id] [auth key] localhost,3000,0 &
我已将上述语句添加为预构建步骤 shell 命令。我还必须添加 'nohup',因为一旦二进制文件创建成功连接,构建就不会真正开始,因为我没有退出,如下面的输出所示。
BrowserStackLocal v3.5
You can now access your local server(s) in our remote browser.
Press Ctrl-C to exit
通常我可以毫无问题地成功执行第一个构建。使用相同命令的后续构建配置永远不会连接。上面的消息显示,但在测试执行期间 Browserstack 报告没有建立本地测试连接。这让我很困惑。
为了让您更好地了解正在执行的内容,我为各种项目套件和浏览器组合提供了 15 个构建配置。存在两个 Jenkins 执行器,并且我在任何给定时间都有超过 5 个 Browserstack VM 可用。当相关的项目代码被推送到登台服务器时,其中五个构建将自动开始执行,填满两个执行器。其中之一将开始和结束。 None 其他人会因为 Browserstack 报告本地测试不可用。
Saucelabs 显然已经通过他们的插件解决了这个问题,这很棒。如果 Browserstack 需要 shell 命令来创建本地测试连接,我一定是做错了什么,乱序等等
环境:
- Java 7
- 硒 2.45
- JUnit 4.11
- 行家 3.1.1
- 倾城 1.4.10
- 詹金斯 1.5
有人可以 post 一些在连续测试环境中使用 Browserstack 同时利用多个并行测试执行的信息,并告诉我每个构建是如何配置的吗?
谢谢,
这里是Umang 代表BrowserStack 回复。
首先,您正在使用正确的命令来设置本地测试连接。尽管您不需要指定“localhost,3000,0”的详细信息。我们还建议您在启动连接时使用“-forcelocal”参数。命令应如下所示:
nohup ./[二进制文件] [授权密钥] -localIdentifier [id] -forcelocal &
参数“-forcelocal”将通过您的 IP 地址路由所有流量。此外,在 运行 您的测试之前启动连接的过程是正确的。
但是,在这里我想确认您在创建连接时指定的“id”。正如您分享的那样,有 15 种构建配置,我知道每个构建都指定了不同的“id”。请确保在设置本地测试连接时指定的“id”和在测试中指定的“browserstack.localIdentifier”=“id”是相同的。否则,您将收到错误“[browserstack.local] 设置为 true 但未连接通过 BrowserStack 的本地测试”
以防其他人遇到此问题
对于 BrowserStackLocal v4.8
我发现 -localidentifier
已从二元期权中删除。 (这可能是旧闻了!)
当我从我们的自动化测试中删除 capabilities['browserstack.localIdentifier']
属性 时,连接开始工作。
本地二进制文件
browserstack <key> -v -forcelocal
硒设置
Capybara.register_driver :browserstack do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.new
# If we're running the BrowserStackLocal binary, we need to
# tell the driver as well
capabilities['browserstack.local'] = true
# other useful options
capabilities['browserstack.debug'] = true
capabilities['browserstack.javascriptEnabled'] = true
capabilities['javascriptEnabled'] = true
# etc ...
将 BrowserStack 与 Jenkins 集成有点棘手,但别担心,它完全可行:-)
根据 Umang 的建议,BrowserStackLocal 客户端需要作为后台进程启动,这也是 SauceLabs plugin 的工作原理。
麻烦的是,当 Jenkins 看到您完全自己启动守护进程而不是通过插件时,它 kills them. That's why you need to convince it otherwise。
我已经描述了如何逐步完成它in this article, but if you're using the Pipeline Plugin,您可以使用下面的脚本作为起点:
node {
with_browser_stack 'linux-x64', {
// Execute tests: here's where a step like
// sh 'mvn clean verify'
// would go
}
}
// ----------------------------------------------
def with_browser_stack(type, actions) {
// Prepare the BrowserStackLocal client
if (! fileExists("/var/tmp/BrowserStackLocal")) {
sh "curl -sS https://www.browserstack.com/browserstack-local/BrowserStackLocal-${type}.zip > /var/tmp/BrowserStackLocal.zip"
sh "unzip -o /var/tmp/BrowserStackLocal.zip -d /var/tmp"
sh "chmod +x /var/tmp/BrowserStackLocal"
}
// Start the connection
sh "BUILD_ID=dontKillMe nohup /var/tmp/BrowserStackLocal 42MyAcc3sK3yV4lu3 -onlyAutomate > /var/tmp/browserstack.log 2>&1 & echo $! > /var/tmp/browserstack.pid"
try {
// Execute tests
actions()
}
finally {
// Stop the connection
sh "kill `cat /var/tmp/browserstack.pid`"
}
}
您当然需要用您的替换访问密钥 (42MyAcc3sK3yV4lu3),或者通过环境变量提供它。
这里的重要部分是 BUILD_ID
,因为这是 Jenkins ProcessTreeKiller 在决定是否终止您的守护进程时寻找的内容。
希望对您有所帮助!
我最近研究了使用 Selenium 的 BrowserStack,BrowserStack Plugin 使这项任务变得更加容易。
特征
- 全局或按构建作业管理您的 BrowserStack 凭据。
- 设置和拆除 BrowserStack Local 以测试内部、开发或
暂存环境。
- 将 BrowserStack Automate 报告嵌入您的
Jenkins 作业结果。
全面集成更容易。
Paul Whelan 使用 Jenkin's BrowserStack Plugin 的答案是目前将 Jenkins 与 BrowserStack 集成的最简单方法。该插件支持所有 Jenkins 版本 >1.580.1.
为确保您获得 BrowserStack 测试报告,您需要按照 plugin wiki.
中的说明配置项目的 pom.xml
社区中有没有人使用 Browserstack 作为他们的云提供商在 Jenkins 中成功创建了一个 Selenium 构建,同时需要防火墙后面的本地测试连接?
我可以肯定地说,Saucelabs 非常容易在持续部署环境中使用 Sauce Jenkins 插件执行构建,正如我所做的那样。但是,我不能对 Browserstack 说同样的话。我工作的组织目前使用 Browserstack,尽管他们的服务确实支持使用二进制应用程序进行自动化测试,但我发现 Jenkins 很麻烦。如果是的话,我需要绝对确保 Browserstack 不是一个可行的解决方案。我喜欢 Saucelabs 和他们的组织提供的东西,但如果 Browserstack 工作,我不想切换,如果我不需要。
Browserstack 文档指导您 运行 一个带有一些可用选项的命令,以便在执行前创建本地连接。
nohup ./[binary file] -localIdentifier [id] [auth key] localhost,3000,0 &
我已将上述语句添加为预构建步骤 shell 命令。我还必须添加 'nohup',因为一旦二进制文件创建成功连接,构建就不会真正开始,因为我没有退出,如下面的输出所示。
BrowserStackLocal v3.5
You can now access your local server(s) in our remote browser.
Press Ctrl-C to exit
通常我可以毫无问题地成功执行第一个构建。使用相同命令的后续构建配置永远不会连接。上面的消息显示,但在测试执行期间 Browserstack 报告没有建立本地测试连接。这让我很困惑。
为了让您更好地了解正在执行的内容,我为各种项目套件和浏览器组合提供了 15 个构建配置。存在两个 Jenkins 执行器,并且我在任何给定时间都有超过 5 个 Browserstack VM 可用。当相关的项目代码被推送到登台服务器时,其中五个构建将自动开始执行,填满两个执行器。其中之一将开始和结束。 None 其他人会因为 Browserstack 报告本地测试不可用。
Saucelabs 显然已经通过他们的插件解决了这个问题,这很棒。如果 Browserstack 需要 shell 命令来创建本地测试连接,我一定是做错了什么,乱序等等
环境:
- Java 7
- 硒 2.45
- JUnit 4.11
- 行家 3.1.1
- 倾城 1.4.10
- 詹金斯 1.5
有人可以 post 一些在连续测试环境中使用 Browserstack 同时利用多个并行测试执行的信息,并告诉我每个构建是如何配置的吗?
谢谢,
这里是Umang 代表BrowserStack 回复。
首先,您正在使用正确的命令来设置本地测试连接。尽管您不需要指定“localhost,3000,0”的详细信息。我们还建议您在启动连接时使用“-forcelocal”参数。命令应如下所示:
nohup ./[二进制文件] [授权密钥] -localIdentifier [id] -forcelocal &
参数“-forcelocal”将通过您的 IP 地址路由所有流量。此外,在 运行 您的测试之前启动连接的过程是正确的。
但是,在这里我想确认您在创建连接时指定的“id”。正如您分享的那样,有 15 种构建配置,我知道每个构建都指定了不同的“id”。请确保在设置本地测试连接时指定的“id”和在测试中指定的“browserstack.localIdentifier”=“id”是相同的。否则,您将收到错误“[browserstack.local] 设置为 true 但未连接通过 BrowserStack 的本地测试”
以防其他人遇到此问题
对于 BrowserStackLocal v4.8
我发现 -localidentifier
已从二元期权中删除。 (这可能是旧闻了!)
当我从我们的自动化测试中删除 capabilities['browserstack.localIdentifier']
属性 时,连接开始工作。
本地二进制文件
browserstack <key> -v -forcelocal
硒设置
Capybara.register_driver :browserstack do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.new
# If we're running the BrowserStackLocal binary, we need to
# tell the driver as well
capabilities['browserstack.local'] = true
# other useful options
capabilities['browserstack.debug'] = true
capabilities['browserstack.javascriptEnabled'] = true
capabilities['javascriptEnabled'] = true
# etc ...
将 BrowserStack 与 Jenkins 集成有点棘手,但别担心,它完全可行:-)
根据 Umang 的建议,BrowserStackLocal 客户端需要作为后台进程启动,这也是 SauceLabs plugin 的工作原理。
麻烦的是,当 Jenkins 看到您完全自己启动守护进程而不是通过插件时,它 kills them. That's why you need to convince it otherwise。
我已经描述了如何逐步完成它in this article, but if you're using the Pipeline Plugin,您可以使用下面的脚本作为起点:
node {
with_browser_stack 'linux-x64', {
// Execute tests: here's where a step like
// sh 'mvn clean verify'
// would go
}
}
// ----------------------------------------------
def with_browser_stack(type, actions) {
// Prepare the BrowserStackLocal client
if (! fileExists("/var/tmp/BrowserStackLocal")) {
sh "curl -sS https://www.browserstack.com/browserstack-local/BrowserStackLocal-${type}.zip > /var/tmp/BrowserStackLocal.zip"
sh "unzip -o /var/tmp/BrowserStackLocal.zip -d /var/tmp"
sh "chmod +x /var/tmp/BrowserStackLocal"
}
// Start the connection
sh "BUILD_ID=dontKillMe nohup /var/tmp/BrowserStackLocal 42MyAcc3sK3yV4lu3 -onlyAutomate > /var/tmp/browserstack.log 2>&1 & echo $! > /var/tmp/browserstack.pid"
try {
// Execute tests
actions()
}
finally {
// Stop the connection
sh "kill `cat /var/tmp/browserstack.pid`"
}
}
您当然需要用您的替换访问密钥 (42MyAcc3sK3yV4lu3),或者通过环境变量提供它。
这里的重要部分是 BUILD_ID
,因为这是 Jenkins ProcessTreeKiller 在决定是否终止您的守护进程时寻找的内容。
希望对您有所帮助!
我最近研究了使用 Selenium 的 BrowserStack,BrowserStack Plugin 使这项任务变得更加容易。
特征
- 全局或按构建作业管理您的 BrowserStack 凭据。
- 设置和拆除 BrowserStack Local 以测试内部、开发或 暂存环境。
- 将 BrowserStack Automate 报告嵌入您的 Jenkins 作业结果。
全面集成更容易。
Paul Whelan 使用 Jenkin's BrowserStack Plugin 的答案是目前将 Jenkins 与 BrowserStack 集成的最简单方法。该插件支持所有 Jenkins 版本 >1.580.1.
为确保您获得 BrowserStack 测试报告,您需要按照 plugin wiki.
中的说明配置项目的 pom.xml