【问题标题】:Run integration tests simultaneously in Nightwatch.js + Saucelabs in same browser instance在同一浏览器实例中同时在 Nightwatch.js + Saucelabs 中运行集成测试
【发布时间】:2019-11-20 23:48:32
【问题描述】:

我正在尝试使用 Nightwatch.js 和 Saucelabs 运行某些集成测试用例。目前,对于每个测试用例,都会打开一个新的浏览器窗口,因此,测试用例需要很长时间。

我需要在同一个浏览器窗口中运行测试用例,并在 SauceLabs 上显示每个测试用例的测试用例结果。

下面是类似于我需要运行的代码。

module.exports = {
  beforeEach: (browser, done) => {
    //login
  },

  'Test-1': browser => {
       browser
        .page
        .testPage()
        .navigate()
        .end()
  },

  'Test2': browser => {
       browser
        .page
        .testPage()
        .navigate()
        .end()
  },

  afterEach: (browser, done) => {
    //logout
  },
}

如果我从 Test-1 中删除 .end(),Saucelabs 会在一个浏览器中运行测试,但只显示名称为 Test-2 的测试结果

【问题讨论】:

    标签: integration-testing nightwatch.js saucelabs


    【解决方案1】:

    Nightwatch 默认自动处理 webdriver 的启动和停止,但您可以通过在 nightwatch.json 文件中将 webdriver start_process 配置选项设置为 false 来禁用它并自行管理:

    "webdriver" : {
      "start_process": false
    }
    

    Nightwatch 参考文档:https://nightwatchjs.org/gettingstarted#configuration

    但是,您可能不应该这样做。

    首先,这意味着你需要做更多的工作——你必须在每个测试规范中自己管理启动和停止会话,包括传递配置。

    其次,Sauce Labs 中的会话应针对每次测试开始和停止。 Sauce 只会识别 1 个已完成的测试——每个会话通过或失败。

    最后,将测试集中在一个会话中并不是一个好习惯 - 您的浏览器可能处于意外状态,具有不同的 cookie 和缓存,并且您的应用可能具有之前测试的延迟设置。通过在 Sauce Labs 中创建一个新会话,您可以确保一切都是“干净的”,并且您可以确保准确地重现任何场景。

    我理解尝试节省时间的愿望,因为单独开始每个会话需要更长的时间,以及完成所需的任何准备步骤以在您的应用程序中达到特定状态。但是您最好能够通过调用 API、设置 cookie 或其他任何方式来配置该状态,而不是让您的浏览器处于未知状态。

    这就是 Nightwatch 在测试之间自动重启浏览器的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-03
      • 2015-12-20
      • 2017-11-09
      • 2017-02-10
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 2019-04-17
      相关资源
      最近更新 更多