我们将使用 Selenium 与 Nightwatch 搭建我们的测试脚手架。
Selenium 是一款 Web 的自动化测试环境,它将帮我们搭建好测试环境,调取系统安装的浏览器,在浏览器里执行一切自动化行为;
Nightwatch 是一款 Test Runner,可以简单理解为前者的控制软件,它将提供一系列接口供我们编写测试案例,同时也是与现有前端项目结合的桥梁。只需使用 Javascript 和 CSS 选择器,不需要初始化其他对象和类,您只需要编写测试规范。内置命令行测试运行器,使您能够运行整体测试,分组测试或者单个测试。
环境准备
首先要安装 Java 7 或更高 ,并且 java 命令可正常执行才能测试噢~~ 最简单的判断方法就是打开自己的终端,输入 java 并回车,看看是不是有 Java 运行。如果有命令不存在之类的提示,请重新安装 Java 运行环境 (・∀・)
Selenium 是一个直接运行在浏览器中的非常流行的综合测试工具集, 最初为Java 语言编写, 现在已经支持许多语言。
概述
总的来说,核心是使用selenium和driver操作浏览器,通过 nightwatch做断言。
安装工具
然后我们将安装 Selenium 与 Nightwatch。
安装 selenium-standalone:
npm install selenium-standalone --save-dev
安装 Nightwatch:
npm install nightwatch --save-dev
项目配置
一. 配置 Nightwatch
首先,在项目根目录建立文件 "nightwatch.json",这个文件用来存放 Nightwatch 的配置信息
nightwatch.json 的文件名是 不可以 修改的,因为 Nightwatch 每次启动的时候都是从它读取配置喔!这里的配置项很多,不过先不管它,我们接着创建文件。
2. 接着在项目根目录下创建文件 "nightwatch.conf.js" ,同样此文件名也是不可以修改的,因为 Nightwatch 每次启动也会从它这里读取配置喔~ (´・_・`)
3. 再次在项目根目录建立文件 "startup.js",然后在文件内部写入:
require('nightwatch/bin/runner.js')
这个文件就是我们测试的入口文件,以后我们要执行测试就要运行这个文件,命令为 node ./startup。入口文件的名字是可以按照喜好更改的,只要运行它就好啦。不过每次输入 node ./startup 太麻烦了,所以我们将这条命令写入 npm scripts 中 ~~~ 打开 "package.json",在 JSON 对象中建立 "script" 属性,并写入内容:
{
...
"scripts": {
"start": "node ./startup.js"
},
...
}
二. 配置 Selenium
Selenium 是自动化测试环境,它提供了测试服务器、启动浏览器、网页自动操作等功能,同时暴露 API 给 Nightwatch 供我们使用。
1. 建立 Selenium 的配置信息。
在项目根目录下建立文件夹 "build",并在其中创建文件 "selenium-conf.js"
2. 告诉 Nightwatch,我的 Selenium 与 Driver 在哪里。
再次打开项目根目录下的 "nightwatch.conf.js" 文件
创建目录存放测试用例
在项目根目录新建一个名为 "tests" 的目录,然后这里就用来存放我们即将编写的测试用例文件。
那么这个文件夹能不能指向到其他地方去呢?当然可以,不过要修改一个小地方。
您可以在目录中存放多个测试用例文件,且命名随意,Nightwatch 将读取目录中所有的 JS 文件,如果符合测试用例格式,将会自动执行。
>
| -- build| | -- selenium-conf.js # Selenium 版本信息配置。| | -- selenium-setup.js # Selenium 安装命令脚本。| | -- selenium-start.js # Selenium 启动命令脚本。| -- reports #输出测试报告
| -- tests #测试用例| -- nightwatch.conf.js # Nightwatch 动态配置文件。| -- nightwatch.json # Nightwatch 配置文件。| -- package.json # 项目信息配置文件。| -- startup.js # 测试启动入口文件。
基本api
http://nightwatchjs.org/api
client 是代码运行时 Nightwatch 提供的对象,所有对浏览器进行的操作都将使用此对象调取,比如 client.click("CSS Selector")、client.getCookie(function () {...}),我们第一章说过的 "可以简单理解为 Selenium 的控制软件" 就是通过它体现的喔!
Expect是0.7版本的时候引入的一种BDD(行为驱动测试)风格的接口,也是为了执行断言,使用链式的语法,和直接的断言相比,expect读起来更加语义化,就像写句子(但是单词之间用的.连接的)
Assert这部分包含两套有同样方法的方法库:assert和verify,其中,若是当前执行的断言没有成功,assert会停止执行剩余的断言并立即结束,verify会打印错误日志然后继续淡定的执行接下来的断言。
Commands用来在页面上执行一些命令比如点击、关掉当前窗口、清除cookie、获取到某元素的值等。
禁用测试
要阻止某个模块执行测试, 只需要设置 disable 属性为true :
module.exports = {
'@disabled': true, // This will prevent the test module from running.
'sample test': function (client) {
// test code
}
};
禁用单独测试用例
禁用模块中单独的测试用例,目前还不支持。 但是有一个变通方法, 将测试方法转化为字符串,Nightwatch 就会忽略它。
module.exports = {
'sample test': ''+function (client) {
// test code
}
};
当你想要停止测试时注意总是要调用 end() 方法,如此 selenium 会话才会正确的停止。
Nightwatch 为测试提供了 before/after, beforeEach/afterEach 钩子。
before 和 after 钩子会在每个测试套件运行前后执行。beforeEach 和 afterEach 则会在每个测试用例(测试步骤)执行前后执行。
所有钩子函数都接收一个 NightWatch 实例做为参数。
Example:
before(), beforeEach(), “step one”, afterEach(), beforeEach(), “step two”, afterEach(), after()