最近给前端项目做持续集成,用了nightwatch作为end-to-end测试框架,期间踩坑不断,不过总算有惊无险的完成了任务,实现了领导给的三个happy path的测试。学习期间,顺便把nightwatch官网文档稍微撸了一遍,我查了一下,貌似没有中文文档,所以这系列的博客教程,算是半个翻译的文档吧。我会首先按照官网的顺序把重要的知识点介绍一下,接着会以一个vue项目为基础,做一个小前端项目的例子。
官网地址:http://nightwatchjs.org/

本文主要简单介绍了nightwatch的运行机制,安装,最后运行一个简单的测试用例。

简介

什么是nightwatch

Nightwatch.js 是一个用来测试web应用和网站的自动化测试框架,它是由NodeJs编写的,使用了W3C WebDriver API(之前是Selenium WebDriver)

它是完全的浏览器(end-to-end)测试方案,旨在简化搭建持续集成和编写自动话测试的过程。它也同样可以用来写NodeJs的单元测试。

nightwatch的名字,是出自一个荷兰艺术家Rembrandt van Rijn的著名画作:The Night Watch.这幅作品目前展出在Rijksmuseum, in Amsterdam - The Netherlands

什么是WebDriver

WebDriver 是一个自动化web浏览器的通用库。它一开始是Selenium项目的一部分,用java写的,但是现在支持大多数的编程语言了。

Nightwatch 使用 WebDriver API 来呈现浏览器的自动化任务,比如打开窗口、点击链接等。

WebDriver 现在是一个W3C的一个细则,旨在使浏览的自动化可以统一标准。WebDriver 是一个远程控制接口,启用了自省和用户代理控制。它提供一个平台和一个restful的HTTP api作为web浏览器被远程控制的方式。

安装

我们首先创建一个项目

mkdir nightwatch-guide && cd nightwatch-guide

接着初始化项目的package.json

npm init -y

然后安装依赖:

npm install nightwatch

由于它是基于Selenium Server的,所以还得装这个:

npm install selenium-server

我们希望chrome-driver来测试,所以再装一下谷歌的驱动,当然,你也可以选择火狐或者其他的驱动

npm install chromedriver

至此,所有依赖都安装结束了。

提示

  • 以上的如果安装不成功,请使用cnpm替代
  • 官网的介绍,说要安装jdk,我没有试过不用jdk行不行,我一开始电脑上就有jdk环境,所以也没有卸载掉试试。如果你安装中报了类似java有关的错误,比如什么包什么模块找不到,请安装jdk后再安装依赖。
  • 这部分官网有介绍:http://nightwatchjs.org/gettingstarted#selenium-server-setup

配置

在项目的根目录下新建一个nightwatch.conf.js文件,然后将以下的代码拷贝进去。

module.exports = {src_folders: [''],output_folder: 'output',custom_assertions_path: [],page_objects_path: '',globals_path: '',selenium: {start_process: true,server_path: require('selenium-server').path,host: '127.0.0.1',port: 5555,cli_args: {'webdriver.chrome.driver': require('chromedriver').path}},test_settings: {default: {selenium_port: 5555,selenium_host: 'localhost',silent: true,globals: {devServerURL: 'http://localhost:' + (process.env.PORT || 1111)}},chrome: {desiredCapabilities: {browserName: 'chrome',javascriptEnabled: true,acceptSslCerts: true}},firefox: {desiredCapabilities: {browserName: 'firefox',javascriptEnabled: true,acceptSslCerts: true}}}
}

以上只是一些简单的配置,大概的意思也能根据名字猜出来。你可以先使用上面的配置作为你的初始配置,先跑一个例子起来,不用太纠结每个配置的含义。关于配置,我会单独再写一篇博客翻译。

第一个测试用例

编码测试代码

我们先不用配置上的src_folders的目录作为测试目录。

在项目的根目录下新建一个examples的文件夹,用于存放我们的测试脚本。接着新建一个js文件作为测试文件。
如图:

examples|---01-hello-nightwatch.js

接着写入我们的测试脚本:

module.exports = {'search nightwatch on baidu': function (browser) {browser.url('http://www.baidu.com').waitForElementVisible('body', 1000).setValue('#kw', 'nightwatch').click('#su').pause(3000).waitForElementVisible('#content_left', 3000).end();}
};

上面的用例,模拟了用户在百度搜索nightwatch关键字的过程。

运行测试用例

我们先直接使用node_modules里的命令跑一下:

./node_modules/.bin/nightwatch  examples/01-hello-nightwatch.js

但是这时候却报错了

Error retrieving a new session from the selenium serverConnection refused! Is selenium server started?
{ value: { message: 'Unable to create new service: GeckoDriverService\nBuild info: version: \'3.14.0\', revision: \'aacccce0\', time: \'2018-08-02T20:13:22.693Z\'\nSystem info: host: \'jerrydeMacBook-Pro.local\', ip: \'fe80:0:0:0:48d:c61d:503d:2b53%en0\', os.name: \'Mac OS X\', os.arch: \'x86_64\', os.version: \'10.13.6\', java.version: \'1.8.0_172\'\nDriver info: driver.version: unknown',error: 'session not created' },status: 33 }

这是因为我们没有指定env,nightwatch会自动的找defaultenv,就是上面配置test_settings中的default,接着它会找默认的driver,是firefox的,我们前面只安装了chrome-driver,所以这时候肯定是会报错的。

要解决这个问题很简单,找不到这个driver就安装一个呗。

npm install geckodriver

接着再跑就ok了。

我们也可以指定使用chrome-driver,我也是这么做的。

./node_modules/.bin/nightwatch examples/01-hello-nightwatch.js --env chrome

使用 --env 可以使用指定的环境,注意这个环境要是上面test_settings中定义过的。

这时候运行,成功!如下图:

使用npm运行

因为是用npm运行了,所以我们不想指定一个特定的测试文件,这时候,我们就要修改上面配置一节中的src_folders属性,将值设置为我们测试文件的目录即可:

src_folders: ['examples'],

接着我们在package.json的scripts中加入运行脚本:

"e2e": "nightwatch --env chrome"

接着在项目根目录下运行

npm run e2e

结果应该是根上面运行的一模一样的~

nightwatch系列教程01——Hello Nightwatch相关推荐

  1. nightwatch系列教程03——开发者指南:运行你的测试脚本

    本章内容翻译自http://nightwatchjs.org/guide#running-tests. 测试运行器 Nightwatch 包含一个命令行的测试运行器,它让运行测试文件和生成有用的输出变 ...

  2. nightwatch系列教程05——Nightwatch配置详解

    本章内容翻译自http://nightwatchjs.org/gettingstarted#settings-file. 测试运行接收一个配置文件作为参数,默认是当前目录下的 nightwatch.j ...

  3. nightwatch系列教程02——开发者指南:使用Nightwatch

    本章内容翻译自http://nightwatchjs.org/guide#using-nightwatch. 编写测试 在页面上使用推荐的CSS选择器,nightwatch让编写自动化测试变得很简单. ...

  4. 【视频教程】帝国CMS模板开发制作系列教程01

    在很早之前跟大家分享过一期Bootstrap的视频教程,今天我将跟大家分享一起关于用帝国CMS制作网站的视频教程,这套视频教程,主要是在本地搭建环境的,制作网站的一个过程,后面,我将会跟大家分享一期用 ...

  5. 【TypeScript系列教程01】入门介绍

    目录 什么是TypeScript? TypeScript 的过去与现在? JavaScript 与 TypeScript 的区别? 类型批注 第一个 TypeScript 实例 编译器

  6. 怎么用python制作超级玛丽_Python实现超级玛丽游戏系列教程01玛丽登场

    配套视频教程 项目代码 最终效果 搭建项目结构 定义游戏常量 SCREEN_HEIGHT = 600 SCREEN_WIDTH = 800 SCREEN_SIZE = (SCREEN_WIDTH,SC ...

  7. canvas系列教程01——直线、三角形、多边形、矩形、调色板

    绘图步骤 html中添加 canvas 标签,通常需指定 id width(默认 300px) height(默认 150px) <canvas id="canvas" wi ...

  8. python简单超级马里奥游戏下载大全_Python实现超级玛丽游戏系列教程01玛丽登场...

    配套视频教程 www.bilibili.com/video/BV1ua411c7m3 项目代码 gitee.com/kamiba/python_super_mario_game_code 最终效果 搭 ...

  9. Java框架技术核心基石系列教程(01)——编程语言类型及其特征

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 开篇语 近十几年来,在Java和Android开发领域中涌现出许多优秀的框架,比如:Sprin ...

最新文章

  1. Linux对用户态的动态内存管理
  2. 【机器学习】改善LBP特征提高SVM的可分性的经验总结(一)
  3. 坐下,这些都是二叉树的基本操作!
  4. JSF 网站汇总(转)
  5. 台式计算机哪款好,台式一体机电脑哪款好
  6. GBDT和XGBoost
  7. 2022年电工杯数学建模A题思路/2022电工杯A题思路解析
  8. tfidf算法 python_Python TFIDF计算文本相似度
  9. 收获的九月——《大数据实践课》成果展示
  10. 表格排版及其表格嵌套
  11. [tamarin系列之1] tamarin简介
  12. 做为中层管理者的你,应该扮演什么角色
  13. Latex矩阵和表达式组的绘制
  14. python数据类型的应用
  15. 用友U8+助力服装织造企业信息化建设 用友ERP 用友T+ 上海杰然软件
  16. Android Studio连接夜深模拟器
  17. 预制式智能模块化变电站
  18. 《JSP网站开发技术》教学大纲
  19. ORB-SLAM2的安装及试运行
  20. 移动OA实现智慧互联,助力企业办公无忧

热门文章

  1. 语音识别——CUM_Sphinx的安装及使用
  2. kafka服务器连接出现:[NetworkClient.java:935] [Producer clientId=producer-1] Node -1 disconnected原因分析
  3. 计算机体系结构 第三章 流水线(Pipeline)技术
  4. 如今考CCIE还香吗?网络工程师行业关于考试那点事儿
  5. iOS LaunchScreen.storyboard 的使用和适配
  6. 如何判断是否患上了咽喉炎?
  7. 【Flink】FLINK-CDC之入门
  8. jquery的鼠标滚轮插件 Mousewheel响应跨浏览器的鼠标滚轮事件
  9. 【无标题】武林盟主python
  10. 德声音频杂谈:Tree Audio 电子管模拟调音台混音演示