e2e测试之Nightmare
一.e2e测试简介
e2e或者端到端(end-to-end)或者UI测试是一种测试方法,它用来测试一个应用从头到尾的流程是否和设计时候所想的一样。简而言之,它从一个用户的角度出发,认为整个系统都是一个黑箱,只有UI会暴露给用户。
想象一下,如果把这些自动化的测试工作换成人工来做,那会多么的令人头疼,尤其是对于那些具有大量交互的应用,手工测试将会以编程不可能的任务。
下文中,将会介绍如何使用Nightmare来进行自动e2e测试.
二.什么是Nightmare?
Nightmare是来自Segement的高级浏览器自动化库。
它公布了一些方法,例如.goto(),.type()和.click()等,通过一个个API的衔接使用,给人感觉每个模块似乎是同步的。最常用于UI测试和爬取。
三.如何使用Nightmare?
个人觉得,相对如单元测试(之前踩过ezyme的坑)的一些配置,Nightmare用起来确实挺方便。
首先,安装相应的依赖(不要问我依赖是什么,其实我也不知道是什么^_^):
npm install --save-dev mocha
npm install --save-dev nightmare
npm install --save-dev assert
npm install --save-dev chai
在项目根目录下创建test文件夹(一定要是项目根目录),所有的测试用例都需要以'.js'为后缀的格式创建在test文件夹下。
然后,打开根目录下package.json文件,配置测试命令,很简单:
"scripts": {
"test": "mocha"
}
准备工作已经完毕,我们来写几个简单的测试用例:
1.访问某站首页,若成功,显示加载时间,否则抛出error
const Nightmare = require('nightmare')
const assert = require('assert')
describe('Load a Page', function() {
// 设置超时时间
this.timeout('30s')
let nightmare = null
beforeEach(() => {
nightmare = new Nightmare()
})
it('should load locaohos:8000 success', done => {
// 实际开发中访问的url可能是这`http://localhost:port/path`
nightmare.goto('http://localhost:8000/')
.end()
.then(function (result) { done() })
.catch(done)
})
it('should load baidu(/home page) success', done => {
// 访问百度
nightmare.goto('http://www.baidu.com/')
.end()
.then(function (result) { done() })
.catch(done)
})
it('should load without error', done => {
// 访问谷歌根目录,会error(大家懂的)
nightmare.goto('https://www.google.com/')
.end()
.then(function (result) { done() })
.catch(done)
})
it('should load without error', done => {
// 访问谷歌根目录下的webhp页面,会error(大家懂的)
nightmare.goto('https://www.google.com/webhp')
.end()
.then(function (result) { done() })
.catch(done)
})
})

2.模拟用户搜索:
const expect = require('chai').expect;
const Nightmare = require('nightmare');
const assert = require('assert');
describe('simulate search', function () {
this.timeout('30s')
let nightmare = null
beforeEach(() => {
// 设置显示模拟弹框
nightmare = new Nightmare({
show: true,
})
})
it('模拟用户搜索', done => {
nightmare
.goto('https://www.baidu.com/') //设置搜索引擎
.viewport(1200, 672) //设置弹框视口宽高
.type('form[action*="/s"] [name=wd]', 'github nightmare') //获取搜索框,自动填充搜索内容
.click('form[action*="/s"] [type=submit]') //获取点击按钮,模拟点击
.wait(5000) //等待5s(可为dom节点),获取第一条的信息的内容
.evaluate(() =>
document.querySelector('#content_left .c-container a em').innerHTML
)
.end()
.then(content => {
console.log(content === 'Nightmare','----->true') //输出结果
})
.catch(error => {
console.error('Search failed:', error); //输出捕捉到的错误
});
})
})
3. 模拟用户登录
const Nightmare = require('nightmare')
const assert = require('assert')
describe('submit form', function () {
this.timeout('30s')
let nightmare = null
beforeEach(() => {
// 设置显示模拟弹框
nightmare = new Nightmare({
show: true
})
})
it('模拟用户搜索', done => {
nightmare
.goto('登录页url') //设置登录loginUrl
.type('selector', '填入用户名') //通过选择器获取登录名文本框节点,自动模拟用户填写用户名
.type('selector', '填入密码') //通过选择器获取密码文本框节点,自动模拟用户填写密码
.click('selector') //获取点击按钮,模拟点击登录
.wait(5000) //设置5s之后返回结果页面title
.evaluate(() => {
return document.title;
})
.end()
.then(title => {
console.log(title) //输出结果
})
.catch(error => {
console.error('Search failed:', error); //输出捕捉到的错误
});
})
})
e2e测试之Nightmare的更多相关文章
- Nightmare基于phantomjs的自动化测试套件
今天将介绍一款自动化测试套件名叫nightmare,他是一个基于phantomjs的测试框架,一个基于phantomjs之上为测试应用封装的一套high level API.其API以goto, re ...
- E2E测试框架
1. 目前E2E测试工具有哪些? 项目 Web Star puppeteer Chromium (~170Mb Mac, ~282Mb Linux, ~280Mb Win) 41427 nightma ...
- 《Google软件测试之道》基础
<Google软件测试之道>,一直听朋友讲起这本书,出于琐事太多,一直没机会拜读,最近部门架构觉得我们IT部门的技术太low,就给我们挑选了一些书籍,让我们多看看... 个人的一种学习习惯 ...
- HDU 1072 Nightmare
Description Ignatius had a nightmare last night. He found himself in a labyrinth with a time bomb on ...
- google软件测试之道--读后笔记
看完google软件测试之道,以前有认真看过一次,今天又重新看了一遍. 在google,测试人员严格区分为SET和TE.SET前期深度参与项目的开发,推动开发人员的自测,从破坏者的角度寻 ...
- HttpClient接口测试之会话保持
HttpClient接口测试之会话保持 HttpClient4.X自带会话保持功能,使用同一个HttpClient未关闭的连接即可保持登陆会话,如果多个HttpClient想要使用一个登陆会话 ...
- angular 调试 js (分 karms protractor / test e2e unit )
首页订阅 Protractor端到端的AngularJS测试框架教程 2014年01月18日 分类:教程, JavaScript, AngularJS Protractor是一个建立在WebDrive ...
- Android自动化测试之Monkeyrunner学习笔记(一)
Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...
- iOS 单元测试之XCTest详解(一)
iOS 单元测试之XCTest详解(一) http://blog.csdn.net/hello_hwc/article/details/46671053 原创blog,转载请注明出处 blog.csd ...
随机推荐
- javascript 之数据类型
写在前面 国庆整理资料时,发现刚开始入门前端时学习JS 的资料,打算以一个基础入门博客记录下来,有不写不对的多多指教: 先推荐些书籍给需要的童鞋 <JavaScript 高级程序设计.pdf&g ...
- 【转】缓存淘汰算法系列之2——LFU类
原文地址 :http://www.360doc.com/content/13/0805/16/13247663_304916783.shtml 1. LFU类 1.1. LFU 1.1.1. 原理 L ...
- Python装饰器,json,pickle
装饰器 定义:本质是函数,装饰其它函数是为了给其添加新功能: 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1.函数即变量: 2.高阶函数 3.嵌套 ...
- python核心编程一书笔记之第一篇
#!/usr/bin/env python# -*- coding:utf-8 -*- #env 是一个命令用来寻找系统中的python解释器.第二条解释使用utf-8编码 在类unix系统中允许py ...
- 个性化推荐系统(七)--- ABTest ab测试平台
个性化推荐系统.搜索引擎.广告系统,这些系统都需要在线上不断上线,不断优化,优化之后怎么确定是好是坏.这时就需要ABTest来确定,最近想的办法.优化的算法.优化的逻辑数据是正向的,是有意义的,是提升 ...
- setsockopt()和getsockopt()函数参数
setsockopt()函数功能介绍 功能描述: 获取或者设置与某个套接字关联的选项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选项位于的层和选项的名称必须给出.为 ...
- HTML学习笔记 CSS背景样式案例 第六节 (原创) 参考使用表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue实现仿淘宝结账页面
这个demo,是小颖基于之前的 vue2.0在table中实现全选和反选 文章进行更新后的demo,主要功能呢,是仿照淘宝页面的结算购物车商品时自动算出合计价格的页面,具体页面效果请看下面的动图: ...
- java 中 针对数组进行的工具类
1.遍历数组的方法: public static void printfArray(int[] arr) 2. 获取数组中最大值: public static int getMax(int[] ar ...
- bzoj1001(对偶图最短路)
显然是个最大流问题. 边数达到了10^6级别,显然用dinic算法会TLE 对于一个平面图来说,当然用对偶图的最短路来求最小割(最大流) SPFA转移的时候注意判断边界情况 应该要开longlong才 ...