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命令如下:

npm install angular -D
npm install angular-mocks -D
npm install grunt-contrib-clean -D
npm install grunt-contrib-copy -D
npm install grunt-protractor-coverage -D
npm install http-server -D
npm install protractor-jasmine2-html-reporter -D

"scripts": {
    "start": "http-server -a localhost -p 8000 -c-1",
}

在下载完grunt-protractor-coverage 之后,

2.1  在项目目录node_modules\grunt-protractor-coverage下执行npm install 下载依赖的modules, 否则在执行测试时候会报找不到protractor modules的错误

2.2  在项目目录node_modules\grunt-protractor-coverage\node_modules\.bin\ 下执行webdriver-manager update命令下载seleniu server jar和chrome driver, 否则在执行测试时候会报找不到server jar的错误, 如果无法下载,试试添加代理的方式,如下

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

2.3 由于grunt-protractor-coverage已经有好久没更新了,目前自带支持的protractor是3.0.0版本,内置的chromedriver版本是2.21, 如果需要支持最新的chrome,需要更改下node_modules\grunt-protractor-coverage\node_modules\protractor 目录下的config.json文件,目前最新版的chromedriver为2.30, 更改完之后在执行webdriver-manager update 命令更新chromedriver.

--注:由于自带的selenium server jar为2.52.0 ,对新版的firefox支持有问题,但是更改server jar到最新又会引入新的问题,因为protractor 3.0.0版本自带的selenium-webdriver在支持新版的server server jar有问题,所以预想是能否直接更改grunt-protractor-coverage所依赖的protractor为最新版(待实验)

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/instrumented/html/index.html‘);
    });

    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‘);
    });
    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(‘1‘);
    });
});

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

根目录下新建protractor.conf.js,  添加protractor-jasmine2-html-reporter 是为了E2E测试产生一个HTML的报告

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

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.
    },

    defaultTimeoutInterval: 30000,

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

最重要的就是Gruntfile.js文件了,在根目录创建,如下:

注意点: copy节点只需要拷贝项目本身不需要被注入的文件如:html/css/...文件,依赖的JS库文件等,在这里只需要拷贝html目录文件,依赖的angularjs和angularjs mock文件。

instrument节点需要配置要注入的文件,就是被测试js文件,注入拷贝到basePath目录。

protractor_coverage 节点配置覆盖率信息文件存放的位置coverageDir,以及执行E2E 的配置文件configFile。

makeReport 节点配置覆盖率信息文件的来源位置src,以及产生html 包括的存放位置dir

module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON(‘package.json‘),

    clean: {
      options: {
        force: true
      },
      tests: [‘instrumented‘],
    },

    copy: {
      instrument: {
        files: [{
          src: [‘html/**/*‘,‘node_modules/angular/angular.min.js‘,‘node_modules/angular-mocks/angular-mocks.js‘],
          dest: ‘instrumented/‘
        }]
      },
    },

    connect: {
      options: {
        port: 9000,
        hostname: ‘localhost‘
      },
      runtime: {
        options: {
          base: ‘instrumented‘
        }
      }
    },
    instrument: {
      files: [‘js/**/*.js‘],
      options: {
        lazy: true,
        basePath: "instrumented"
      }
    },
    protractor_coverage: {
      options: {
        keepAlive: true,
        noColor: false,
        coverageDir: ‘instrumented/coverage‘,
        args: {
          baseUrl: ‘http://localhost:8000‘
        }
      },
      local: {
        options: {
          configFile: ‘protractor.conf.js‘
        }
      }
    },
    makeReport: {
      src: ‘instrumented/coverage/*.json‘,
      options: {
        type: ‘lcov‘,
        dir: ‘instrumented/coverage‘,
        print: ‘detail‘
      }
    }

  });

  grunt.loadNpmTasks(‘grunt-protractor-coverage‘);
  grunt.loadNpmTasks(‘grunt-contrib-connect‘);
  grunt.loadNpmTasks(‘grunt-contrib-clean‘);
  grunt.loadNpmTasks(‘grunt-contrib-copy‘);
  grunt.loadNpmTasks(‘grunt-istanbul‘);

  grunt.registerTask(‘e2eCoverage‘, ‘run e2e coverage report‘, [‘clean‘, ‘copy‘, ‘instrument‘, ‘connect:runtime‘, ‘protractor_coverage:local‘, ‘makeReport‘]);

};

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

e2eDemo
|- e2eReport //用来存放报告
|- e2etest
    |- index-e2eTest.js
|- html
    |- index.html
|- instrumented //用来存放被注入之后的项目代码
|- js
    |- index.js
|- node_modules
Gurntfile.js
package.json
protractor.conf.js

最后的成果如图:

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

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

注: 如何坚持Js文件是否被注入成功,查看js文件源代码会发现多了很多奇怪的字符如__cov_Kbve4U4Ylx8FHTZHdgWwXA就表示被注入成功了。

时间: 2024-08-24 13:12:47

Angularjs E2E test Report/CoverageReport的相关文章

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:/

使用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 安装

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 不仅提

AngularJs学习笔记--E2E Testing

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

[AngularJS]项目框架搭建-MyFirst Skeleton

前文有提到过 做一个简单的订餐系统,最近花了点时间,了解了一下AngularJS框架的使用.因此本文的目的根据了解的知识重新搭建基于 AngularJS框架. 该框架是基于对于AngularJS的学习而制定的,这其中肯定有很多不足,在以后的学习中在加以改进. 一.系统准备 安装Node.js version>=0.10.0版本 Git  Shell 并添加该 Shell脚本到Path环境变量中  Path=:,"$git_home/bin"   二.手动搭建框架 2.1 创建开发

AngularJS向指令传递数据

我今天要实现的功能是利用AngularJS来完成客户端过滤器. list.html页面主要代码如下: ...... <div class='tj_con_tr_ipt' ng-init="reportKey = ''">   <input type='text' class='tj_con_tr_ipts' placeholder='请输入资料名称关键字' ng-model="reportKey"/> </div> ......

使用Visual Studio Code开发AngularJS应用

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:VSC发布之后,尤其最近刚刚更新到0.3之后,社区出现了很多介绍VSC使用的好文章.比如今天分享的这篇介绍AngularJS开发的文章. 今天分享的这篇文章以AngularJS的官方练习(Phonecat)作为基础,来逐步讲解如何使用Visual Studio Code来开发AngularJS应用. 1,首先需要用Git克隆Phonecat的代码库 2,启动VSC,打开angular-phon