写点什么

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

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

关注

评论

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

从 Gitee 到极狐GitLab 的迁移指南

极狐GitLab

迁移 gitee 极狐GitLab

企业管理中用户数据同步机制解决思路

全象云低代码

低代码 数据同步 用户数据 后端技术

架构实战营模块一作业

刘璐

TCP长连接实践与挑战

字节跳动终端技术

字节跳动 TCP 后端 HTTP 连接池

天津银行周传凯:从 0 到 1,我的分布式数据库落地经验谈

OceanBase 数据库

分布式 OceanBase 开源 OceanBase 社区版 客户实践

微信业务架构图 & 学生管理系统设计

tom

LabVIEW实现PCB电路板元器件匹配定位(实战篇—7)

不脱发的程序猿

计算机视觉 图像处理 LabVIEW PCB电路板元器件匹配定位

领域划分的规则是什么

神帅

DDD 领域划分规则

微信业务架构图

Geek_36cc7c

☕【Java深层系列】「并发编程系列」深入分析和研究MappedByteBuffer的实现原理和开发指南

码界西柚

Java 文件I/O MappedByteBuffer FileChannel 1月日更

微信架构简析和学生系统初步方案

Bear

「架构实战营」

3DCAT首届行业生态交流会|瑞云科技技术总监赵志杰:实时渲染助力元宇宙应用触手可及

3DCAT实时渲染

云计算 公有云 云渲染 元宇宙

百度AICA再添57位“首席AI架构师”,人工智能与产业场景结合愈发深入

百度大脑

学生管理系统架构设计方案

Geek_36cc7c

模板

Anthony

实现一个任务调度系统,看这篇文章就够了

勇哥java实战分享

Elastic-job XXL-JOB 任务调度 自主研发

架构图 - 微信 & 学生管理系统

Ntropy

架构实战营

架构设计小试牛刀

Fingal

架构实战营

数据治理平台化的通用框架设计

小鲸数据

云厂商第一家,腾讯安全获国家级信息安全服务资质“双认证”!

腾讯安全云鼎实验室

云安全 安全服务

模块六作业

novoer

「架构实战营」

做了这么多年架构师,我终于理解了什么是架构设计

博文视点Broadview

DDD独立类模式你用到了吗

神帅

DDD 独立类模式

Apache APISIX 2.12.0 版本发布,新功能更适配新一年!

API7.ai 技术团队

开源 后端

第一次作业

Mr小公熊

三峡集团研究院:基于物联网的大规模储能系统能量管理和智能运维平台数据接入方案

EMQ映云科技

物联网 mqtt 碳中和 边云协同 新能源

如何知道自己是否适合做产品经理?

石云升

产品经理 1月月更

微信的业务架构&学生管理系统架构设计

随欣所遇

架构实战营

架构实战营-模块一作业

炎彬

「架构实战营」

为什么 Cpython 是 C 写的,而不是 Python

宇宙之一粟

Python 1月月更

架构训练营作业1

Richard

架构实战营

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