Angularjs E2E test Report/CoverageReport - 使用Gulp

上一篇(http://www.cnblogs.com/xiaoningz/p/7122633.html)使用grunt-protractor-coverage 做为覆盖率测试插件,如果项目的管理工具刚好是grunt,那就完美了,不过有些项目是使用gulp做管理工具,那维护两套管理工具就有点资源浪费了,刚好gulp也有配套protractor的e2e测试覆盖插件,这篇文章就是如何使用gulp配套的插件做protractor e2e 覆盖率报告。

环境前提:

1. nodejs 安装(https://nodejs.org/en/download/)

步骤:

1. npm init 创建一个nodejs工程。

2. 使用以下npm install 命令 下载node modules,

npm install angular -D
npm install angular-mocks -D
npm install gulp -D
npm install gulp-clean -D
npm install gulp-istanbul -D
npm install istanbul - D
npm install http-server -D
npm install protractor-istanbul-plugin -D
npm install protractor-jasmine2-html-reporter -D

然后在package.json的scripts节点添加命令如下:

"scripts": {
    "start": "http-server -a localhost -p 8000 -c-1",
    "test": "gulp clean && gulp instrument && protractor protractor.conf.js",
    "report": "istanbul report --include e2eReport/*.json --dir e2eReport/coverage html"
  },

start:  为了在当前项目目录启动一个http服务,这样在测试时候就可以直接通过url访问。

test:

  gulp clean:  执行gulp的clean task,  具体行为请看下面的glupfile.js配置, 主要是清空instrument和report目录。

  gulp instrument: 执行gulp的instrument task, 具体行为请看下面的gulpfile.js配置,主要作用就是拷贝非注入的必要文件,和注入拷贝被测试的js文件。

  protractor protractor.conf.js: 执行protractor e2e 测试。

report:  执行istanbul report命令,将*.json 覆盖率信息文件转化为html 报告。

2.1 同前一篇一样,使用protractor一样需要更新jar和driver, 在项目目录node_modules\protractor\node_modules\.bin\ 下执行webdriver-manager update命令下载seleniu server jar和chrome driver, 否则在执行测试时候会报找不到server jar的错误, 如果无法下载,试试添加代理的方式,如下:

webdriver-manager update --ignore_ssl --proxy http://username:[email protected]:port

因为下载的protractor是最新版,所以通常通过以上命令下载的selenium server和driver也会是最新版,如果不确定,到node_modules\protractor\node_modules\webdriver-manager\selenium目录下查看下载的版本,如果不符合你的需求,可以更改webdriver-manager目录下的config.json文件为指定版本,然后在更新一遍。

3.  创建一个以Angularjs为框架的demo做为测试的站点,只是为了测试用,不用太复杂。 跟前一片文章相同,

新建js/index.js

var angular = window.angular

var app = angular.module(‘app‘, []);
app.controller(‘indexCtrl‘, function($scope) {
        $scope.add = function (a, b) {
            if(a&&b) {
                return Number(a) + Number(b)
            }
            return 0;
        },
        $scope.minus = function(c, d) {
            if(c&&d) {
                return Number(c) - Number(d)
            }
            return 0;
        }
});

新建html/index.html

<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
    <meta charset="UTF-8">
    <title>index</title>

</head>
<body>
<div ng-controller="indexCtrl">
    <div>
        <input type="text" ng-model="a" value="0">
    +
    <input type="text" ng-model="b" value="0">
    =<span id=‘result‘>{{add(a,b)}}</span>
    </div>
    <div>
        <input type="text" ng-model="c" value="0">
    -
    <input type="text" ng-model="d" value="0">
    =<span id=‘result1‘>{{minus(c,d)}}</span>
    </div>
</div>
</body>
</html>
<script src="../node_modules/angular/angular.min.js"></script>
<script src="../node_modules/angular-mocks/angular-mocks.js"></script>
<script src="../js/index.js"></script>

新建E2E测试代码 e2etest/index-e2eTest.js. 注意,测试所填写的网站路径必须是使用被注入的JS的项目路径,否则获取的覆盖率报告就是空。

describe(‘index.html‘, function() {

    beforeEach(function() {
        browser.get(‘http://localhost:8000/istanbulCode/html/index.html‘);
    });
    it(‘test minus‘, function() {

        var a = element(by.model(‘c‘));
        var b = element(by.model(‘d‘));
        a.sendKeys(4);
        b.sendKeys(2);
        var result = element(by.id(‘result1‘));
        expect(result.getText()).toEqual(‘2‘);
    });
    it(‘test add‘, function() {

        var a = element(by.model(‘a‘));
        var b = element(by.model(‘b‘));
        a.sendKeys(1);
        b.sendKeys(2);
        var result = element(by.id(‘result‘));
        expect(result.getText()).toEqual(‘3‘);
    });

});

4. 配置protractor配置文件和gulp配置文件,如下:

根目录下新建protractor.conf.js,  添加protractor-jasmine2-html-reporter 是为了E2E测试产生一个HTML的报告,添加plugins节点,使用protractor-istanbul-plugin 插件将e2e测试的覆盖率信息生成json文件到e2eReport目录下:

var Jasmine2HtmlReporter = require(‘protractor-jasmine2-html-reporter‘);
var istanbulPlugin = require(‘protractor-istanbul-plugin‘);

exports.config = {

  allScriptsTimeout: 11000,

  baseUrl: ‘http://localhost:8000/html/‘,

  // Capabilities to be passed to the webdriver instance.
  capabilities: {
    ‘browserName‘: ‘chrome‘
  },

  framework: ‘jasmine‘,
  // Spec patterns are relative to the configuration file location passed
  // to protractor (in this example conf.js).
  // They may include glob patterns.
  specs: [‘e2etest/*.js‘],

  // Options to be passed to Jasmine-node.
  jasmineNodeOpts: {
    showColors: true // Use colors in the command line report.
  },

  plugins: [{
    inline: istanbulPlugin,
    outputPath: ‘e2eReport/‘
  }],

  defaultTimeoutInterval: 30000,

  onPrepare: function() {
    jasmine.getEnv().addReporter(
      new Jasmine2HtmlReporter({
        savePath: ‘e2eReport/e2e‘,
        screenshotsFolder: ‘images‘,
        takeScreenshots: false
      })
    );
  }
};

在根目录下创建gulpfile.js文件,如下:

clean task: 清空istanbulCode和e2eReport目录下的文件,为了后续注入和生成report腾出空间,

instrument task:拷贝非注入的必要文件,和注入拷贝被测试的js文件。注意这边注入要使用istanbul({coverageVariable: ‘__coverage__‘})  方法,为了设置覆盖率变量名以备后面report使用。

var istanbul = require(‘gulp-istanbul‘);
var gulp = require(‘gulp‘);
var clean = require(‘gulp-clean‘);

gulp.task(‘clean‘, function() {
  gulp.src(‘istanbulCode/*‘, {
      read: false
    })
    .pipe(clean());
  gulp.src(‘e2eReport/*‘, {
      read: false
    })
    .pipe(clean());
});

gulp.task(‘instrument‘, function() {
  gulp.src(‘html/*‘)
    .pipe(gulp.dest(‘istanbulCode/html‘));
  gulp.src(‘node_modules/angular/angular.min.js‘)
    .pipe(gulp.dest(‘istanbulCode/node_modules/angular/‘));
  gulp.src(‘node_modules/angular-mocks/angular-mocks.js‘)
    .pipe(gulp.dest(‘istanbulCode/node_modules/angular-mocks/‘));
  gulp.src(‘js/*.js‘)
    .pipe(istanbul({
      coverageVariable: ‘__coverage__‘
    }))
    .pipe(gulp.dest(‘istanbulCode/js‘))
});

gulp.task(‘test‘, function() {
  console.log(‘test‘)
});

以上配置全部完成, 整体的目录结构如下:

e2eDemo
|- e2eReport
	|- coverage //存放覆盖率报告
	|- e2e	//存放e2e测试报告
	*.json //覆盖率信息的json文件
|- e2etest
    |- index-e2eTest.js
|- html
    |- index.html
|- istanbulCode //用来存放被注入之后的项目代码
|- js
    |- index.js
|- node_modules
gulpfile.js
package.json
protractor.conf.js

执行以下命令就可以获得结果报告了:

npm test
npm run report

最后的成果如图:

\e2eDemo\e2eReport\coverage\lcov-report 目录下有index.html报告: 可以修改index-e2eTest.js来查看是否覆盖率不足的情况是什么样的。

E2E本身的测试报告在\e2eDemo\e2eReport\e2e, 如下:这里故意在测试脚本中fail来看的测试报告

时间: 2024-10-13 04:57:08

Angularjs E2E test Report/CoverageReport - 使用Gulp的相关文章

Angularjs E2E test Report/CoverageReport

前端Angularjs是一个很热门的框架,这篇是学习基于Angularjs的nodejs平台的E2E测试报告和E2E JS覆盖率报告.用到的都是现有的工具,只是一些配置的地方需要注意. 环境前提: 1. nodejs 安装(https://nodejs.org/en/download/) 步骤: 1. npm init 创建一个nodejs工程. 2. 使用以下npm install 命令 下载node modules, 然后在package.json的scripts节点添加start命令如下:

使用Protractor进行AngularJS e2e测试案例

环境: [email protected]:karma-t01$ protractor --version Version 3.0.0 [email protected]:karma-t01$ node -v v4.2.2 [email protected]:karma-t01$ [email protected]:karma-t01$ webdriver-manager update [email protected]:karma-t01$ webdriver-manager start 安装

前端工程筹建NodeJs+gulp+bower

1.安装nodejs nodejs 官网下载安装文件 安装完成之后,在命令窗口执行,(显示nodejs版本) 和(显示npm版本)可以使用这两个命令查看是否安装成功: node -v npm -v 2.npm 简介 nodejs 安装过程中会自动安装npm,npm  是nodejs的程序包管理工具,用于从网上下载程序包并安装还可以管理工程对程序包的依赖,类似于java平台上的maven. 程序包是指实现了某些功能,并可以运行于nodejs平台,一般是开源程序,如压缩js代码程序,检查js代码正确

微软程序员最好的时代来了

微软程序员最好的时代来了 每过一段时间就有人跳出来说微软不行了,.NET不行了,然后就去舔Java, 但是一直让我觉得比较奇怪的是,几年以后那些人还在用.NET,而且继续喷着.NET, 舔着JAVA, 在我看来,这些人和那些天天喷自己的公司,却依然在那个公司,天天喷中国,却依然在中国的那些人是一样的. 语言只是工具 因为我不是非常熟习JAVA, 所以我不知道JAVA擅长做什么,但是我觉得.NET能做的事,基本上JAVA应该都能做,就像我认为JAVA能做的事.NET基本也都能做一样.但是奇怪的是我

The problem with Angular

In the last six months or so I talked to several prospective clients that had a problem finding front-end consultants in order to help their dev teams get a grip on their Angular projects. Although there are front-enders that are enthusiastic about A

MEANJS DOC

Overview Thank you for downloading the MEAN.JS boilerplate! This simple documentation will cover the basics of developing your MEAN application. Before you begin we recommend you read about the basic building blocks that assemble a MEAN.JS applicatio

持续集成之代码质量管理 Sonar(五)

一.Sonar 介绍 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar可以集成不同的测试工具,代码分析工具,以及持续集成工具.与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理. 在对其他工具的支持方面,Sonar 不仅提

使用gulp压缩并合并AngularJS代码

我们的移动web项目使用gulp作为自动化部署工具,由于移动设备4G流量费比较贵,一般我们做移动Web App项目正式发布时都需要把js代码进行压缩以便节省流量.包括使用的第三方js框架,正式发布时也应该使用压缩后的版本.对于自己写的js代码,因为现在是模块化开发,js文件比较多,需要先合并成一个文件后,去除log,进行压缩,基于gulp的管道式命令,实现这些还是很容易的.部分代码如下: var gulp = require('gulp'); var gutil = require('gulp-

AngularJs学习笔记--E2E Testing

原版地址:http://docs.angularjs.org/guide/dev_guide.e2e-testing 当一个应用的复杂度.大小在增加时,使得依靠人工去测试新特性的可靠性.抓Bug和回归测试是不切实际的. 为了解决这个问题,我们建立了Angular Scenario Runner,模仿用户的操作,帮助我们去验证angular应用的健壮性. 一.   总括 我们可以在javascript中写情景测试(scenario test),描述我们的应用发生的行为,在某个状态下给与某些互动.一