web自动化测试(1):再谈UI发展史与UI、功能自动化测试
Author:zhoulujun Date:
前言(废话)
行文前,安利下文章:《图形界面操作系统发展史——计算机界面发展历史回顾》、《再谈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
延伸阅读:
- 负载测试、压力测试和性能测试的区别
- Chrome高性能的秘密:预连接、预加载与预渲染
- Chrome高性能的秘密:DNS预解析
- Chrome高性能的秘密:对Mobile平台的优化
- HTML字符编码解析是如何影响浏览器性能的
- 可用性测试非典型应用
- 再谈前端性能优化前端系列——移动页面性能优化
- 测评性能力—推测做爱时刻,衡量做爱频次,预测弟弟衰老
- 浅谈QUIC/http3协议原理与性能分析及部署方案
- webpack性能优化(0):webpack性能优化概况-优化构建速度
- Jetty 的工作原理以及以及Jetty和Tomcat的使用及性能测试
- 再谈HTTP2性能提升之背后原理—从http1到HTTP2的历史解剖
- 系统架构设计—性能和代码可维护性的取舍之道
- 文档可测试化—项目管理
- Android压力测试:monkey测试命令详解与案例演示
- web自动化测试(2):选择selenium优势?与PhantomJS/QTP/Monkey对比
- web自动化测试(3):web功能自动化测试selenium基础课