0%

端对端测试框架选择及其简单用法

什么是 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 断言才可以在浏览器中执行。

theory of operation

Selenium Server

同时,Nightwatch 也可以使用 Selenium Server 做为与浏览器沟通的桥梁。

安装

在项目中使用

目前我们的项目都是采用 Vue CLI 生成的脚手架工程,可以在脚手架工程生成初期添加插件也可以在工程生成后单独添加。

参考:

独立使用

安装、配置文件、配置在官网有详细说明

参考:

写用例和执行用例

写用例和执行用例在官网有详细说明

参考:

在实际项目中如何使用

目前我们把 e2e 作为 CI / CD 的最后一个环节,所以采用了使用独立工程的方式管理和执行用例。

项目地址

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- reports              // 储存报告
- specs
- report.html
- tests // 用例
- custom-assertions // 自定义断言
- custom-commands // 自定义命令
- page-objects // page-bojects 结构
- specs // 用例
- .dockerignore // 设置复制文件到 docker 时忽略的文件
- .gitignore
- .npmrc // 制定 npm 源的路径以及 chromedriver 配置
- Dockerfile // 打 docker 镜像时重要的配置文件
- globals.js // 用例执行时的全局设置
- nightwatch.json // nightwatch 配置文件
- package.json

注意事项

因为 Nightwatch 执行用例时需要用到 WebDriver 这个桥梁已经浏览器,所以想要执行用例的环境一定必须具备三个条件

  • node 环境用来运行 Nightwatch
  • WebDriver 在我们这个工程中也就是对应的 chromedriver
  • Chrome

如何使用

  1. 编写测试用例

    在 tests 路径下的 specs 内存放着真正需要执行的用例

  2. 本地执行测试用例

    • 执行全部用例
    1
    npm run test:local
    • 执行单个用例
    1
    nightwatch tests/specs/test.js --option

    使用 Command Line 执行单个用例时的 Option 可以参考官方文档

  3. 在服务器内执行

    为了保证在服务器内执行用例时不会遇到与本地环境不同所造成的各种疑难杂症,这里采用了打包 docker 镜像,然后在容器内执行用例,在容器内执行测试用例的方法与在本地执行一致,需要具有 docker 基础。

Dockerfile

在 Dockerfile 中第一行拉取的 nightwatch:latest 镜像是一个专门制作的环境镜像,操作系统为ubuntu 16,安装有node.js 12.13.0 和 chrome 80.x。