前言(废话)

行文前,安利下文章:《图形界面操作系统发展史——计算机界面发展历史回顾》、《再谈MV*(MVVM MVP MVC)模式的设计原理—封装与解耦

1973年4月,Xerox PARC (施乐公司帕洛阿尔托研究中心)研发出了第一台使用Alto操作系统的个人电脑,其中Alto是第一个把计算机所有元素结合到一起的图形界面操作系统。Xerox PARC还开发了一种名为Smalltalk的程序语言和环境,它拥有自己的GUI环境(包括了弹出菜单、视窗、图标)。

《乔布斯传》里,Jobs就是看到施乐开发中的实验性GUI以后,回去马上开始搞,还从施乐挖了一波人。然后微软有在苹果公开的东西上面模仿。接着就是一部波澜壮阔的GUI发展史。

从CS架构到BS架构。互联网发展如火如荼,推荐看下《浏览器史话中chrome霸主地位的奠定与国产浏览器的割据混战》,本人13年从Java入坑H5,但是前端的UI测试,除了前端工程师的 mocha karma jasmine 门后,就是给测试人员点点的感觉。前端UI如何自动化测试呢?

什么是自动化测试

自动化测试:把人为驱动的测试转化为机器执行的一种过程,重点在于持续集成这个概念;

selenium 官网给出的测试类型有:

Types of testing

测试分类,我的印象是:单元测试(Unit Testing)、集成测试(Integration Testing)、端到端测试(E2E Testing)

    • Acceptance testing:验收测试、接收测试。测试产品功能是否完全。这个一般让产品把关。

    • Functional testing:功能测试,测试功能是否可用。

    • Regression testing:回归测试,是指修改了旧代码或加入新功能,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误

    • Performance testing:性能测试,测试程序是否稳定可靠

      • load testing:负载测试,不限制软件的运行资源,测试软件的数据吞吐量上限,以发现设计上的错误或验证系统的负载能力。负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征。例如,响应时间、事务处理速率和其他与时间相关的方面。负载测试是测试的一个方法,通过不断调试并发数获取性能瓶颈。比如80个并发,这个叫80用户负载测试。通过80—>180这样的并发数变化过程,就叫做性能测试。也就是说,性能测试是通过不同的负载测试来实现的。

      • Stress testing:压力测试/强度测试,压力测试是对系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。压力测试是个高压力下的性能测试。

负载测试与压力测试的区别:压力测试,就是高负载的情况下进行的,目的不是为了获取性能指标,而是想要了解系统是否稳定。这时候服务器的指标一般不超过90%。压力测试通过长时间的运行较性能测试更能容易发现内存泄露的问题。负载测试是个方法,性能测试是一个过程。

自动化测试分层

单元自动化测试(数据处理层):

单元测试(unit testing):是指对软件中的最小可测试单元进行检查和验证。

单元的含义:单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。

单元自动化测试一般需要借助单元测试框架,如java的Junit、TestNG,python的unittest,常见的手段是code review等;

前端单元测试框架:

  • Jasmine: 自带断言(assert),mock功能

  • Mocha: 框架不带断言和mock功能,需要结合其他工具,像chai。由tj大神开发

  • Jest: 由Facebook出品的测试框架,在Jasmine测试框架上演变开发而来,集成了 Mocha,chai,jsdom,sinon等功能。

前端断言库

断言库提供了很多语义化的方法来对值做各种各样的判断。

  • chai: 目前比较流行的断言库,支持 TDD(assert),BDD(expect、should)两种风格

  • should.js:也是tj大神所写

前端集成管理工具

  • karma:负责自动化执行测试脚本,批量处理脚本,统计测试。Google Angular 团队写的,功能很强大,有很多插件。可以连接真实的浏览器跑测试用例。能够用一些测试覆盖率统计的工具统计一下覆盖率;或是能够加入持续集成,提交代码后自动跑测试用例。

接口自动化测试(业务逻辑层):

接口测试:接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主要分为功能测试,性能测试,稳定性测试,安全性测试等。

主要检查验证模块间的调用返回以及不同系统、服务间的数据交换,常见的接口测试工具有postman、jmeter、loadrunner等;

这里我是强烈推荐Rap,一款开源免费的接口自动化、MOCK数据自动生成、自动化测试,企业级Web接口管理工具(阿里妈妈MUX团队出品)。RAP通过GUI工具帮助WEB工程师更高效的管理接口文档,同时通过分析接口结构自动生成Mock数据、校验真实接口的正确性,使接口文档成为开发流程中的强依赖。有了结构化的API数据,可避免更多重复劳动。

安利下自己的文章:《前后端分离API设计指南

接口自动化测试收益大:因为容易实现,维护成本低,有着更高的投入产出比,是每个公司开展自动化测试的首选。

UI自动化测试(GUI界面层):

UI层是用户使用产品的入口,所有功能通过这一层提供给用户,测试工作大多集中在这一层,常见的测试工具有UFT、Robot Framework、Selenium、Appium等;

什么样的项目适合自动化测试

性价比:按照测试金字塔模型以及投入/产出比,越向下,回报率越高;

Google的自动化分层投入占比:

  • 小测试(Unit):占比70%;

  • 中测试(Service):占比20%;

  • 大测试(UI):占比10%;

自动化测试面临的挑战:面临的最大挑战就是变化,因为变化会导致测试用例运行失败,所以需要对自动化脚本不断debug,如何控制成本、降低成本是对自动化测试工具以及人员能力的挑战。

像那种做短平快而收钱的项目,自动化测试完全是扯蛋。

功能测试为什么要做自动化?

  • 功能测试存在大量的回归测试、大数据量测试。

  • 自动化测试更高效、更严格。

功能自动化测试的条件:

  • 需求相对稳定

  • 冒烟测试通过

  • 测试周期长

PC端常用的功能自动化测试工具

  • Selenium:开源工具集,用于回归功能测试或者系统用例说明,也可浏览器的兼容性。支持JavaScript、java、C等主流语言

  • Monkey:安装自带的UI测试工具,主要用来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。monkey命令

  • Loadrunner:商业性能测试工具,收费,功能强大,适合做复杂场景的性能测试。java编写测试用例

  • QTP(=》UFT):商业收费软件,支持web,桌面自动化测试。主要是用于回归测试和测试同一软件的新版本,支持VBScript

  • WinRunner

  • QARun

  • Robot

下篇介绍selenium:web自动化测试(2):选择selenium优势?与PhantomJS/QTP/Monkey对比

同行相关文章推荐:

前端自动化测试 https://blog.csdn.net/webyouxuan/article/details/100668081

大前端的自动化工厂(5)—— 基于Karma+Mocha+Chai的单元测试和接口测试 https://blog.51cto.com/13869008/2175983

转载本站文章《web自动化测试(1):再谈UI发展史与UI、功能自动化测试》,
请注明出处:https://www.zhoulujun.cn/html/Operation/test/2017_0517_8310.html

web自动化测试(1):再谈UI发展史与UI、功能自动化测试的更多相关文章

  1. 如何使用Coded UI Test对Webpage进行自动化测试

    在Visual Studio中,Coded UI Test已经不是什么新特性了,较早版本的Visual Studio中就已经有这个东东了.它主要用来帮助自动化测试工程师和开发人员确保程序在UI方面没有 ...

  2. Coded UI Test对Webpage进行自动化测试

    如何使用Coded UI Test对Webpage进行自动化测试   在Visual Studio中,Coded UI Test已经不是什么新特性了,较早版本的Visual Studio中就已经有这个 ...

  3. 再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结

    这篇是对angularJS的一些疑点回顾,是对目前angularJS开发的各种常见问题的整理汇总.如果对文中的题目全部了然于胸,觉得对整个angular框架应该掌握的七七八八了.希望志同道合的通知补充 ...

  4. 再谈DOMContentLoaded与渲染阻塞—分析html页面事件与资源加载

    浏览器的多线程中,有的线程负责加载资源,有的线程负责执行脚本,有的线程负责渲染界面,有的线程负责轮询.监听用户事件. 这些线程,根据浏览器自身特点以及web标准等等,有的会被浏览器特意的阻塞.两个很明 ...

  5. Web 字体 font-family 浅谈

    前言 最近研究各大网站的font-family字体设置,发现每个网站的默认值都不相同,甚至一些大网站也犯了很明显的错误,说明字体还是有很大学问的,值的我们好好研究. 不同的操作系统.不同浏览器下内嵌的 ...

  6. HTML5 UI框架Kendo UI Web中如何创建自定义组件(二)

    在前面的文章<HTML5 UI框架Kendo UI Web自定义组件(一)>中,对在Kendo UI Web中如何创建自定义组件作出了一些基础讲解,下面将继续前面的内容. 使用一个数据源 ...

  7. 浅谈HTTP中Get与Post的区别/HTTP协议与HTML表单(再谈GET与POST的区别)

    HTTP协议与HTML表单(再谈GET与POST的区别) GET方式在request-line中传送数据:POST方式在request-line及request-body中均可以传送数据. http: ...

  8. 再谈前端HTML模板技术

    在web2.0之前,写jsp的时候虽然有es和JSTL,但是还是坚持jsp.后面在外包公司为了快速交货,还是用了php Smart技术. web2.0后,前端模板技术风行. 代表有如下三大类: Str ...

  9. 再谈HTTP2性能提升之背后原理—HTTP2历史解剖

    即使千辛万苦,还是把网站升级到http2了,遇坑如<phpcms v9站http升级到https加http2遇到到坑>. 因为理论相比于 HTTP 1.x ,在同时兼容 HTTP/1.1 ...

  10. GoF设计模式三作者15年后再谈模式

    Erich Gamma, Richard Helm, 和 Ralph Johnson在GoF设计模式发表15年以后,再谈模式,另外一位作者,也是四色原型的发明者Peter已经过世. 提问者:如今有85 ...

随机推荐

  1. List 切割成小 list 分批处理数据

    使用 Google Guava 库中的方法对 bmList 进行分割. Lists.partition() 方法用于将一个列表按指定大小进行分割,返回一个包含分割后子列表的新列表. 在这个例子中,bm ...

  2. 使用 Appilot 部署 Llama2,会聊天就行!

    Walrus 是一款基于平台工程理念的应用管理平台,致力于解决应用交付领域的深切痛点.借助 Walrus 将云原生的能力和最佳实践扩展到非容器化环境,并支持任意应用形态统一编排部署,降低使用基础设施的 ...

  3. 学习Hadoop不错的系列文章(转)

    http://www.cnblogs.com/xia520pi/archive/2012/04/22/2464934.html 1)Hadoop学习总结 (1)HDFS简介 地址:http://for ...

  4. Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍

    Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍 目录 Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍 一.前置原则 二.一切皆组合 2.1 一切皆组合 2.2 垂直组合 2.2.1 第 ...

  5. CSS 尺寸单位概述

    在本文中,我们将探讨 CSS 尺寸单位的四大类别.我们将了解这些尺寸单位的用途.它们的最佳工作原理,以及如何在每种情况下选择最佳尺寸单位,从而在各种媒体和设备尺寸下优化我们的布局. 关于 CSS 尺寸 ...

  6. 【题解】HD2016.X1,HD2016.X3,HD2016.X4,HD2016.X5

    [HD2016.X1] 价钱统计 题目描述 夏天到了,超市里摆满了各种各样的应季水果.现在知道:西瓜的价钱是每斤 1.2 元:桃子的价钱是每斤 3.5 元:葡萄的价钱是每斤 4.5 元:苹果的价钱是每 ...

  7. 一文秒懂|Linux字符设备驱动

    1.前言 众所周知,Linux内核主要包括三种驱动模型,字符设备驱动,块设备驱动以及网络设备驱动. 其中,Linux字符设备驱动,可以说是Linux驱动开发中最常见的一种驱动模型. 我们该系列文章,主 ...

  8. EMCC13.5+Oracle19.13+Redhat8 In Silent Mode

    问题描述:使用静默的方式来安装emcc13.5+Oracle19.13,准备好19c的oracle环境,一开始用21c的库+emcc13.5的安装检查一直过不去,但是19c是没有问题的,具体问题会在下 ...

  9. springMvc报错

    这个报错困扰了我大概一天,主要是刚开始没抓到主要原因,是因为自己的项目结构出现了问题, 导致找不到应有的东西,另一方面就是maven的问题,将maven解决后这个就能用了. 具体解决在https:// ...

  10. Chrome扩展的核心:manifest 文件(中)

    大家好,我是 dom 哥.我正在写关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星 . 在上一篇中已经完成了 Chrome 扩展的雏形,本篇接着介绍 manifest 中的可选字段,完 ...