写点什么

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

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

关注

评论

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

区块链正在塑造医疗保健生态系统!

CECBC

在线CSS3压缩美化格式化

入门小站

工具

深度关注 | 元宇宙如何改写人类社会生活

CECBC

"三高"Mysql - Mysql的基础结构了解

懒时小窝

MySQL 数据库

CorelDRAW2022下载及新增功能讲解

茶色酒

cdr2022

06 - vulhub - Apache HTTPD 多后缀解析漏洞,2021年Python大厂面试分享

程序媛可鸥

Python 程序员 面试

实用机器学习笔记二十九:NLP 中的微调

打工人!

机器学习 学习笔记 nlp 机器学习算法 3月月更

人工智能1秒检测一辆车,TA助力广本新车质量排名第一

百度大脑

在线JSON转HTML工具

入门小站

工具

28,2021最新Python面试笔试题目分享

程序媛可鸥

Python 程序员 面试

软件入门之《编程指南》-学习路径和经验随谈

hongfei

个人成长 编程好习惯 经验总结

又一重量级国赛来啦,保研可加分 | 中国软件杯飞桨遥感赛道正式启动

百度大脑

10个Python set 常用操作函数!,oppoPython面试题

程序媛可鸥

Python 程序员 面试

架构实战营 毕业设计项目

樰巳-堕~Horry

架构实战营 「架构实战营」

Linux之alias命令

入门小站

Linux

重新开始学习测试驱动开发

escray

学习笔记 测试驱动开发

#yyds内容盘点# 一文带你搞懂Python中变量与常量,Python开发框架

程序媛可鸥

Python 程序员 面试

17个新手常见错误,送给初学Python的你!,憋个大招

程序媛可鸥

Python 程序员 面试

北京大学董豪老师解密人工智能开发工具的过去与未来

OpenI启智社区

人工智能 开发工具 启智社区 北京大学

Flutter 开发一个常用的登录界面

岛上码农

ios 移动端开发 3月月更 flutter开发 安卓开发

全球央行积极推进CBDC 俄罗斯制裁或成催化剂?

CECBC

golang里的一些奇奇怪怪的东西

不登山的小鲁

golang Go 语言

架构实战营模块九-毕业设计-电商秒杀系统

Jude

架构实战营

Axios 教程:Vue + Axios 安装及实战 - 手把手教你搭建加密币实时价格看板

蒋川

Vue Node axios

开学季 | 飞桨AI Studio课程学习,小白也可以成为一名优秀的算法工程师

百度大脑

调查:区块链游戏玩家将玩NFT游戏视为一份潜在的全职工作

CECBC

Java 中的静态字段和静态方法

踏雪痕

Java 3月程序媛福利 3月月更

Redis集群架构剖析(2):槽位

非晓为骁

redis集群 slots 分布式,

《软件开发的201个原则》思考:3.开发效率和质量密不可分

非晓为骁

程序员 个人成长 软件工程 软件开发原则 开发质量

Top Trending Libraries of 2021,PaddleOCR再开源8大前沿顶会论文模型!

百度大脑

2022美赛单变量深度学习LSTM 时间序列分析预测,作为Python开发者

程序媛可鸥

Python 程序员 面试

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