vue-cli 脚手架基于Nightwatch的端到端测试环境的过(7)
Nightwatch是通过Selenium加载一个GhostDriver来引导PhantomJS浏览器的,上面的内容就相当于告诉Selenium加载一个GhostDriver,可执行程序则指向npm上安装的phantomjs-prebuilt包,再通过这个包来引导安装在本机上的PhantomJS启动。
按上文这样来引用PhantomJS的二进制程序的地址非常难看,还有原生配置中的Selenium执行程序地址也是一样的,这里介绍一个更DRY的方法来处理这些路径:
var seleniumServer = require('selenium-server');
var phantomjs = require('phantomjs-prebuilt');
module.exports = {
// ...省略
"selenium": {
// ... 省略
"server_path": seleniumServer.path,
},
"test_settings": {
// ... 省略
"phantom": {
"desiredCapabilities": {
// ... 省略
"phantomjs.binary.path": phantomjs.path
}
}
// ... 省略
}
}
做完这个简单的优化后就可以打开runner.js文件找到:
if (opts.indexOf('--env') === -1) {
opts = opts.concat(['--env', 'chrome'])
}
将chrome改为phantom就行了:
if (opts.indexOf('--env') === -1) {
opts = opts.concat(['--env', 'phantom'])
}
重新加载测试程序,在同一台iMac上的运行速度直接降到了5秒,测试运行速度提升了3倍!如果你有配置更好的机器,将硬盘换成SSD之后会有更惊人的速度。
Nightwatch 与 Cucumber
如果你正在开发的项目的业务复杂性不大,可以直接使用Nightwatch推荐的链式调用写法。但是当这种做法真正应用在业务流程较多,或者业务操作相对复杂的应用场景时,你会觉得总有写不完的E2E测试,因为这么做E2E测试是没有办法一次性覆盖所有需求的!
E2E测试其实是行为式驱动开发的实现手法,如果跳过了行为式驱动开发的分析部分直接编写E2E,其结果只能是写出一堆严重碎片化的测试场景,甚至会出现很多根本不应该出现的操作。
幸好Nightwatch具有很好的扩展性与兼容性,能集成最正统的BDD测试框架Cucumber(https://cucumber.io/)。Cucumber是原生于Ruby世界的BDD框架,但它也有很多的语言实现版本,我们可以安装一套专门为Nightwatch编写的Cucumber版本——nightwatch-cucumber(https://github.com/mucsi96/nightwatch-cucumber)。本章只介绍关于环境与工具的配置,而关于如何来应用BDD,内容已经超出了本书的知识范围,如果有兴趣的话可以参考《攀登架构之巅》一书中行为式驱动开发的章节内容。
$ npm i nightwatch-cucumber -D
然后在~/test/e2e/nightwatch.conf.js文件中加入对Cucumber的配置:
// ... 省略
require('babel-register');
require('nightwatch-cucumber')({
nightwatchClientAsParameter: true,
featureFiles: ['test/e2e/features'],
stepDefinitions: ['test/e2e/features/step_definitions'],
jsonReport: 'test/e2e/reports/cucumber.json',
htmlReport: 'test/e2e/reports/cucumber.html',
openReport: false
});
内容版权声明:除非注明,否则皆为本站原创文章。
