nightwatch配置

概览

自动生成配置

Nightwatch测试运行的二进制需要一个配置文件,默认情况下使用一个nightwatch.json从当前工作目录下的文件。若存在nightwatch.conf.js,则会先加载nightwatch.conf.js
从1.3版本开始,基于操作系统和现有的驱动程序包,Nightwatch 将在根目录下默认生成一个配置文件nightwatch.conf.js。如果在当前文件夹中找到一个nightwatch.jsonnightwatch.conf.js文件,则不会生成该文件。

手动配置

nightwatch.json

在项目根文件夹下创建nightwatch.json,假设您已经下载或安装了 ChromeDriver 服务,最简单的nightwatch.json文件将如下所示,其中node_modules/.bin/chromedriver是 ChromeDriver 的安装路径:

{
  "src_folders" : ["tests"],

  "webdriver" : {
    "start_process": true,
    "server_path": "node_modules/.bin/chromedriver",
    "port": 9515
  },

  "test_settings" : {
    "default" : {
      "desiredCapabilities": {
        "browserName": "chrome"
      }
    }
  }
}

nightwatch.conf.js

若存在nightwatch.conf.js则始终优先,如下为使用firefox作为目标浏览器的示例配置文件:

module.exports = {
  // 测试所在的文件夹数组
  src_folders: [],

webdriver: {
start_process: true,
port: 4444,
server_path: require('geckodriver').path,
cli_args: [
// very verbose geckodriver logs
// '-vv'
]
},

test_settings: {
default: {
launch_url: 'https://nightwatchjs.org',
desiredCapabilities : {
browserName : 'firefox',
alwaysMatch: {
// 如果会在firefox中遇到非预期的SSL验证问题,则需设置此项为true
// acceptInsecureCerts: true,
'moz:firefoxOptions': {
args: [
// '-headless',
// '-verbose'
],
}
}
}
}
}
};

默认配置


const filename_format = function ({testSuite = '', testCase = '', isError = false, dateObject = new Date()} = {}) {
  const fileName = [];
  const dateParts = dateObject.toString().replace(/:/g, '').split(' ');
  dateParts.shift();

  const dateStamp = dateParts.slice(0, 5).join('-');
  if (testSuite) {
    fileName.push(testSuite);
  }
  if (testCase) {
    fileName.push(testCase);
  }

  return ${fileName.join('/')}${isError ? '_ERROR' : '_FAILED'}_${dateStamp}.png;
};

module.exports = {
  // 加载自定义命令的位置
  custom_commands_path: null,

  // 加载自定义断言的位置
  custom_assertions_path: null,

  //  page object文件导入的位置
  page_objects_path: null,

  // 外部全局模块的位置,此模块会被导入到测试中作为client示例的全局属性
  globals_path: null,

  // 测试执行时,在主测试api中可用的对象
  globals: {

    // 控制测试执行在断言失败时是否中止并跳过其他断言,它被用于waitFor命令和expect断言
    abortOnAssertionFailure: true,

    // 控制当元素无法定位时是否终止测试执行;终止后一个错误被记录至所有用例中,且跳过剩下的所有用例。它被用于元素命令,如.click()、.getText()
    abortOnElementLocateError: false,

    //重写默认的重试间隔(500ms), waitFor和expect 重试的间隔毫秒数
    waitForConditionPollInterval: 500,

    // waitFor等命令的默认超时时间
    waitForConditionTimeout: 5000,

    // 在多个元素都找到但未给定定位策略和选择器时,使waitFor命令抛出异常
    throwOnMultipleElementsReturned: false,

    // 默认情况下,如果使用给定的定位策略和选择器找到多个元素,则会打印警告; 将此设置为 true 以抑制这些警告
    suppressWarningsOnMultipleElementsReturned: false,

    // 控制异步挂钩的超时值。 期望在此时间内调用 done() 回调或抛出错误
    asyncHookTimeout: 10000,

    // 控制运行异步单元测试时的超时值。 期望在此时间内调用 done() 回调或抛出错误
    unitTestsTimeout: 2000,

    // 控制执行全局异步报告器时的超时值。 期望在此时间内调用 done() 回调或抛出错误
    customReporterCallbackTimeout: 20000,

    // 自动重试失败的断言直到达到给定的超时,然后放弃并失败测试。
    retryAssertionTimeout: 5000,

    reporter: function(results, cb) {cb(results)}
  },

  // dotenv 模块的配置设置 - 一个零依赖模块,将环境变量从 .env 文件加载到 process.env 中
  dotenv: {},

  // 在运行之间保留相同的全局对象,或者在每个测试中拥有它的(深层)副本; 
  // 当需要在测试套件之间保存数据时,这可能很有用,例如 cookie 或会话信息
  persist_globals: false,

  // JUnit XML 报告文件将被保存的位置。 如果要禁用 XML 报告,请将其设置为 false
  output_folder: 'tests_output',

  // 测试文件所在的字符串或文件夹数组(不包括子文件夹)。
  src_folders: null,

  // 在并行运行时使用,确定是否应在最后收集和显示输出
  live_output: false,

  // 禁用对加载打字稿文件的支持以向后兼容测试套件
  disable_typescript: false,

  // 用于禁用终端中的彩色输出
  disable_colors: false,

  // 用于并行运行时指定启动子进程之间的延迟(以毫秒为单位)
  parallel_process_delay: 10,

  // An object containing Selenium Server related configuration options
  selenium: {
    start_process: false,
    cli_args: {},
    server_path: null,
    log_path: '',
    port: undefined,
    check_process_delay: 500,
    max_status_poll_tries: 15,
    status_poll_interval: 200
  },

  // 是否自动启动 Selenium/WebDriver 会话。 如果运行单元测试,这应该设置为 false
  start_session: true,

  // 测试终止时自动结束会话,通常是在断言失败之后
  end_session_on_fail: true,

  // 当一个测试用例失败时,从当前测试用例中跳过剩余的测试用例
  skip_testcases_on_fail: undefined,

  // 是否并行运行单个测试文件
  test_workers: false,

  /
  test_workers: {
    enabled: true,

    // 根据 CPU 内核自动计算工作人员的数量
    workers: 'auto',

    // 手动指定工作人员的数量
    workers: 4,

    // 将节点参数传递给各个工作人员(所有 process.execArgv)
    node_options: 'auto',

    // 有选择地将节点参数传递给各个工作进程
    node_options: ['--inspect']
  },
  /

  // 指定使用哪个测试运行器: default|mocha
  test_runner: 'default',

  // 定义连接webdriver/selenium的选项
  webdriver: {
    start_process: false,
    cli_args: {},
    server_path: null,
    log_path: '',
    use_legacy_jsonwire: undefined,

    // 开始检查 Webdriver 服务器是否启动并运行之前的等待时间(以毫秒为单位)
    check_process_delay: 100,

    // 返回超时错误前的最大 ping 状态检查尝试次数
    max_status_poll_tries: 10,

    // 检查 Webdriver 服务器是否已启动并运行时, ping 检查之间使用的时间间隔(以毫秒为单位)
    status_poll_interval: 200,

    // 等待 Node.js 进程创建和运行的整个时间(以毫秒为单位)(默认为 2 分钟),包括生成子进程和检查状态
    process_create_timeout: 120000,
    host: undefined,
    port: undefined,
    ssl: undefined,
    proxy: undefined,
    timeout_options: {
      timeout: undefined,
      retry_attempts: undefined
    },
    default_path_prefix: undefined,
    username: undefined,
    access_key: undefined
  },

  test_settings: {
  },

  // 设置可以在稍后的测试中用作要加载的主 url
  launch_url: '',

  // 如果要显示来自 WebDriver 服务器的扩展 http 流量命令日志,请设置为 false
  silent: true,

  // 用于完全禁用终端输出
  output: true,

  // 如果您只想查看显示的测试用例名称和通过/失败状态,请将其设置为 false
  detailed_output: true,

  // 如果您想查看日志输出旁边的时间戳,请将其设置为 true
  output_timestamp: false,

  // 如果您希望将时间戳视为 ISO 字符串,请将其设置为 iso
  timestamp_format: '',

  // 如果您不想在测试执行期间显示错误(它们始终显示在末尾),请将其设置为 true。
  disable_error_log: false,

  // 默认情况下,不处理 DOM 元素(例如 cookie)的 API 命令错误会被忽略,除非它们是由 Node.js 抛出的(例如 ECONNRESET 错误)
  report_command_errors: false,

  // 在测试执行期间获取错误和失败截图
  screenshots: {
    enabled: false,
    filename_format,
    path: '',
    on_error: true,
    on_failure: true
  },

  // 用于在截屏时启用在(详细)日志中显示 Base64 图像数据
  log_screenshot_data: false,

  desiredCapabilities: {
    browserName: 'firefox'
  },

  // 要跳过的文件夹或文件模式数组(相对于主源文件夹)
  exclude: null,

  // 加载测试时使用的文件夹或文件模式。 与此模式不匹配的文件将被忽略
  filter: null,

  // 跳过一组测试(一个子文件夹); 可以是逗号分隔值的列表(无空格)
  skipgroup: '',

  sync_test_names: true,

  // 按标签名称跳过测试; 可以是逗号分隔值的列表(无空格)
  skiptags: '',

  // 使用 xpath 作为默认定位器策略
  use_xpath: false,

  parallel_mode: false,

  report_prefix: '',

  unit_tests_mode: false,

  default_reporter: 'junit'
}

所有设置

基础设置

名称类型默认描述
test_settingsobject一个对象,其中定义了所有测试环境,每个环境都根据需要覆盖测试设置。 始终需要默认环境,其他环境从中继承设置。
webdriverobjectwebdriver相关配置
src_foldersstring/arraynone测试所在的文件夹数组(不包括子文件夹)。如果未指定,则必须将测试源作为第二个参数内联传递给测试运行器
seleniumobject包含 Selenium Server 相关配置选项的对象。 如果不使用 Selenium,则应设置 webdriver 选项。从 Nightwatch 1.0 开始,只有在针对 Grid 设置或云测试服务(例如 SauceLabs 或 BrowserStack)进行测试时才需要 Selenium
custom_commands_pathstring/arraynone加载自定义命令的位置
custom_assertions_pathstring/arraynone加载自定义断言的位置
page_objects_pathstring/arraynone加载页面对象文件的位置
globals_pathstring/arraynone外部全局模块的位置,该模块将作为主客户端实例上的全局属性加载并可供测试使用。全局变量也可以在 test_settings 环境中定义/覆盖

Test Runner设置

设置用于控制内置 CLI 测试运行器的工作方式。

名称类型默认描述
test_runnerstring/object“default”指定运行测试时要使用的测试运行器。值可以是default(built-in nightwatch runner) 或mocha 。例子:“test_runner” : {“type” : “mocha”, “options” : {“ui” : “tdd”}}
parallel_process_delayinteger10指定以并行模式运行时启动子进程之间的延迟(以毫秒为单位)。
enable_fail_fast 从v1.2.2开始booleanfalse当第一次测试失败发生时,启用中止测试运行执行;其余的测试套件将被跳过。
test_workersbooleanfalse是否为每个测试worker并行运行各个测试套件。如果设置为true,则并行运行测试并自动确定工作人员的数量。如果设置为一个对象,可以指定工人的数量为"auto"或 a number。例子:“test_workers” : {“enabled” : true, “workers” : “auto”}从 v1.3.7 开始,您可以使用该node_options属性指定要传递给各个测试工作进程的节点选项。示例:- 这将传递所有process.execArgv:- 这将仅传递指定的 cli 选项:“test_workers”: {“enabled”: true,“workers”: “auto”, “node_options”: “inherit”},“test_workers”: {“enabled”: true,“workers”: “auto”,“node_options”["–inspect"]},
unit_tests_modebooleanfalse控制是否在单元测试模式下运行测试,这意味着不会自动创建会话。

Test Session设置

设置微调test session的行为并定义测试过程中可能可用的属性

设置baseUrl属性

baseUrl(或launchUrl)属性将提供测试中使用的主要 Nightwatch api。它的值取决于使用的环境。更多关于Nightwatch Runner的测试环境。
如果运行测试指定integration环境(使用--env integration),则baseUrlhttp://staging.host。否则将设置为default中定义的值(即http://localhost)。

module.exports = {
  'Demo test' : function (browser) {
    browser
      .url(browser.baseUrl)
      // ...
      .end();
  }
};
名称类型默认描述
baseUrlstringnone可以在稍后的测试中用作要加载的主 url 的 url。如果您的测试将在不同的环境中运行,每个环境都有不同的 url,这将很有用。别名:base_url, launch_url, launchUrl.
desiredCapabilities 别名: capabilitiesobject / function / Selenium Capabilities何时创建新会话的 WebDriver 功能。如,您可以指定浏览器名称以及其他功能。
screenshotsobjectnone当发生命令错误时,Selenium 会生成屏幕截图。随着on_failure设置为true,还产生了故障或示数的测试截图。这些都保存在磁盘上。如:“screenshots” : {“enabled” : true,“on_failure” : true,“on_error” : false,“path” : "”}
globalsobject在测试中可用并且可以在每个环境中覆盖的对象。示例:“globals” : { “myGlobal” : “some_global”}全局变量。也可以在外部文件中定义。关于外部全局变量
start_sessionbooleantrue是否自动启动 WebDriver 会话。通常在运行不与 Webdriver 服务器交互的单元/集成测试时设置为false。
end_session_on_failbooleantrue测试终止时自动结束会话,通常是在断言失败之后。
skip_testcases_on_failbooleantrue当一个测试用例失败时,跳过同一测试套件(即测试文件)中的剩余测试用例(或测试步骤)。
use_xpathbooleanfalse使用 xpath 作为默认定位器策略
use_sslbooleanfalse如果通过 https 连接到远程 Grid 服务器,则设置为 true。同时设置port为 443。
sync_test_namesbooleantrue启用后name将向包含测试用例名称的desiredCapabilities属性中添加一个属性。在使用云测试服务时很有用
persist_globalsbooleanfalse如果想在测试用例使用同一个全局对象则设置为true
selenium_host Deprecated - use selenium.hoststringlocalhostSelenium 服务器接受连接的主机名/IP。
selenium_port Deprecated - use selenium.portinteger4444Selenium 服务器接受连接的端口号。

过滤设置

用于定义过滤测试文件的方式

名称类型默认描述
excludearray要跳过的文件夹或文件模式数组(相对于主源文件夹)。示例:"exclude" : ["excluded-folder"]或:"exclude" : ["test-folder/*-smoke.js"]
filterstring加载测试时使用的文件夹或文件模式。与此模式不匹配的文件将被忽略。例子:"filter" : "tests/*-smoke.js"
skipgroupstring跳过一组测试(一个子文件夹);可以是逗号分隔值的列表(无空格)。
skiptagsstring按标签名称跳过测试;可以是逗号分隔值的列表(无空格)。

输出设置

用于设置允许测试控制输出和日志记录

名称类型默认描述
output_folderstringtests_outputJUnit XML 报告文件将被保存的位置。
disable_colorsbooleanfalse控制是否全局禁用 CLI 输出的着色。
live_outputbooleanfalse此选项仅在并行运行测试时有用。控制是否缓冲输出。
silentbooleantrue是否显示来自 WebDriver 或 Selenium 服务器的扩展 HTTP 流量命令日志。
outputbooleantrue用于完全禁用 CLI 输出。
detailed_outputbooleantrue默认情况下,在测试运行时会显示详细的断言输出。false如果您只想查看显示的测试用例名称和通过/失败状态,请将其设置为。并行运行测试时,默认情况下禁用详细输出。
disable_error_logbooleanfalse如果您不想在测试执行期间显示错误(它们始终显示在末尾),请将其设置为 true。
output_timestampbooleanfalse如果您想查看日志输出旁边的时间戳,请将其设置为 true。
log_screenshot_databooleanfalse用于在截屏时启用在(详细)日志中显示 Base64 图像数据。

Webdriver 设置

以下是 Webdriver 服务的一些选项。Nightwatch 可以自动启动和停止 Webdriver 进程。如果想启用此功能,设置start_process到true并指定二进制文件中的位置server_path。

名称类型默认描述
start_processbooleanfalse启用此选项后,Webdriver 服务器将在子进程的后台运行并自动启动/停止。Nightwatch 支持管理 Chromedriver、Geckodriver (Firefox)、Safaridriver 和 Selenium Server。有关详细信息,请参阅安装 Webdriver部分。
server_pathstringnone仅在start_process启用时有用。
hoststring仅当 Webdriver 服务在不同的机器上运行时才需要。
portintegerWebdriver监听 或 Nightwatch 将尝试连接的端口号
sslboolean如果true通过 HTTPS 连接到远程(云)服务,则应设置为。也不要忘记将端口设置为 443。
log_pathstring/booleannoneoutput.log将放置Webdriver 服务日志文件文件的位置。默认为当前目录。要禁用 Webdriver 日志记录,请将其设置为false
log_file_namestring/nonenone默认情况下,日志文件名将与测试用例文件名相同,但也可以指定不同的文件名。
cli_argsobjectnone要传递给 Webdriver 进程的 cli 参数列表。这因每个 Webdriver 实现而异。
keep_aliveboolean/objectfalse启用HTTP Keep-Alive。如果设置为truekeepAlive 选项,则使用默认设置 ( keepAliveMsecs= 3000)启用。如果设置为对象,可以指定指定keepAliveMsecs值。如:“keep_alive” : {“enabled” : true, “keepAliveMsecs” : 2000}
timeout_optionsobjecttimeout: 60000, retry_attempts: 0对 Webdriver 服务的请求将以timeout毫秒为单位超时;重试将发生retry_attempts多次。如:{timeout: 15000, retry_attempts: 5}
status_poll_intervalinteger100检查 Webdriver 服务器是否已启动并运行时,状态 ping 检查之间使用的时间间隔(以毫秒为单位)
max_status_poll_triesinteger5在返回超时错误之前检查 Webdriver 服务器是否已启动并运行时尝试 ping 状态检查的最大次数。
process_create_timeoutinteger120000等待 Node.js 进程创建和运行的整个时间(以毫秒为单位)(默认为 2 分钟),包括生成子进程和检查状态
usernamestringnone通常只需要云测试 Selenium 服务。如果服务器需要凭据,则此用户名将用于计算Authorization标头。该值也可以是环境变量:“username” : “${SAUCE_USERNAME}”
access_keystringnone该字段将与username计算Authorization标题一起使用。该值也可以是环境变量:“access_key” :"${SAUCE_ACCESS_KEY}"
proxystringnone对 Webdriver(或 Selenium)服务的代理请求。接受 http、https、socks(v5)、socks5、sock4 和 pac。使用需要作为独立于 NPM 的单独包安装的代理代理。
default_path_prefixstring有时在使用 Selenium 服务器时需要。添加到所有请求的前缀(例如/wd/hub)。

Selenium设置

如果使用 Selenium Server,那么连接相关的设置应该放在"selenium"". 如果webdriver和selenium都存在,则selenium配置项会与webdriver配置项合并。
"selenium"在配置与基于云的测试提供程序的连接时,也应使用这些设置,例如BrowserStack、SauceLabs、CrossBrowserTesting或LambdaTest。

名称类型默认描述
start_processbooleanfalse是否自动管理 Selenium 进程。
server_pathstringnoneSelenium.jar文件的位置。如果start_process启用,则需要指定此项。例如:bin/selenium-server-standalone-2.43.0.jar
log_pathstring/booleannoneSeleniumoutput.log文件存放位置。默认为当前目录。要禁用 Selenium 日志则设置为false
version2booleanfalse如果使用的是Selenium Server 2,则设置为true
portinteger4444Selenium 监听或 Nightwatch 尝试连接的端口号。
cli_argsobjectnone要传递给 Selenium 进程的 cli 参数列表。您可以在此处为浏览器驱动程序设置各种选项。

Selenium 示例配置

nightwatch.conf.js示例配置,它使用支持 Firefox、Chrome 和 Internet Explorer 的本地 Selenium 服务器。假设下列npm包已安装在当前项目中:geckodriver、chromedriver、selenium-server、iedriver

module.exports = {
  src_folders: [],

  test_settings: {
    default: {
    launch_url: 'https://nightwatchjs.org'
  },

  selenium: {
    // Selenium Server is running locally and is managed by Nightwatch
    selenium: {
      start_process: true,
      port: 4444,
      server_path: require('selenium-server').path,
      cli_args: {
        //默认情况下,Selenium 将为每个会话创建一个新的 Firefox 配置文件。
        'webdriver.gecko.driver': require('geckodriver').path,
        //Nightwatch 也可以使用Chrome浏览器运行测试。
        //要启用此功能,您必须下载ChromeDriver驱动程序并在此处指定其位置,将 chrome 指定为desiredCapabilities对象中的浏览器名称。
        //更多信息可以在ChromeDriver 网站上找到。
        'webdriver.chrome.driver': require('chromedriver').path,
        //Nightwatch 也适用于Internet Explorer。要启用此功能,您必须下载IE驱动程序并在此处指定它的位置。
        'webdriver.ie.driver': process.platform === 'win32' ? require('iedriver').path : ''
      }
    },
    webdriver: {
      start_process: false
    }
  },

  'selenium.chrome': {
    extends: 'selenium',
    desiredCapabilities: {
      browserName: 'chrome',
      chromeOptions: {
        w3c: false
      }
    }
  },

  'selenium.firefox': {
    extends: 'selenium',
    desiredCapabilities: {
      browserName: 'firefox'
    }
  },

  'selenium.ie': {
    extends: 'selenium',
    desiredCapabilities: {
      browserName: 'internet explorer'
    }
  }
}
}

BrowserStack 示例配置

Browserstack是最流行的云测试平台之一。将它与 Nightwatch 一起使用非常简单,并且在自动生成的nightwatch.conf.js文件中有配置。拥有帐户后,您需要设置以下环境变量BROWSERSTACK_USERBROWSERSTACK_KEY。Nightwatch也支持Dotenv文件。

module.exports = {
  src_folders: [],

  webdriver: {
    keep_alive: true,
    timeout_options: {
      timeout: 60000,
      retry_attempts: 3
    }
  }

  test_settings: {
    default: {
      launch_url: 'https://nightwatchjs.org'
    },

    browserstack: {
      selenium: {
        host: 'hub-cloud.browserstack.com',
        port: 443
      },

      // More info on configuring capabilities can be found on:
      // https://www.browserstack.com/automate/capabilities?tag=selenium-4
      desiredCapabilities: {
        'bstack:options' : {
          local: 'false',
          userName: '${BROWSERSTACK_USER}',
          accessKey: '${BROWSERSTACK_KEY}',
        }
      }
    },

    'browserstack.chrome': {
      extends: 'browserstack',
      desiredCapabilities: {
        browserName: 'chrome',
        chromeOptions : {
          w3c: false
        }
      }
    },

    'browserstack.firefox': {
      extends: 'browserstack',
      desiredCapabilities: {
        browserName: 'firefox'
      }
    },

    'browserstack.ie': {
      extends: 'browserstack',
      desiredCapabilities: {
        browserName: 'IE',
        browserVersion: '11.0',
        'bstack:options' : {
          os: 'Windows',
          osVersion: '10',
          local: 'false',
          seleniumVersion: '3.5.2',
          resolution: '1366x768'
        }
      }
    }
  }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值