3

社区中是否有人使用 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

您现在可以在我们的远程浏览器中访问您的本地服务器。

按 Ctrl-C 退出

通常我可以毫无问题地成功执行第一次构建。使用相同命令的后续构建配置永远不会连接。显示上述消息,但在测试执行期间,Browserstack 报告未建立本地测试连接。这让我很困惑。

为了让您更好地了解正在执行的内容,我为各种项目套件和浏览器组合提供了 15 种构建配置。存在两个 Jenkins 执行程序,并且我在任何给定时间都有超过 5 个 Browserstack VM 可用。当相关的项目代码被推送到登台服务器时,其中五个构建将自动开始执行,填满两个执行器。其中之一将开始和结束罚款。其他人都不会,因为 Browserstack 报告本地测试不可用。

Saucelabs 显然已经通过他们的插件解决了这个问题,这很棒。如果 Browserstack 需要 shell 命令来创建本地测试连接,那么我一定是做错了什么,乱序等等。

环境:

  • 爪哇 7
  • 硒 2.45
  • JUnit 4.11
  • Maven 3.1.1
  • 魅力 1.4.10
  • 詹金斯 1.5

有人可以发布一些在连续测试环境中使用 Browserstack 的信息,同时利用多个并行测试执行,并告诉我每个构建是如何配置的吗?

谢谢,

4

5 回答 5

8

我最近使用 Selenium 研究了 BrowserStack,而BrowserStack 插件使这项任务变得更加容易。

特征

  • 全局或按构建作业管理您的 BrowserStack 凭据。
  • 设置和拆除 BrowserStack Local 以测试内部、开发或登台环境。
  • 在您的 Jenkins 作业结果中嵌入 BrowserStack Automate 报告。

更容易全面整合。

于 2016-07-19T10:00:48.087 回答
4

这是 Umang 代表 BrowserStack 的回复。

首先,您使用正确的命令来设置本地测试连接。尽管您不需要指定“localhost,3000,0”详细信息。我们还建议您在启动连接时使用“-forcelocal”参数。该命令应如下所示:

nohup ./[二进制文件] [授权密钥] -localIdentifier [id] -forcelocal &

参数“-forcelocal”将通过您的 IP 地址路由所有流量。此外,在运行测试之前启动连接的过程是正确的。

但是,在这里我想确认您在创建连接时指定的“id”。正如您所分享的,有 15 种构建配置,我知道每个构建都指定了不同的“id”。请确保在设置本地测试连接和测试中指定的“id”(“browserstack.localIdentifier”=“id”)相同。否则,您将收到错误“[browserstack.local] 设置为 true,但未连接通过 BrowserStack 进行的本地测试”</p>

于 2015-03-10T19:12:50.380 回答
1

将 BrowserStack 与 Jenkins 集成有点棘手,但别担心,这是完全可行的 :-)

根据 Umang 的建议,BrowserStackLocal 客户端需要作为后台进程启动,这也是SauceLabs 插件的工作原理。

麻烦的是,当 Jenkins 看到你自己启动守护进程而不是通过插件时,它会杀死它们。这就是为什么你需要以其他方式说服它

我已经在本文中逐步描述了如何进行操作,但是如果您使用的是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在决定是否终止您的守护进程时所寻找的。

希望这可以帮助!

于 2016-05-05T10:05:17.973 回答
1

Paul Whelan 对使用 Jenkins的 BrowserStack 插件的回答是目前将 Jenkins 与 BrowserStack 集成的最简单方法。该插件支持所有 Jenkins 版本 >1.580.1。

为确保您获得 BrowserStack 测试报告,您需要按照插件 wiki中的文档配置项目的 pom.xml 。

于 2016-07-19T11:16:03.247 回答
-1

以防万一其他人对此有问题

因为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 ...
于 2016-03-08T11:42:59.880 回答