写点什么

使用 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:5111558
用户头像

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

关注

评论

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

回"疫"录(5):不见面,云拜年

小天同学

疫情 回忆录 现实纪录 纪实

【奖项公布】致内测用户——亲爱的1号创作者们~

InfoQ写作社区官方

写作平台 1号创作者 奖品 热门活动

【获奖名单公示】作为一名技术人,我为什么要写作?

InfoQ写作社区官方

程序员 写作 写作平台 热门活动

Gary的唠叨(二):先算是非,后算得失

小盖

Gary的唠叨 感悟

JCJC错别字检测JS接口新增CORS跨域支持

田春峰-JCJC错别字检测

媒体的经营 02 | 媒体/内容行业的主要变现方式

邓瑞恒Ryan

创业 投资 商业

学会打破确定性思维,才能做得更好

松花皮蛋me

高效工作 10X工作法 精益开发

对开发人员有用的定律、理论、原则和模式

松花皮蛋me

Java 设计模式

香港上市"失效"、传言申请科创板,聊聊半年亏损52亿的旷视科技 | IPO招股书系列(4)

赵新龙

IPO 旷视科技 上市 招股说明书 科创板

专家的直觉和你的直觉

池建强

书摘 直觉

网站是什么?

insight

网站

深度工作

insight

读书笔记

夏天将来,愿我们有足够的知识继续前进

Amon Lee

程序员陪娃漫画系列——夜宵

孙苏勇

程序员 生活 陪伴 漫画

如何高效开会

熊斌

效率 效率工具

npm version 使用详解

Leo

大前端 npm 语义化 版本控制

3000字长文教你大数据该怎么学!

老蒙

Java 大数据 spark 学习 开源

这一战,必战,若一去不返,便一去不返

霍太稳@极客邦科技

创业 项目管理 团队建设 InfoQ

死磕Java并发(5):线程详解,Java开发这么久,这些线程的基础知识你确定都会了?

Seven七哥

Java Java并发 线程

我为什么不愿在公众号发文章,却愿在写作平台发

小天同学

微信公众平台 产品 反馈 写作平台

说说疫情下的新常态该怎么应对

CD826

疫情 新常态

网络编程方法

Ya

方法论 网络编程 socket

小技巧:ssh -D 让终端访问或下载快一点

肖飞码字

Linux Shell

稀缺:我们为什么会陷入贫穷与忙碌

insight

读书笔记

您到底要说什么?

水色

人生一大误区:做到80%就不错了

池建强

个人成长 自我管理

Java并发编程系列——线程的等待与唤醒

孙苏勇

Java Java并发 并发编程 线程

网站架构方法

Ya

架构 方法论 网站 大型软件

原创 | DDD与分层

编程道与术

怎么写出bug的

三爻

媒体的经营 03 | 很显然,媒体卖广告是最没有前途的

邓瑞恒Ryan

创业 媒体 商业模式

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