测试笔记 (六) 使用gulp管理测试任务

阅读5159评论13

一, 简介

Gulp: 一个火的都快凉了的自动化构建工具,无需要多说,中文参考网站:http://www.gulpjs.com.cn/

(测试心经系列) 到目前为止,我们用了mocha,karma,istanbul,protractor等各种测试,有点乱,它依赖于一些命令行工具,那现在我们通过gulp及其插件来统一管理测试任务.

npm i -g gulp //全局安装gulp命令行

二, 插件安装

以下是常用的和测试用的插件:

npm i gulp --save-dev
npm i gulp-load-plugins --save    //自动加载插件
npm i gulp-mocha --save-dev       //mocha测试
npm i gulp-istanbul --save-dev    //istanbul
npm i gulp-protractor --save-dev  //protractor
npm i gulp-nodemon --save-dev     //启动server
npm i gulp-sequence --save-dev    //按顺序加载任务

gulp-load-plugins插件可以自动的按需加载插件,不用手动require导入.默认情况下它只能找到名字为"gulp-","gulp."开头的插件,如果不符合这个命名的插件,需要如下配置:

var $ = require('gulp-load-plugins')({
  pattern: ['gulp-*', 'main-bower-files', 'uglify-save-license', 'del','imagemin-pngquant']
});

使用的时候,可以省略名字中的gulp,如果插件名字有多个'-'连接字符,默认情况会转换成驼峰方式,如: $.mocha() , $.istanbul() , $.mainBowerFiles() , $.uglifySaveLicense()

在项目根目录下新建一个gulpfile.js文件,作为gulp任务配置的入口文件.
并配置好我们的测试文件目录,如下:

var gulp = require('gulp');
var path = require('path');
var $ = require('gulp-load-plugins')();

var config = {
	mocha: 'test',    
	istanbul: 'test_coverage'
}

三, gulp任务

1, 添加mocha测试任务

gulp.task('test:mocha',function () {
	gulp.src(path.join(config.mocha, '/**/*.js'),{read: false})
	.pipe($.mocha({
		reporter: 'list',		//list,nyan,spec(default),progress
		require: ['should'],
		timeout: 5000
	}))
	.once('error', function () {
	    process.exit(1);
	})
	.once('end', function () {
	    process.exit();
	});
});

运行gulp test:mocha 进行mocha测试

2, 添加karma测试任务
karma 在gulp中使用不需要单独安装插件,因为karma提供的API在gulp中调用很方便.

var Server = require('karma').Server;

gulp.task('test:karma', function (done) {
  new Server({
  	configFile: path.join(__dirname, '/karma.conf.js'),
    singleRun: true,
    autoWatch: false
  }, done).start();
});

运行gulp test:karma 进行karma测试

3, 添加istanbul测试覆盖率任务 插件地址:https://github.com/SBoudrias/gulp-istanbul

//istanbul
gulp.task('pre-test', function () {
  return gulp.src(path.join(__dirname,'/app.js'))
    .pipe($.istanbul())  
    .pipe($.istanbul.hookRequire()) 
});

gulp.task('test:istanbul',['pre-test'],function () {

		gulp.src(path.join(config.mocha, '/**/*.js'),{read: false})
				.pipe($.mocha({
					require: ['should'],
					timeout: 5000
				}))
				//输出报告
				.pipe($.istanbul.writeReports({
					dir: path.join(config.istanbul,'/')
				}))
				//设置覆盖率门槛,如果不达标,会测试不通过.
				.pipe($.istanbul.enforceThresholds({ thresholds: { 
					global: {						//全局门槛
						statements: 80,
						branches: 80,
						lines: 90,
						functions: 75
					},
					each: 60						//单个文件门槛
				}}))
				.once('error', function () {
				    process.exit(1);
				})
				.once('end', function () {
				    process.exit();
				});

});

4, 添加e2e protractor测试任务 e2e测试需要启动server端,之前我们是手动node app.js来启动server.现在我们用gulp-nodemon来做到自动化.
我们希望先启动server再运行e2e任务,所以我们用gulp-sequence插件做顺序执行任务.

var protractor = require("gulp-protractor").protractor;
var webdriver_update = require('gulp-protractor').webdriver_update;

//e2e test
gulp.task('nodemon',function () {
	$.nodemon({
	  script: path.join(__dirname,'/app.js'), 
	  ext: 'js'
	})
});

gulp.task('webdriver-update', webdriver_update);

gulp.task('test:protractor',function () {
	gulp.src(path.join(config.e2e,'/*.spec.js'))
	  .pipe(protractor({
	  	configFile: path.join(__dirname,'/protractor.conf.js')
	  })).on('error', function (err) {
       process.exit(1);
    }).once('end', function () {
        process.exit();
    });
});
gulp.task('test:e2e',$.sequence('nodemon','webdriver-update','test:protractor'));

运行gulp test:e2e 启动e2e测试.

5, 添加默认任务
istanbul任务实际上也执行了mocha测试,那我们添加一个默认任务,可以同时执行karma,mocha,istanbul测试.

gulp.task('default',$.sequence('test:karma','test:istanbul'));

运行gulp 不需要加参数,就可自动执行以上三种测试.

本次测试样例:下载地址

13条评论添加新评论
JackJack2016.3.3 3:13

美好的一天开始了.

true blue1

true blue@true blue 2

true blue@Jack a

true blue@Jack aa

true blue@Jack sad

KolfKolf2016.3.9 6:6

Off trackOff track2016.3.15 10:26

方法

逆袭&希望@Off track 什么方法呀

晓风残月晓风残月2016.3.21 15:11

ceshi ceshi

VuerVuer2016.3.28 7:25

dfafdaf

Joe。Joe。2016.5.10 4:6

1

Joe。@Joe。 1

反派角色。反派角色。2016.5.14 1:1

1111111

阿文莫斯阿文莫斯2016.7.28 4:31

个梵蒂冈

KiyanKiyan2017.3.21 8:33

hoho

lufeverlufever2018.1.4 9:0

Auth verify

lufeverlufever2018.1.4 9:2

Auth verify 2

kevinkevin2018.1.15 10:4

666

喵酱喵酱2018.6.22 6:32

棒诶