写点什么

使用 Nightwatch 进行端到端测试

  • 2014-02-19
  • 本文字数:1404 字

    阅读完需:约 5 分钟

Nightwatch 是一套新近问世的基于 Node.js 的验收测试框架,使用 Selenium WebDriver API 以将 Web 应用测试自动化。它提供了简单的语法,支持使用 JavaScript 和 CSS 选择器,来编写运行在 Selenium 服务器上的端到端测试。

不同于行为驱动测试(BDD)和单元测试独立运行并使用模拟 / 存根,端到端测试将试着尽可能从用户的视角,对真实系统的访问行为进行仿真。对 Web 应用来说,这意味着需要打开浏览器、加载页面、运行 JavaScript,以及进行与 DOM 交互等操作。Nightwatch 尝试着使用语法糖( syntax sugar )来实现这一目标:

复制代码
this.demoTestGoogle = function (browser) {
browser
.url(“http://www.google.com”)
.waitForElementVisible('body', 1000)
.setValue('input[type=text]', 'nightwatch')
.waitForElementVisible('button[name=btnG]', 1000)
.click('button[name=btnG]')
.pause(1000)
.assert.containsText('#main', 'The Night Watch')
.end();
};

除简化了编写自动化测试的过程外,Nightwatch 还能够与持续集成的流水作业结合,从而对开发中的系统进行完整的诊断:

我们可以从 Nightwatch 网站找到当前提供特性的列表:

  • 简单但强大的语法。只需要使用 JavaScript 和 CSS 选择器,开发者就能够非常迅捷地撰写测试。开发者也不必初始化其他对象和类,只需要编写测试规范即可。
  • 内建命令行测试运行器,允许开发者同时运行全部测试——分组或单个运行。
  • 自动管理 Selenium 服务器;如果 Selenium 运行在另一台机器上,那么也可以禁用此特性。
  • 支持持续集成:内建 JUnit XML 报表,因此开发者可以在构建过程中,将自己的测试与系统(例如 Hudson Teamcity 等)集成。
  • 使用 CSS 选择器或 Xpath,定位并验证页面中的元素或是执行命令。
  • 易于扩展,便于开发者根据需要,实现与自己应用相关的命令。

目前,Selenium 是 JavaScript 的世界里验收测试方面最流行的工具之一,类似的还有 PhantomJS 。二者都有其独到的方法:Selenium 使用其 WebDriver API,而 PhantomJS 使用无界面的 WebKit 浏览器。它们都是非常成熟的工具,都具有强大的社区支持。它们与 Nightwatch 之间最大的不同,主要是在于语法的简易度以及对持续集成的支持。与 Nightwatch 相比,Selenium 和 PhantomJS 都拥有更加冗长的语法,这会让编码变得更庞大,而且不支持从命令行中进行开箱即用的持续集成(JUnit XML 或其他标准输出)。

尽管如此,Nightwatch 还处于不断演进的道路上,以成为更加成熟工具的。在 Google Groups 中, WD.js (另一个基于 Node.js 的验收测试框架)的作者 Sebastian Vincent 针对处理回调所选择的实现给出了一些批评意见

当涉及异步调用时,基于链式的队列是个糟糕的模式。如果开发者想要做一些复杂的事情,或是组合一些东西,最终将不得不手动停止队列以插入任务(但也许 Nightwatch 会证明我的看法是错的)。

Vincent 还针对 Nightwatch 和 Selenium 服务器之间使用的底层通信协议,指出了其中存在的不足之处:

Nightwatch 离成熟还远,看看 HTTP 协议,GET 和 DETLETE 中没有重试、没有超时设置,也没有内容 / 长度 + 内容类型。在非直接情况下(例如 Sauce-connect 或排队),它很快就会出现问题。

然而,哪怕有这些批评的声音,Nightwatch 还是入选了 GitHub 本月最热门代码仓库。另外该团队运营着一个 Twitter 账号,听取来自社区的反馈并与开发者互动。

查看英文原文: Testing End-to-End with Nightwatch

2014-02-19 05:5111835
用户头像

发布了 256 篇内容, 共 86.5 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

安卓开发交流!一线互联网移动架构师筑基必备技能之Java篇,Android岗

欢喜学安卓

android 程序员 面试 移动开发

Elasticsearch 写一致性原理

escray

七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

前端面试必备ES6全方位总结

我是哪吒

程序员 面试 大前端 ES6 2月春节不断更

说说常常被研发忽略的原型模式

后台技术汇

28天写作 2月春节不断更

话题讨论|过年回家你带电脑吗?

熊斌

话题讨论 28天写作

第十周 学习总结

简简单单

不要在nodejs中阻塞event loop

程序那些事

node.js Event 事件循环 程序那些事 nodejs event

用RabbitMQ了好几年之后,我总结出来5点RabbitMQ的使用心得

四猿外

MQ RabbitMQ 消息队列

挖矿系统APP源码搭建

luluhulian

厚积薄发!华为云7篇论文被AAAI收录,2021年AI行业技术风向标看这里!

华为云开发者联盟

人工智能 卷积网络 远程监督 域泛化 油气储集层收集

产品训练营 第三次作业

Wangyunnfei

大背景 (28天写作 Day25/28)

mtfelix

28天写作 新能源汽车 新能源革命 碳中和

史上最清晰的Tarjan算法详解

华为云开发者联盟

算法 静态分析 语法树 Tarjan 数据流

安卓开发软件有哪些?分析Android未来几年的发展前景,吐血整理

欢喜学安卓

android 程序员 面试 移动开发

ModelArts AI Gallery与HiLens Kit联合开发丨行人社交距离风险提示Demo

华为云开发者联盟

华为云 modelarts hilens 行人 社交距离

挖矿区块链_什么是挖矿 带你详细了解挖矿基础知识

v16629866266

Python 中 sorted 如何自定义比较逻辑

zikcheng

Python sorted cmp

就算知道了答案,真的会改变吗?「幻想短篇 25/28」

道伟

28天写作

产品经理训练营第0期-第三次作业

孙行者

第0期 产品经理训练营 问题

第十周 模块分解作业

简简单单

高性能缓存 Caffeine 原理及实战

vivo互联网技术

Java Caffeine 本地缓存

OpenAI将k8s扩展至7500个节点以支持机器学习;Graph Diffusion Network提升交通流量预测精度

京东科技开发者

区块链 开源

华为云FusionInsight助力宇宙行打造金融数据湖新标杆

华为云开发者联盟

数据湖 云原生 存储 FusionInsight 华为云

使用pgBackRest并行归档解决wal堆积问题

PostgreSQLChina

数据库 postgresql 开源 开源社区

时间约束帮助我写作

Justin

方法论 创意 习惯养成 28天写作

第三章: 产品解决方案作业

让时间说真话

产品经理 产品经理训练营

官宣了!Apache ECharts 毕业成为 Apache 软件基金会顶级项目!

百度Geek说

百度 基金会

【WOW.js】Animate.css的黄金搭档

德育处主任

CSS 动画 js 28天写作 2月春节不断更

日记 2021年2月2日(周二)

Changing Lin

个人感悟 2月春节不断更

云原生动态周报 | Google推出VM Manager

华为云原生团队

Docker 开源 云原生 华为云

第三章:产品解决方案作业

让时间说真话

产品经理

使用Nightwatch进行端到端测试_JavaScript_João Paulo Marques_InfoQ精选文章