什么是 Nightwatch
Nightwatch 是一个可以为 Web 应用和网站提供自动端对端测试的框架。它由 Node.js 编写而成并且使用 W3C WebDriver API (以前是Selenium WebDriver)与不同的浏览器互动。
Nightwatch 是一个完整的测试解决方案旨在简化编写测试的过程以及设置持续集成和持续部署。Nightwatch 还可以用作为 Node.js 应用编写单元测试和集成测试。
什么是 WebDriver
WebDriver 是用于自动化Web浏览器的通用库。它开始与 Selenium 项目的一部分,Selenium 是一个最全面、最流行的浏览器自动化工具,最初是为了 Java 编写,现在是为了大多数编程语言。
WebDriver 现在是一个 W3C 标准,旨在使浏览器自动化标准化,它提供一个平台并且采用 restful HTTP api 的方式在远程控制浏览器。
Nightwatch 原理
Nightwatch 通过标准化的restful HTTP api 与 WebDriver 沟通,而 WebDriver 通过特定的浏览器驱动例如 ChromeDriver 来与浏览器沟通,WebDriver 扮演一个桥梁的角色。因此,在 Nightwatch 中的测试语句比如css 选择器或者dom 断言才可以在浏览器中执行。
Selenium Server
同时,Nightwatch 也可以使用 Selenium Server 做为与浏览器沟通的桥梁。
安装
在项目中使用
目前我们的项目都是采用 Vue CLI 生成的脚手架工程,可以在脚手架工程生成初期添加插件也可以在工程生成后单独添加。
参考:
独立使用
安装、配置文件、配置在官网有详细说明
参考:
写用例和执行用例
写用例和执行用例在官网有详细说明
参考:
在实际项目中如何使用
目前我们把 e2e 作为 CI / CD 的最后一个环节,所以采用了使用独立工程的方式管理和执行用例。
目录结构
1 | - reports // 储存报告 |
注意事项
因为 Nightwatch 执行用例时需要用到 WebDriver 这个桥梁已经浏览器,所以想要执行用例的环境一定必须具备三个条件
- node 环境用来运行 Nightwatch
- WebDriver 在我们这个工程中也就是对应的 chromedriver
- Chrome
如何使用
编写测试用例
在 tests 路径下的 specs 内存放着真正需要执行的用例
本地执行测试用例
- 执行全部用例
1
npm run test:local
- 执行单个用例
1
nightwatch tests/specs/test.js --option
使用 Command Line 执行单个用例时的 Option 可以参考官方文档
在服务器内执行
为了保证在服务器内执行用例时不会遇到与本地环境不同所造成的各种疑难杂症,这里采用了打包 docker 镜像,然后在容器内执行用例,在容器内执行测试用例的方法与在本地执行一致,需要具有 docker 基础。
Dockerfile
在 Dockerfile 中第一行拉取的 nightwatch:latest 镜像是一个专门制作的环境镜像,操作系统为ubuntu 16,安装有node.js 12.13.0 和 chrome 80.x。