自动化测试--protractor

前戏

面向模型编程;

测试驱动开发;

先保障交互逻辑,再调整细节。---by 雪狼。

为什么要自动化测试?

1,提高产出质量。

2,减少重构时的痛。反正我最近重构多了,痛苦经历多了。

3,便于新人接手。

angular自动化测试主要分:端到端测试和单元测试,很明显两者都要熟练掌握。

端到端测试是从用户的角度出发,认为整个系统是个黑盒,只会有UI暴露给用户,主要是模仿人工操作测试。

单元测试认为整个系统是白盒,可以用来测试服务,控制器,过滤器还有基础函数等。

端到端测试使用protractor,今天就扯这个。

为什么使用Protractor,也就是说Protractor有什么好处,有没有替代品?

1,不需要基于id,css选择器,xpath等查询元素,你可以基于绑定,模型,迭代器等等进行测试。

2,避免回调地狱。对比下面的代码就知道了。

//没有protractor
driver.getTitle().then(function(title){
    expect(title).toBe(‘Baidu‘);
});

//使用protractor
expect(browser.getTitle()).toEqual(‘Baidu‘);

替代品:capybara-angular等。

正事

前戏做完了,开始办正事吧。

第一步当然是配置Protractor,别人写好了,我就不累赘了,送上传送门:

配置

第二步,掌握最简单的测试(高手可以绕过)

describe(‘hello world‘, function() {
    it(‘标题是hello world‘, function() {
        browser.get(‘测试地址自己搞一个咯‘);
        expect(browser.getTitle()).toEqual(‘hello world‘);
    });
});

说白了就是希望指定的链接的标题是"hello world"

第三步,了解下大体编写流程。

首先我们必须跳转到指定的页面,跳转页面有两种方法。

1,browser.get,跳转到指定的页面,还会重新刷新整个页面。

2,browser.setLocation,更确切的说,是跳转路由,修改#后面部分。

“等待某个元素出现”而不是“等待页面加载完毕”,如果页面加载完毕之后,马上去获取某个元素,很可能改元素不存在,然后直接报错退出。

点击某个按钮之后,弹窗,弹窗有渐进动画,具体弹窗内的元素什么时候出现不确定,那么必须“等待某个元素出现”。怎么实现?

//等待ng-model="password"的出现,最多等待20秒
browser.wait(function(){
    return browser.isElementPresent(by.model("password"));
},20000);

封装页面对象,英文叫PageObject,我也不知道怎么翻译,说白了就是封装组件或者页面的选择器。

为什么要有这一步?

先看一段代码:

describe(‘angularjs homepage‘, function() {
  it(‘should greet the named user‘, function() {
  browser.get(‘http://www.angularjs.org‘);
  element(by.model(‘yourName‘)).sendKeys(‘Julie‘);
  var greeting = element(by.binding(‘yourName‘));
  expect(greeting.getText()).toEqual(‘Hello Julie!‘);
});

describe(‘todo list‘, function() {
  var todoList;
  beforeEach(function() {
  browser.get(‘http://www.angularjs.org‘);
  todoList = element.all(by.repeater(‘todo in todos‘));
});

it(‘should list todos‘, function() {
  expect(todoList.count()).toEqual(2);
  expect(todoList.get(1).getText()).toEqual(‘build an angular app‘);
});

it(‘should add a todo‘, function() {
  var addTodo = element(by.model(‘todoText‘));
  var addButton = element(by.css(‘[value="add"]‘));

  addTodo.sendKeys(‘write a protractor test‘);
  addButton.click();

  expect(todoList.count()).toEqual(3);
  expect(todoList.get(2).getText()).toEqual(‘write a protractor test‘);
});

这是没封装的情况。

1,语义化很差,根本很难看明白在做神马。

2,重复代码多。browser.get(‘http://www.angularjs.org‘);就不止出现了一次。

3,耦合严重。如果标签结构改动,代码很多地方都要改。

4,难以维护,随着项目的增长和时间的推移,没有人会乐意在这上面添加其它测试功能。

问题已经暴露出来了,怎么封装?

封装之前,建议过一遍官方的教程和API接口,常用的不多,难度不大。传送门

举个栗子,很简单的。现在有个滚动条。示意图有点丑,别笑。

封装出来应该如下,这样即使滚动条的代码结构改了什么的,只要改下面的代码,而具体测试逻辑不用动。

function ScrollBarSelector(model){
    Object.defineProperty(this,"target",{
        get:function(){
            return typeof model == "string" ? element(by.model(model)) : model;
        }
    })
    Object.defineProperty(this,"pre",{
        get:function(){
            return this.target.$(".pre");
        }
    })

    Object.defineProperty(this,"next",{
        get:function(){
            return this.target.$(".next");
        }
    })

    Object.defineProperty(this,"scrollButton",{
        get:function(){
            return this.target.$(".scrollButton");
        }
    })
    Object.defineProperty(this,"value",{
        get:function(){
            return this.target.$("input").getAttribute("value");
 } })
}

测试逻辑,基本上就是,

点击某个按钮:scrollBar.next.click()

希望某个输入框的内容为:expect(scrollBar.value).toBe("xx");

最后,还是附上登录的测试和路由跳转,google上面很多人都在问。很多人问的问题是,登录完了,跳转页面,怎么知道页面跳转了。

spec.js

!function(){
    require(".LoginAction.js");
    require(".LogoutAction.js");
    require(".ScrollbarAction.js");

    describe("自动登录",function(){
        new LoginAction().execute("GetLiShu","123456");
    })

    describe(‘testScrollbar‘, function () {
        new ScrollbarAction().execute();
    });

    describe("退出登录",function(){
        new LogoutAction().execute();
    });
}();

LoginAction.js

!function(){

    function LoginAction(){

    }
    var prop = LoginAction.prototype;
    prop.execute = function(userName,password){
        beforeEach(function () {
            //先跳转到登录页面
            browser.get("登录页面");
            //等待输入框出来
            browser.wait(function(){
                return browser.isElementPresent(by.model("username"));
            },20000);
        })

        //输入账号密码然后点击登录
        it(‘自动登录‘, function () {
            element(by.model("username")).sendKeys(userName);
            element(by.model("password")).sendKeys(password);
            element(by.css(".login-input-btn")).click();
        });
    }
    module.exports = LoginAction;
}();

ScrollbarAction.js

!function(){
    beforeEach(function () {
        browser.setLocation("/app/common/stepper");
    })
    it(‘测试滚动条‘, function () {
        var scrollbar = new ScrollbarSelector("vm.scroll");

        //等待滚动条出来,最多等待20秒,滚动条出来了,马上处理测试代码
        browser.wait(function(){
            return browser.isElementPresent(numberDefault.mius);
        },20000);

        //这里省略很多行测试代码
    });
}();

http://www.cnblogs.com/geilishu/p/5801175.html

时间: 2024-10-10 05:55:12

自动化测试--protractor的相关文章

端到端测试,protractor测试的教程

之前我们介绍了如何测试某段js代码的逻辑是否正确,考虑的情况是否全面,但是在ui界面上我们每次做好的功能都要自己去填写内容,点击按钮等,那么是否存在自动化测试的工具呢,让这些事情可以自动完成,答案是肯定的,今天我们就来讲解如何自动测试我们界面上的功能. 1.安装依赖文件 在任意的地方创建新的文件夹,例如test,进入到文件夹里,打开命令行或者gitbash: <1>安装protractor npm install -g protractor <2>安装karma-jasmine n

Protrator自动化测试(针对Angular 应用的自动化测试)

环境准备工作: 1,Protrator 是在NodeJs 环境下运行的,所以第一步是安装NodeJS 2,测试本机是否安装了NodeJs 可以命令行下输入:node -v,将会输出NodeJS 的版本号,在Window下没有什么好的命令行工具,建议安装Git工具,可以在Git Bash下面输入命令行,有点类似Linux的命令行. 3,安装npm,可以通过npm -version 命令检测是否安装了NPM 4,通过NPM安装Protrator:npm install -g protractor 5

在Grunt task中集成Protractor

Protractor是专为AngularJS应用程序编写的UI自动化测试框架.前端构建有很多构建工具,比如Grunt.Gulp等.一般我们会把这些构建工具作为集成集成的脚本执行工具.所以如果把Protractor的执行也集成进去,则可以达到自动验证UI功能的效果. 本文将介绍如何将Protractor命令集成到Grunt task中. 首先需要为Grunt安装一个插件,grunt-protractor-runner.这个插件会帮你在Grunt中运行Protractor. 1 npm instal

最流行的自动化测试工具,总有一款适合你

1)Selenium Selenium 可能是网页应用中最流行的开源自动化测试框架.起源于 2000 年,10 多年来不断地完善,Selenium 成为许多 Web 自动化测试人员的选择,尤其是那些有高级编程和脚本技能的人.Selenium 也成为了其他开源自动化测试工具比如 Katalon Studio,Watir,Protractor 和 Robot Framework 的核心框架. Selenium 支持多系统环境(Windows,Mac,Linux)以及多种浏览器(Chrome,Fire

自动化测试 | 2好用的自动化测试工具Top 10

欲善其事必先利其器,本文从软件测试人员痛点出发,介绍如何先从工具选择上取得优势,在有限的时间内完成工作.经常有人在公众号留言或是后台咨询,做自动化测试用哪个工具好,或是学哪门编程语言好呢? 这个时候总是无奈的说: 你应该学习Python 或是Java 你应该掌握Selenium 又或者你需要学会jmeter,嗯,可能LoadRunner你应该学习 也许SoapUI是个不错的选择,或者你可是试试PostMan ...... 其实这些都不是我真正的答案,我想说:只专注于一种编程语言或一种工具可能限制

2019最佳自动化测试工具(十大评论)

在测试自动化领域,自动化工具肯定占据了中心位置. 本文总结了顶级测试自动化工具和框架,这些工具和框架有助于组织最好地定位自己,以跟上软件测试的发展趋势. 该列表包括开源和商业测试自动化解决方案.1.seleniumSelenium可能是Web应用程序最流行的开源测试自动化框架. Selenium始于二十一世纪,经过十多年的发展,已成为Web自动化测试人员的首选自动化框架,尤其适用于拥有高级编程和脚本编写技能的人员. Selenium已成为其他开源测试自动化工具的核心框架,如Katalon Stu

自动化测试到底是什么

引子 偶然在群里有人问自动化测试到底是啥,搞不懂.qtp对象库好麻烦,jmeter怎么做测试....一堆一堆的问题.其实说实话真心不知道该咋解答了,我的内心是累的~ 突然想到自己的新书里不就解释过这些吗!看来还是很多童鞋对于自动化测试的认知存在巨大的问题啊! so,以下内容选择<小强软件测试疯狂讲义> 重新认识性能测试之后我们再来看看自动化测试到底是什么.其实这个话题我在不同的场合多次谈过,甚至在我创办的"挨踢脱口秀"中也专门做了一次节目来说明,但可惜的是仍然有很多朋友对自

自动化测试框架 selenium api的封装

接上一篇 http://tianxietaotao.blog.51cto.com/12002420/1951701 这篇我大概介绍下我这个工具的简单介绍 先上图: 制作背景: Web自动化测试在现在测试领域已经越来越普遍,但是写代码对于好多测试猿代码基础较弱,搭建系统也比较麻烦.所以我抽闲暇时间做了这个简单的工具:下面简单介绍下功能 工具简单介绍: 1.工具栏:Resume:调试阶段执行到下一个断点 next:单步执行 debug/run 模式切换 执行.停止 2.用例树:用例采用execl或者

Selenium+Java+Eclipse 自动化测试环境搭建

一.下载Java windows java下载链接 https://www.java.com/zh_CN/download/win10.jsp 二.安装Java 安装好后检查一下需不需要配置环境变量,现在java 8已经不用配置环境变量了,直接在命令行输入:java -version 三.下载和安装Eclipse windows Eclipse下载链接 https://www.eclipse.org/downloads/ 你也可以下载绿色版 四.下载selenium,然后解压 selenium