测试运行器需要传递配置文件,默认情况下使用当前目录中的nightwatch.json
文件(如果存在)。如果找到,默认情况下也会加载nightwatch.conf.js
文件。
让我们在项目的根文件夹中创建nightwatch.json并在里面添加:
{
"src_folders" : ["tests"],
"output_folder" : "reports",
"custom_commands_path" : "",
"custom_assertions_path" : "",
"page_objects_path" : "",
"globals_path" : "",
"selenium" : {
"start_process" : false,
"server_path" : "",
"log_path" : "",
"port" : 4444,
"cli_args" : {
"webdriver.chrome.driver" : "",
"webdriver.gecko.driver" : "",
"webdriver.edge.driver" : ""
}
},
"test_settings" : {
"default" : {
"launch_url" : "http://localhost",
"selenium_port" : 4444,
"selenium_host" : "localhost",
"silent": true,
"screenshots" : {
"enabled" : false,
"path" : ""
},
"desiredCapabilities": {
"browserName": "firefox",
"marionette": true
}
},
"chrome" : {
"desiredCapabilities": {
"browserName": "chrome"
}
},
"edge" : {
"desiredCapabilities": {
"browserName": "MicrosoftEdge"
}
}
}
}
同时使用这两个配置文件也是可能的,如果两个配置文件都能找到,则nightwatch.conf.js始终优先。
范例
module.exports = (function(settings) {
settings.test_workers = false;
return settings;
})(require('./nightwatch.json'));
基本配置
名称 | 类型 | 默认配置 | 备注 |
---|---|---|---|
src_folders | string/array | none | 测试所在的文件夹数组(不包括子文件夹)。 |
output_folder(有子选项) | string | 测试结果 | 保存JUnit XML格式报告文件的位置。 |
custom_commands_path(有子选项) | string/array | none | 加载自定义命令的位置。 |
custom_assertions_path(有子选项) | string/array | none | 加载自定义断言的位置 |
page_objects_path(有子选项) | string/array | none | 加载自定义目标的位置 |
globals_path | string | none | 外部全局模块的位置,它将作为主客户端实例测试上的全局变量属性加载。Globals也可以 在test_settings环境中定义/覆盖。 |
selenium(有子选项) | object | 包含Selenium Server相关配置选项的对象。请参阅下文了解详情。 | |
test_settings | object | 该对象包含所有与测试相关的选项。请参阅下文了解详情。 | |
live_output(有子选项) | boolean | false | 是否在并行运行时缓冲输出。请参阅下文了解详情。 |
disable_colors (有子选项) | boolean | false | 控制是否全局禁用cli输出的着色。 |
parallel_process_delay(有子选项) | integer | 10 | 指定在并行模式下运行时启动子进程之间的延迟(以毫秒为单位)。 |
test_workers (有子选项) | boolean/object | false | 是否并行运行单个测试文件。如果设置为true,则并行运行测试并自动确定工作器数。 如果设置为对象,则可以指定将worker的数量指定为“auto”或数字。 例子: “test_workers” : {“enabled” : true, “workers” : “auto”} |
test_runner (有子选项) | string/object | “default” | 指定运行测试时要使用的测试运行器。值可以是默认值(内置于nightwatch runner)或mocha。例子: “test_runner” : {“type” : “mocha”, “options” : {“ui” : “tdd”}} |
selenium设置
以下是selenium服务器进程的许多选项。 Nightwatch可以自动启动和停止Selenium过程,这非常方便,因为您不必自己管理,只关注测试。
如果要启用此功能,请将start_process
设置为true,并在server_path
中指定jar
文件的位置。
名称 | 类型 | 默认配置 | 备注 |
---|---|---|---|
start_process | boolean | false | 是否自动管理selenium过程。 |
start_session(有子选项) | boolean | true | 是否自动启动Selenium会话。在运行不与Selenium服务器交互的单元/集成测试时,通常会将其设置为false。 |
server_path | string | none | selenium jar文件的位置。如果启用了start_process,则需要指定此项。 例如:bin / selenium-server-standalone-2.43.0.jar |
custom_assertions_path(有子选项) | string/array | none | 加载自定义断言的位置 |
page_objects_path(有子选项) | string/array | none | 加载自定义目标的位置 |
globals_path | string | none | 外部全局模块的位置,它将作为主客户端实例测试上的全局变量属性加载。Globals也可以 在test_settings环境中定义/覆盖。 |
log_path | string/boolean | none | selenium output.log文件的放置位置。默认为当前目录。 要禁用Selenium日志记录,请将其设置为false。 |
port | integer | 4444 | Selenium 监听的端口号 |
cli_args | object | none | 要传递给Selenium进程的cli参数列表。在这里,您可以为浏览器驱动程序设置各种选项,例如: 1.webdriver.firefox.profile :Selenium将默认为每个会话创建一个新的Firefox配置文件。如果您希望使用现有的Firefox配置文件,可以在此处指定其名称。 此处提供的Firefox驱动程序参数的完整列表。2.webdriver.chrome.driver :Nightwatch也可以使用Chrome浏览器运行测试。要启用此功能,您必须下载ChromeDriver二进制文件并在此处指定其位置。另外,不要忘记在desiredCapabilities 对象中指定chrome作为浏览器名称。 可以在ChromeDriver网站上找到更多信息。3.webdriver.ie.driver:Nightwatch也支持Internet Explorer。要启用此功能,您必须下载IE驱动程序二进制文件并在此处指定它的位置。另外,不要忘记将“Internet Explorer”指定为desiredCapabilities对象中的浏览器名称。 |
测时配置
以下是将传递给Nightwatch实例的一些设置。您可以定义测试设置的多个部分(环境),以便可以覆盖每个环境的特定值。
需要“默认”环境。所有其他环境都是从默认环境继承的,可以根据需要覆盖设置。
{
...
"test_settings" : {
"default" : {
"launch_url" : "http://localhost",
"globals" : {
"myGlobalVar" : "some value",
"otherGlobal" : "some other value"
}
},
"integration" : {
"launch_url" : "http://staging.host",
"globals" : {
"myGlobalVar" : "other value"
}
}
}
}
然后可以将设置组的键作为--env
参数传递给运行器以使用指定的设置,如下所示:
$ nightwatch --env integration
如果您需要为本地计算机和Continuous Integration服务器设置不同的设置,这将非常有用。
launch_url属性
该属性将提供给测试中使用的主要Nightwatch api。它的价值取决于使用的环境。
如果您按照上面的示例运行测试(使用--env integration
),则start_url
将根据配置设置为http://staging.host
。否则,它将具有在默认环境中定义的值(即http:// localhost
)。
module.exports = {
'Demo test' : function (browser) {
browser
.url(browser.launchUrl)
// ...
.end();
}
};
测试全局变量
Nightwatch提供的一个非常有用的概念是测试全局。在最简单的形式中,这是一个名称 - 值对的字典,它在nightwatch.json
配置文件中定义。与launch_url
属性一样,它可以直接在Nightwatch api上使用,并传递给测试。它还取决于所使用的环境,能够覆盖每个环境的特定全局变量。
如果我们仍然将--env
集成选项传递给runner,那么我们的globals对象将如下所示:
module.exports = {
'Demo test' : function (browser) {
console.log(browser.globals);
// {
// "myGlobalVar" : "some value",
// "otherGlobal" : "some other value"
// }
}
};
默认情况下,将为每个测试套件运行创建深层对象副本。如果您想在整个测试运行期间保持相同的对象,请将persist_globals
选项设置为true,如下所述。
完整的设置列表
名称 | 类型 | 默认配置 | 备注 |
---|---|---|---|
launch_url | string | none | 一个url,可以在以后的测试中用作加载的主URL。如果您的测试将在不同的环境中运行,每个环境都有不同的URL,则可能很有用。 |
selenium_host | string | localhost | selenium服务器接受连接的主机名/ IP。 |
selenium_port | integer | 4444 | selenium服务器接受连接的端口号。 |
request_timeout_options(自v0.9.11起) | object | 60000 / 0 | 定义在达到超时之前,对Selenium服务器的HTTP请求将保持打开的毫秒数。超时后,请求可以自动重试指定的次数,由retry_attempts 属性定义。例如:"request_timeout_options": { "timeout": 15000, "retry_attempts": 5} |
silent | boolean | true | 是否显示扩展的Selenium命令日志。 |
output | boolean | true | 用于完全禁用终端输出。 |
disable_colors | boolean | false | 用于禁用终端中的彩色输出。 |
firefox_profile | string/object | none | 不推荐使用此选项,而选择selenium设置对象上的cli_args对象。 |
chrome_driver | string | none | 不推荐使用此选项,而选择selenium设置对象上的cli_args对象。 |
ie_driver | string | none | 不推荐使用此选项,而选择selenium设置对象上的cli_args对象。 |
screenshots | object | none | Selenium会在发生命令错误时生成屏幕截图。将on_failure 设置为true,还会生成失败或错误测试的屏幕截图。这些保存在磁盘上。从v0.7.5起,您可以通过将“on_error ”设置为false来禁用命令错误的屏幕截图。例如:”screenshots” : { “enabled” : true, “on_failure” : true, “on_error” : false, “path” : “”} |
username | string | none | 如果selenium服务器需要凭据,则此用户名将用于计算Authorization标头。该值也可以是环境变量,在这种情况下,它将如下所示:"username" : "${SAUCE_USERNAME}" |
access_key | string | none | 此字段将与username 一起使用以计算Authorization 标头。 与username 一样,该值也可以是环境变量:"access_key" : "${SAUCE_ACCESS_KEY}" |
proxy(自v0.8.6起) | string | none | proxy请求到selenium服务器。接受http,https,socks(v5),socks5,sock4和pac。使用node-proxy-agent 。例如:http://user:pass@host:port |
desiredCapabilities | object | 将在创建新会话时传递给Selenium WebDriver的对象。您可以指定实例的浏览器名称以及其他功能。例如:"globals" : { "myGlobal" : "some_global"} | |
exclude | array | 要跳过的文件夹或文件模式数组(相对于主源文件夹)。例如:"exclude" : ["excluded-folder"] 或"exclude" : ["test-folder/*-smoke.js"] | |
filter | string | 加载测试时要使用的文件夹或文件模式。与此模式不匹配的文件将被忽略。例如:"filter" : "tests/*-smoke.js" | |
log_screenshot_data | boolean | false | 在拍摄屏幕截图时,不要在(详细)日志中显示Base64图像数据。 |
globals_path | string | none | 外部全局模块的位置,它将作为主客户端实例测试上的全局变量属性加载。Globals也可以 在test_settings环境中定义/覆盖。 |
log_path | string/boolean | none | selenium output.log文件的放置位置。默认为当前目录。 要禁用Selenium日志记录,请将其设置为false。 |
use_xpath | boolean | false | 使用xpath作为默认定位器策略 |
cli_args | object | none | 与Selenium设置cli_args 相同。您可以基于每个环境覆盖全局cli_args 。 |
end_session_on_fail | boolean | true | 通常在断言失败后,在测试终止时自动结束会话。 |
skip_testcases_on_fail | boolean | true | 当一个测试用例失败时,从同一测试套件(即测试文件)中跳过剩余的测试用例(或测试步骤)。 |
output_folder(自0.8.18) | string/object | 当定义将保存JUnit XML报告文件的位置。这将覆盖“基本设置”部分中定义的任何值。如果您想在特定环境中完全禁用报告,请将其设置为false 。 | |
persist_globals(自0.8.18) | boolean | false | 如果您想在testsuite运行之间保留相同的全局对象,或者每个testsuite都有一个(深层)副本,请将此设置为true 。 |
compatible_testcase_support(自0.9.0) | boolean | false | 适用于单元测试。设置为true时,允许将测试写入标准Exports接口,该接口可与Mocha框架互换。不推荐使用先前的单元测试接口支持,这将成为未来版本的默认设置。 |
detailed_output(自0.9.0) | boolean | true | 默认情况下,在测试运行时会显示详细的断言输出。如果您只想查看显示的测试用例名称和通过/失败状态,请将此项设置为false。这在并行运行测试时特别有用。 |