web自动化测试(1):再谈UI发展史与UI、功能自动化测试
前言(废话)
行文前,安利下文章:《图形界面操作系统发展史——计算机界面发展历史回顾》、《再谈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等功能。
前端断言库
断言库提供了很多语义化的方法来对值做各种各样的判断。
前端集成管理工具
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、功能自动化测试的更多相关文章
- 如何使用Coded UI Test对Webpage进行自动化测试
在Visual Studio中,Coded UI Test已经不是什么新特性了,较早版本的Visual Studio中就已经有这个东东了.它主要用来帮助自动化测试工程师和开发人员确保程序在UI方面没有 ...
- Coded UI Test对Webpage进行自动化测试
如何使用Coded UI Test对Webpage进行自动化测试 在Visual Studio中,Coded UI Test已经不是什么新特性了,较早版本的Visual Studio中就已经有这个 ...
- 再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结
这篇是对angularJS的一些疑点回顾,是对目前angularJS开发的各种常见问题的整理汇总.如果对文中的题目全部了然于胸,觉得对整个angular框架应该掌握的七七八八了.希望志同道合的通知补充 ...
- 再谈DOMContentLoaded与渲染阻塞—分析html页面事件与资源加载
浏览器的多线程中,有的线程负责加载资源,有的线程负责执行脚本,有的线程负责渲染界面,有的线程负责轮询.监听用户事件. 这些线程,根据浏览器自身特点以及web标准等等,有的会被浏览器特意的阻塞.两个很明 ...
- Web 字体 font-family 浅谈
前言 最近研究各大网站的font-family字体设置,发现每个网站的默认值都不相同,甚至一些大网站也犯了很明显的错误,说明字体还是有很大学问的,值的我们好好研究. 不同的操作系统.不同浏览器下内嵌的 ...
- HTML5 UI框架Kendo UI Web中如何创建自定义组件(二)
在前面的文章<HTML5 UI框架Kendo UI Web自定义组件(一)>中,对在Kendo UI Web中如何创建自定义组件作出了一些基础讲解,下面将继续前面的内容. 使用一个数据源 ...
- 浅谈HTTP中Get与Post的区别/HTTP协议与HTML表单(再谈GET与POST的区别)
HTTP协议与HTML表单(再谈GET与POST的区别) GET方式在request-line中传送数据:POST方式在request-line及request-body中均可以传送数据. http: ...
- 再谈前端HTML模板技术
在web2.0之前,写jsp的时候虽然有es和JSTL,但是还是坚持jsp.后面在外包公司为了快速交货,还是用了php Smart技术. web2.0后,前端模板技术风行. 代表有如下三大类: Str ...
- 再谈HTTP2性能提升之背后原理—HTTP2历史解剖
即使千辛万苦,还是把网站升级到http2了,遇坑如<phpcms v9站http升级到https加http2遇到到坑>. 因为理论相比于 HTTP 1.x ,在同时兼容 HTTP/1.1 ...
- GoF设计模式三作者15年后再谈模式
Erich Gamma, Richard Helm, 和 Ralph Johnson在GoF设计模式发表15年以后,再谈模式,另外一位作者,也是四色原型的发明者Peter已经过世. 提问者:如今有85 ...
随机推荐
- 9.17 多校联测 Day3 总结
全程罚坐场. 模拟赛考试状态持续低迷,为明天的状态感到深深担忧. <题目并不难,请喧哗的同学不要大声 AK>,离谱. 不保证按难度顺序排序,尝试改变策略.开始第 1h 将四道题通读一遍并做 ...
- 【Java集合】单列集合Collection常用方法详解
嗨~ 今天的你过得还好吗? 路途漫漫终有一归, 幸与不幸都有尽头. 在上篇文章中,我们简单介绍了下Java 集合家族中的成员,那么本篇文章,我们就来看看 Java在单列集合中,为我们提供的一些方法,以 ...
- 【爬虫】一次爬取某瓣top电影前250的学习记录
先贴上爬取的脚本: import requests import re for i in range(1,11): num=(i-1)*25 url=f"https://mo ...
- vue element ui 组件使用 -form 表单
表单验证rules 绑定是规则 也可以自定义规则,:model是表单的数据源 el-form-item 标签里面prop的名字要和数据源的名字一致,才能验证生效 ;提交时调用this.$refs[fo ...
- SpringBoot 项目优雅实现读写分离
一.读写分离介绍 当使用Spring Boot开发数据库应用时,读写分离是一种常见的优化策略.读写分离将读操作和写操作分别分配给不同的数据库实例,以提高系统的吞吐量和性能. 读写分离实现主要是通过动态 ...
- JavaScript高级程序设计笔记05 基本引用类型
基本引用类型 引用值(对象)是某个特定引用类型的实例.引用类型是把数据和功能组织到一起的结构. 引用类型有时也被称为对象定义,因为它们描述了自己的对象应有的属性和方法. Date 参考了Java早期版 ...
- C++跨DLL内存所有权问题探幽(二)CRT中MT和MD混用导致的堆损坏
0xC0000374: 堆已损坏. (参数: 0x00007FFA1E9787F0). _Mem 是 nullptr 我在开发的过程中有遇到上面两个东西的bug,百思不得其解,最后才发现这个和两个DL ...
- 金蝶云星空与泛微OA集成的方案落地与实践
打破信息孤岛,泛微OA集成的方案落地与实践 在现代企业内部,不同类型的业务系统和泛微OA平台层出不穷.企业需要找到一种高效的方法来整合和协同这些多样化的系统,同时将它们与泛微OA平台融合,以实现资源整 ...
- Linux RN6752 驱动编写
一.概述 关于 RN6752V1 这个芯片这里就不做介绍了,看到这篇笔记的小伙伴应该都明白,虽然说 RN6752V1 芯片是 AHD 信号的解码芯片,但是也可以把芯片当做是一个 YUV 信号的 MIP ...
- Java项目整合短信验证码
一.开通短信服务 本来想整合阿里云短信服务的,可是签名一直审核不过,所以在阿里云的云市场找到了一个替代产品(sddx) 接下来小伙伴们按照自己的经济实力购买或者用免费的5条(我就是用免费的5条了) 购 ...