使用 Mocha 作为测试运行器
概述
在 Nightwatch 2 中,集成的 Mocha 运行器已升级为使用 **Mocha v9**,并且实现也已更新以匹配 Nightwatch 在其自己的默认测试运行器中提供的大多数功能,例如使用标签或全局测试钩子的能力。
为什么选择 Mocha?
即使 Nightwatch 从版本 1.3
开始就支持使用 BDD describe 接口编写测试,但考虑到 Mocha 极高的知名度、悠久的历史和易用性,它仍然是一个有吸引力的选择。
Mocha 对高级报告的支持仍然是无与伦比的,因此我们竭尽全力确保 Mocha 与 Nightwatch 2 的配合更佳。
配置
为了在 Nightwatch 中使用 Mocha,您需要设置 test_runner
配置属性并将类型设置为 mocha
。还可以指定 Mocha 的自定义选项
{
// other settings...
test_runner: {
type : 'mocha',
options : {
ui : 'bdd',
reporter : 'list'
}
}
}
或者简单地
{
test_runner : 'mocha'
}
可以在 这里找到支持的 Mocha 选项的完整列表。
也可以在测试环境级别指定 test_runner
选项
{
test_settings : {
default: {
test_runner: 'default'
},
mocha_tests: {
test_runner : {
type : "mocha",
options : {
ui : "bdd",
reporter : "list"
}
}
}
}
}
CLI 选项
Nightwatch 支持一些作为主 nightwatch CLI 工具的参数指定的 Mocha 特定 CLI 选项。其中一些(如 retries
)在 Nightwatch 中也有定义的行为,当使用 Mocha 时,Nightwatch 将委派它们。
以下是目前支持的参数列表
--reporter
--grep
--fail-fast
- 在 Mocha 中定义为--bail
--retries
--fgrep
--invert
示例:
npx nightwatch examples/tests/ --reporter mochawesome
扩展 describe() 语法
Nightwatch 2 中的新 Mocha 支持已构建为尽可能匹配 内置 Nightwatch describes()
语法 中提供的扩展语法。
以下是使用 Mocha 在 Nightwatch 中可用的完整语法
describe('homepage test with describe', function() {
// All current settings are available via this.settings
// console.log('Settings', this.settings);
// All current cli arguments are available via this.argv
// console.log('argv', this.argv);
// The current mocha options object
// console.log('mochaOptions', this.mochaOptions);
// All current globals are available via this.globals
// console.log('globals', this.globals);
// testsuite specific capabilities
// this.desiredCapabilities = {};
// Enable this if the current test is a unit/integration test (i.e. no Webdriver session will be created)
// this.unitTest = false
// Set this to false if you'd like the browser window to be kept open in case of a failure or error (useful for debugging)
// this.endSessionOnFail = true
// Set this to false if you'd like the rest of the test cases/test steps to be executed in the event of an assertion failure/error
// this.skipTestcasesOnFail = true
// this.suiteRetries(2);
// Control the assertion and element commands timeout until when an element should be located or assertion passed
// this.waitForTimeout(1000)
// Control the unit test timeout
// this.timeout(1000)
// Controll the polling interval between re-tries for assertions or element commands
// this.waitForRetryInterval(100);
before(function(browser) {
this.homepage = browser.page.home();
});
it('startHomepage', () => {
this.homepage.navigate();
this.homepage.expect.section('@indexContainer').to.be.not.visible;
});
// Run only this testcase
// it.only('startHomepage', () => {
// this.homepage.navigate();
// });
// skipped testcase: equivalent to xit()
it.skip('async testcase', async browser => {
const result = await browser.getText('#navigation');
console.log('result', result.value)
});
after(browser => browser.end());
});
示例
使用 Mocha 编写测试与在 Nightwatch 中编写测试相同。每个测试用例都会收到 browser
对象,hooks
也会收到一个用于异步操作的 done
回调函数。
describe('Google demo test for Mocha', function() {
describe('with Nightwatch', function() {
before(function(browser, done) {
done();
});
after(function(browser, done) {
browser.end(function() {
done();
});
});
afterEach(function(browser, done) {
done();
});
beforeEach(function(browser, done) {
done();
});
it('uses BDD to run the Google simple test', function(browser) {
browser
.url('https://google.com')
.expect.element('body').to.be.present.before(1000);
browser.setValue('input[type=text]', ['nightwatch', browser.Keys.ENTER])
.pause(1000)
.assert.containsText('#main', 'Night Watch');
});
});
});
使用 mochawesome 报告器
Mochawesome 是一个非常流行的自定义报告器,用于与 Mocha 配合使用,并且在使用 Mocha 作为测试运行器时,它也可以与 Nightwatch 配合使用。
要使用 Mochawesome,只需使用上述信息将 Mocha 配置为 test_runner
,然后使用 NPM 安装它
npm i mochawesome --save-dev
要将其用作报告器,只需传递 --reporter mochawesome
参数,如下所示
npx nightwatch examples/tests/ --reporter mochawesome
配置报告器选项
可以在主 Nightwatch 配置中的 reporterOptions
字典(位于 test_runner
内)中定义 Mochawesome 报告器选项
{
// ...
test_runner: {
type : 'mocha',
options : {
ui : 'bdd',
reporter : 'mochawesome',
reporterOptions: {
reportDir: './output'
}
}
}
}
并行运行
当使用测试工作进程并行运行测试时,您需要安装 mochawesome
需要的一些额外软件包
npm install mochawesome-report-generator mochawesome-merge --save-dev
使用 mocha-junit-reporter
当使用 Mocha 时,Nightwatch 的默认内置 JUnit 报告器不可用,但可以使用流行的 mocha-junit-reporter
作为完美替代。
您只需从 NPM 安装它,它就可以正常运行。如果需要,您可以选择以与 mochawesome
报告器相同的方式配置其设置
{
// ...
test_runner: {
type : 'mocha',
options : {
reporterOptions: {
reportDir: './output'
}
}
}
}
npm i mocha-junit-reporter --save-dev
要将其用作报告器,只需传递 --reporter mocha-junit-reporter
参数,如下所示
npx nightwatch examples/tests/ --reporter mocha-junit-reporter