一.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的更多相关文章

  1. Nightmare基于phantomjs的自动化测试套件

    今天将介绍一款自动化测试套件名叫nightmare,他是一个基于phantomjs的测试框架,一个基于phantomjs之上为测试应用封装的一套high level API.其API以goto, re ...

  2. E2E测试框架

    1. 目前E2E测试工具有哪些? 项目 Web Star puppeteer Chromium (~170Mb Mac, ~282Mb Linux, ~280Mb Win) 41427 nightma ...

  3. 《Google软件测试之道》基础

    <Google软件测试之道>,一直听朋友讲起这本书,出于琐事太多,一直没机会拜读,最近部门架构觉得我们IT部门的技术太low,就给我们挑选了一些书籍,让我们多看看... 个人的一种学习习惯 ...

  4. HDU 1072 Nightmare

    Description Ignatius had a nightmare last night. He found himself in a labyrinth with a time bomb on ...

  5. google软件测试之道--读后笔记

         看完google软件测试之道,以前有认真看过一次,今天又重新看了一遍.   在google,测试人员严格区分为SET和TE.SET前期深度参与项目的开发,推动开发人员的自测,从破坏者的角度寻 ...

  6. HttpClient接口测试之会话保持

    HttpClient接口测试之会话保持     HttpClient4.X自带会话保持功能,使用同一个HttpClient未关闭的连接即可保持登陆会话,如果多个HttpClient想要使用一个登陆会话 ...

  7. angular 调试 js (分 karms protractor / test e2e unit )

    首页订阅 Protractor端到端的AngularJS测试框架教程 2014年01月18日 分类:教程, JavaScript, AngularJS Protractor是一个建立在WebDrive ...

  8. Android自动化测试之Monkeyrunner学习笔记(一)

    Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...

  9. iOS 单元测试之XCTest详解(一)

    iOS 单元测试之XCTest详解(一) http://blog.csdn.net/hello_hwc/article/details/46671053 原创blog,转载请注明出处 blog.csd ...

随机推荐

  1. 测试中出现ERROR StatusLogger No log4j2 configuration file

    概述 在hibernate框架搭建完成用log4j2进行测试时,总是出现ERROR StatusLogger No log4j2 configuration file found. Using def ...

  2. 怎样在Win10下安装ubuntu双系统

    Win10系统下安装ubuntu系统 安装前准备: 概念 在动手之前,一定要先了解双系统.系统引导.分区这3个概念,这样才能理解安装步骤,应对安装过程中的意外情况. 双系统 双系统就是开机之后,会有一 ...

  3. 读书笔记-你不知道的JS中-函数生成器

    这个坑比较深 可能写完我也看不懂(逃 ES6提供了一个新的函数特性,名字叫Generator,一开始看到,第一反应是函数指针?然而并不是,只是一个新的语法. 入门 简单来说,用法如下: functio ...

  4. 操作系统--进程管理1--单个CPU情况

    1.进程概念 进程:一个正在执行的程序:操作系统提出进程概念目的:是为了跟踪程序在执行期间的状态.而程序只是一段代码,是一个静态的概念 无法准确描述程序执行时候发生的一切.程序代码被加载进内存后就以进 ...

  5. java语言将任意一个十进制数数字转换为二进制形式,并输出转换后的结果

    package com.llh.demo; import java.util.Scanner; /** * * @author llh * */ public class Test { /* * 将任 ...

  6. Treats for the Cows

     Treats for the Cows Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64 ...

  7. 颜色框架Hue相关使用方法

    Hue地址 cocoapods安装Hue pod "Hue" 导入框架 import Hue 将十六进制数字变成对应的颜色值 let color = UIColor.init(he ...

  8. Hive安装和部署

    在root的用户下搭建的 构建hive之前必须要先搭建好hadoop才可以. hive定义了一种类似SQL查询语言--HQL 类似SQL ,但是不完全相同 Hive是一个数据仓库,它部署在Hadoop ...

  9. Struts2知识整理

    准备找工作了.好忐忑!!! 整理整理知识,好好准备. 其实现在Struts2好像不是特别流行,不过还是有用武之地的. struts2简介 struts2是基于mvc开发模型的框架,属于表现层框架 核心 ...

  10. Pandas常用函数入门

    一.Pandas Python Data Analysis Library或Pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的.Pandas纳入了大量库和一些标准的数据模型, ...