说说ng里的e2e测试

在上一篇文章里有讲到ng的单元测试,今天来说说e2e(端对端)测试.

当我们测试某个模块的单个功能点时,单元测试最适合,不过当面临用户进行多个页面交互的时候产生bug了,单元测试就不行了,这时候就得用e2e来模拟用户操作还原问题现场.当然利用e2e测试也能够测试程序的健壮性,很多单元测试办不到的事情,e2e测试都能够办到.

之前,ng是利用Angular Scenario Runner来运行e2e测试,现在已经换成Protractor来跑e2e了.

Protractor

ProtractorAngularjs里用来测试e2e的框架,它本身是一个npm模块,内部是构建在WebDriverJS之上的,Protractor能够真正让你的测试用例运行在浏览器上,完全模拟用户的真实行为.

下面贴上它的一些资源地址:

Protractor运行原理

Protractor运行e2e测试所依赖的主要有以下几个东西:

  • WebDriver APIs,就是上面提到的WebDriverJs,是由Selenium提供给前端测试用的相关js api
  • Selenium Server,一个后端jar包,用来负责跟浏览器驱动进行通讯用的
  • WebDriver browser drivers,用来显示真实网站内容并与Selenium Server通讯用,这里才是传递真实浏览器操作的地方

整个运行过程如下图

想了解更多关于这几个组件之前交互的可以点击这里

利用ng种子项目来讲解e2e

我们利用ng官方提供的种子项目来讲解一个真实的e2e例子,首先利用下面命令获取种子项目

git clone https://github.com/angular/angular-seed.git

然后运行

npm install

安装相关的所有依赖文件

这里先说下运行e2e测试需要的配置文件,可以看到test/protractor-conf.js这个文件就是用来配置相关功能的,重点说下几个属性

  • specs 代表要运行的测试文件路径,这里写的是e2e/*.js
  • baseUrl 代表测试文件中浏览器间跳转页面的根地址
  • capabilities 代表使用哪个浏览器来运行测试用例,比如使用chrome,可以这样设置

 capabilities: {
    'browserName': 'chrome'
  }
  • framework 代表使用的哪种测试框架,这里使用的是jasmine

想了解更多关于这个配置文件的可以点击这里查看

说完了配置文件,我们再来看看测试用例的写法,先贴上一个官网上的例子

'use strict';

/* https://github.com/angular/protractor/blob/master/docs/getting-started.md */

describe('my app', function() {

  browser.get('index.html');
  it('should automatically redirect to /view1 when location hash/fragment is empty', function() {
    expect(browser.getLocationAbsUrl()).toMatch("/view1");
  });

  describe('view1', function() {

    beforeEach(function() {
      browser.get('index.html#/view1');
    });

    it('should render view1 when user navigates to /view1', function() {
      expect(element.all(by.css('[ng-view] p')).first().getText()).
        toMatch(/partial for view 1/);
    });

  });

  describe('view2', function() {

    beforeEach(function() {
      browser.get('index.html#/view2');
    });

    it('should render view2 when user navigates to /view2', function() {
      expect(element.all(by.css('[ng-view] p')).first().getText()).
        toMatch(/partial for view 2/);
    });

  });
});

首先上面的语法是jasmine框架支持的写法,不了解它的用法的可以点击这里

这里只说下上面例子里关于protractor提供的一些常用方法与属性

  • browser,全局对象,代表当前浏览器的一个实例,常用的get方法用来实现浏览器改变地址
  • element,全局对象,提供像jquery里负责查找文档元素的功能,常于by对象联合使用
  • by, 全局对象,提供一个选择器类型,比如可以通过css,model,bind等特性来查找一个元素

关于elementby的方法可以参考上面的protractor api文档

说了这么多,该跑一跑上面的测试用例了,命令比较简单

npm run update-webdriver

这个负责下载相关的浏览器驱动selenium-server 本地jar包,一般情况下这个都是会失败的,因为这两个资源都在google服务器那,所以可以利用浏览器翻墙单独下载,地址如下:

然后把selenium-server拷到protractor包里的selenium文件夹里去,假如上面的命令超时之后,这里也会出现文件不过是空的,直接替换就可以;还要把chromedriver_2.9.zip解压之后的文件拷到这里

最后运行下面的命令可以看到测试结果了

npm run protractor

想了解更多关于ng种子项目里的命令行,可以点击这里查看

总结

nge2e测试要比单元测试配置要繁琐的多,不过它能做的事情也很多,非常值的你也试一试,有什么问题可以回复到评论里去.

时间: 2024-08-02 07:23:28

说说ng里的e2e测试的相关文章

说说ng里的单元测试

当ng项目越来越大的时候,单元测试就要提上日程了,有的时候团队是以测试先行,有的是先实现功能,后面再测试功能模块,这个各有利弊,今天主要说说利用karma和jasmine来进行ng模块的单元测试. 什么是Karma karma是一个单元测试的运行控制框架,提供以不同环境来运行单元测试,比如chrome,firfox,phantomjs等,测试框架支持jasmine,mocha,qunit,是一个以nodejs为环境的npm模块. 安装测试相关的npm模块建议使用----save-dev参数,因为

计算机视觉-请问谁有跟踪算法里的 biker 测试序列?

问题描述 请问谁有跟踪算法里的 biker 测试序列? 请问谁有跟踪算法里的 biker 测试序列?我找了好久都找不到地方可以下载,急求,如能帮助,不胜感激!yushengjuan@gmail.com

[译]深入理解ng里的scope

原文地址 摘要 在ng里面,一个子作用域通常原型继承它的父作用域,有一个例外的情况就是,当使用指令的时候,利用scope:{}这个属性会创建一个独立的作用域,而且也不会继承父作用域,这种特例一般用在创建可重用的指令情况下.默认情况下指令中是可以直接使用父级作用域的,而且修改指令中的作用域也会同步更新父级作用域的.当在指令中用scope:true来替换scope:{}的话,则会创建一个新的作用域且原型继承父作用域. scope里的原型继承比较容易理解,一般情况下都不需要你去了解它的实现,但是当你在

如何测试 Android Service 里的 Singleton (1)

本文讲的是如何测试 Android Service 里的 Singleton (1), 最近我遇到个大麻烦:如何测试服务里的单例模式?最终我解决了这个问题.而且我觉得整个解决问题的过程是一个绝好的向读者清楚的解释单元测试的机会.限于篇幅,本文是第一篇文章,后面我会再写一篇. 我们的服务 // [PushService.java] public class PushService extends Service { public void onMessageReceived(String id,

karma 测试框架的前世今生

这篇文章主要来自 karma 作者的一篇论文,主要是说 karma 的由来,通过这篇文章,可以了解下 karma 的设计思想,这样大家在做前端单元测试时,也能了然于心. 背景 JavaScript 作为 web 端使用最广泛的编程语言,它是动态语言,缺乏静态类型检查,所以在代码编译期间,很难发现像变量名写错,调用不存在的方法等错误,除非在运行时才能暴露出来,所以非常有必要有一个测试工具来验证你的代码. karma 就是在这样的背景下产生的, 它是一个 runner , 旨在帮助开发者简单而又快速

XHTML:非IE浏览器里对style.height赋值无效的问题

xhtml|浏览器|问题 今天我在做多页面MDI脚本控件(MzMultiPage),在IE等浏览器里都已经测试通过没有任何问题,但是在Mozilla.Firefox.Netscape里测试时问题就来了,我的多页面是在页面里用到了 iframe,这些 iframe 初始的 style.height 都是0,而在加载页面之后,iframe 就会自适应被加载的页面高度,我是通过 iframe.style.height=300 这样撑起 iframe 的高度,这样处理在IE系列浏览器里没有任何问题,但在

从Google开源RE2库学习到的C++测试方案

最近因为科研需求,一直在研究Google的开源RE2库(正则表达式识别库),库源码体积庞大,用C++写的,对于我这个以前专供Java的人来说真的是一件很痛苦的事,每天只能啃一点点.今天研究了下里面用到的测试方法,感觉挺好的,拿来跟大家分享下!(哈~C++大牛勿喷) 对于我这个C++菜鸟中的菜鸟而言,平时写几个函数想要测试一般都是在main中一个一个的测试,因为没用C++写过项目,没有N多方法所以在main中一个个测试也不费劲.但是对于一个项目而言,或多或少都有N多方法,如果在main中一个个测试

最受欢迎的5款Node.js端到端测试框架

笔者在本文中会结合自身实践和 GitHub 趋势对比最受欢迎的 Node.js E2E 测试解决方案,期望对大家的技术选型有帮助 测试,尤其是自动化测试在现代 WEB 工程中有着非常重要的角色,与交付过程集成良好的自动化测试流程可以在新版发布时帮你快速回归产品功能,也可以充当产品文档.测试因粒度不同又可以分为单元测试.接口测试.功能测试.在 WEB 领域,功能测试亦称为端到端测试(End to End Test,简称 E2E 测试),笔者在本文中会结合自身实践和 GitHub 趋势对比最受欢迎的

《Google软件测试之道》—第2章2.2节测试认证

本节书摘来自异步社区<Google软件测试之道>一书中的第2章2.2节测试认证,作者[美]James Whittaker , Jason Arbon , Jeff Carollo,更多章节 2.2 测试认证 Patrick Copeland在本书的序中强调了让开发人员参与测试的难度.招聘到技术能力强的测试人员只是刚刚开始的第一步,我们依然需要开发人员参与进来一起做测试.其中我们使用的一个 关键方法就是被称为"测试认证"(译注:Test Certified)的计划.现在回过头