目录
一、按开发阶段分
测试金字塔
【注】SDK,全称:SoftWare DeveLopment Kit,一般是指软件工程师特定的软件包建立的开发工具集合。
为什么测试金字塔越往上投入阐述比越小?
测试人员投入相同的精力,测试成果越来越小
- 越往上定位问题越困难
- 越往上测试效率越低
(一)单元测试(模块测试)
- 测试阶段:编码后或编码前(TDD) TDD:测试驱动开发,Test-Driven-Development(先写测试用例,再跑测试用例,然后开发人员根据测试用例产生的异常去补充开发代码)
- 测试对象:最小模块
- 测试人员:白盒测试工程师或开发工程师
- 测试依据:代码和注释+详细设计文档(V模型)
- 测试方法:白盒测试
- 测试内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试
Java单元测试框架:Junit
模块接口测试:主要注意输入的参数,参数个数、参数类型,参数顺序要符合接口文档,输出要与预期一致
- 局部数据测试
- 边界测试:for、while等有边界
- 错误处理测试:try catch finally
- 路径测试:if else switch等有路径
使用方法:安装插件(JUnit);找到要进行单元测试的类,选中类名,Ctrl+Shift+t创建单元测试类;最后写单元测试方法
注:
@Test:每一个单元测试方法上必须有,不然不会被认为是单元测试方法,不会被执行
@Ignore:忽略一个单元测试
@Before:在执行每一个单元测试方法之前执行
@After:在执行每一个单元测试方法之后执行
局部数据结构属于单元测试
(二)集成测试(联合测试(联调)、组装测试)
- 测试阶段:单元测试之后进行
- 测试对象:模块间的接口
- 测试人员:白盒测试工程师或开发工程师
- 测试依据:单元测试的模块+概要设计文档
- 测试方法:黑盒测试与白盒测试相结合
- 测试内容:接口之间数据的传输、模块之间数据传输、模块之间功能冲突、模块组装功能正确性、全局数据结构、单模块缺陷对系统的影响
(三)系统测试(全面)
- 测试阶段:开发完成后,集成测试通过之后
- 测试对象:整个系统(软、硬件)
- 测试方法:黑盒测试
- 测试人员:黑盒测试工程师
- 测试依据:需求规格说明文档
- 测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等
(1)回归测试
(2)冒烟测试
(四)验收测试
- 测试阶段:系统测试之后,主要是用户进行测试
- 测试对象:整个系统(软、硬件)
- 测试方法:黑盒测试
- 测试人员:黑盒测试工程师
- 测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性、文档(功能说明文档、开发文档、使用说明书)等
二、按照测试的实施组织
(一)α测试
(二)β测试
用户在正常的使用环境下进行测试,通常在一个周期测试完成后,把问题整理成文档,反馈给开发人员
优点:用户在真实的使用环境下进行测试,测试结果更加可靠
缺点:测试时间比较分散
【注】β测试在α测试之后
β测试在α测试对比
地域不一样:α测试是在开发情况下,β测试是在用户实际使用环境下
时间集中程度不一样:α测试测试时间相对比较集中,β测试测试时间相对比较分散
(三)第三方(第三方软件测评机构)
根据行业里面的一些标准和规范进行测试
三、按照是否运行去划分
(一)静态测试
(二)动态测试
四、按照是否手工划分
(一)手工测试
设计测试用例,运行程序,一步一步手动执行测试用例,对系统进行测试
优点:比较灵活,可以进行发散性的测试
缺点:如果进行大量测试就容易出错,执行效率慢
手工测试可以被自动化测试代替吗?不可以
(二)自动化测试
把手工测试的测试用例转化为自动化脚本,让机器去执行脚本;给定预先设计好的条件和结果的预判去执行
有接口自动化、性能自动化、web自动化、app自动化
前提:在系统功能比较稳定的前提下才可以进行自动化测试
自动化测试的最大价值:脚本的重复利用率,重复利用率越高价值越大
自动化实施步骤:
- 完成功能测试,版本基本稳定
- 根据项目特性,选择适合项目的自动化工具,并搭建环境
- 提取手工测试的测试用例转化为自动化测试的用例
- 通过工具、代码实现自动化的构造输入,自动检测输出结果是否符合预期
- 生成自动测试报告
- 持续改进,脚本优化
自动化的意义?
答:解放双手,提高测试效率,节省大量的人力和时间资源
如何判断一个自动化脚本是否有价值?
答:看自动化脚本的使用率,使用频率越高越有价值
什么项目可以使用自动化?
答:项目周期长,需要不停的迭代;适用于需求比较稳定的项目
五、按是否查看代码划分
(一)黑盒测试(不看代码)
黑盒测试设计测试用例的方法:
- 等价类
- 边界值
- 因果图法
- 正交法
- 场景设计法
- 错误猜测法
(二)白盒测试(看代码)
研究软件内部的程序、逻辑和结构,验证是否满足软件需求,相当于把软件当成一个白色(透明)的能看见内部结构的盒子
白盒测试的方法
- 语句覆盖(把每一条语句都执行)
- 逻辑覆盖(创造一个异常,看是否能catch异常,或者不创造异常,看是否执行finally;switch)
- 路径覆盖(if else;switch 每一条路径都走过去)
- 判定覆盖(判定为真为假,每个判定条件都走过去)
- 条件覆盖
- 判定和条件的组合
- 判定组合
- 条件组合
(三)灰盒测试
介于白盒和黑盒之间,既关心输入输出,又关心程序内部结构(集成测试、接口)
六、按测试地域划分
(一)国际化测试
软件国际化:在设计软件的时候采用一种工程技术,使得软件在转换不同国家的语言、风俗习惯的时候不需要修改源码的技术
如何进行软件国际化测试?
- 本地化后的软件在外观上与原来版本是否存在很大的差异,外观是否整齐、不走样
- 是否对所有界面元素都进行了本地化处理,包括对话框、菜单、工具栏、状态栏、提示信息(包括声音的提示)、日志等
- 在不同的屏幕分辨率下界面是否正常显示
- 是否存在不同的字体大小,字体设置是否恰当
- 日期、数字格式、货币等是否能适应不同国家的文化习俗,例如,中文是年月日,而英文是月日年
- 排序的方式是否考虑了不同语言的特点。例如,中文按照第一个字的汉语拼音顺序排序,而英文按照首字母排序
- 在不同的国家采用不同的度量单位,软件是否能自适应和转换
- 软件是否能在不同类型的硬件上正常运行,特别是在当地市场上销售的流行硬件上
- 软件是否能在Windows或者其他操作系统的当地版本上正常运行
- 联机帮助和文档是否已经翻译,翻译后的链接是否正常,正文翻译是否正确、恰当, 是否有语法错误
(二)本地测试
之前所讲
本地测试和国际化测试相互依存
七、按测试对象划分
(一)业务测试
场景设计法:正常流程,异常流程
对测试人员的要求:了解业务
(二)界面测试
考虑:文字:大小、字体、排版、颜色、粗细,是否加下划线,是否是链接等
图片:清晰度、大小、排版、是否重叠、色彩等
页面整体排版、信息提示弹出框、控件、对话框、滚动条、弹出框
按钮亮度的显示(有效按钮高亮展示,无效按钮置灰)
备注,提示说明语言表达是否清晰
响应式测试:页面可以随着屏幕大小的不同而变换
响应式页面的测试
- 文字在不同分辨率下能够完成并且清晰展示
- 图片在不同分辨率下能够正常排版、清晰展示、不重叠
- 界面的功能在不同分辨率下可以正常使用
- 界面在不同分辨率切换的时候,是平滑的过度
- 不同的分辨率下,界面的展示要严格按照UI设计稿来展示
界面测试常见的错误:
不合适的快捷键、文字消失(没有正常展示)、重叠展示、重复的快捷键、未对齐等
(三)容错性测试
当系统出现一些异常,或者用户输入错误的信息,进行异常的操作,系统可以自我处理这些错误情况,不会出现崩溃、页面异常的情况,可以给用户一个很好的体验
数据容错性:时间、日期、数字
校验容错性:查询信息前后空格会去掉、大小写转换、验证码、数据信息一致性的校验、
信息级别:填写表单时,异常关闭(网络,电力,人为)是否会自动保存
同一个数据被不同人操作的时候是否会锁定
同一个信息在不同平台上被操作(同一账号下),信息同步
界面容错性:复杂操作会有说明提示、用户在执行有风险操作的时候有提示,或者把这些功能处理掉
环境容错性:网络、电源、服务器、无缝切换备用网络,电源或者服务器就能保证用户无感知
灾难恢复性测试:人为的让服务器或者服务器所依赖的环境发生故障,测试系统的自我修复能力
1. 系统能不能恢复
2. 系统碰到这些极端情况的时候,恢复系统功能和信息所需的时间用户能否接受
(四)文档测试
对软件开发过程中产生的文档(软件设计文档,流程图文档,功能分析文档,用户使用手册等)进行测试
主要测试文档的完整性、一致性、易用性、正确性、术语是否专业等
(五)兼容性测试
系统所在平台的兼容性
例如测试一个web系统,首先各种操作系统(Windows,iOS),不同的操作系统要测试,不同操作系统的版本要测试,浏览器要装在不同的操作系统上,需要测试不同的浏览器(Chrome、Firefox、edge、IE、360、搜狗、QQ浏览器)下网页是否可以正常展示和使用
【注】不同的浏览器内核不一样,对同一个页面的解析不一样
APP本身不同机型的不同操作系统(IOS,Android),不同操作系统的主流版本上进行测试
iPhone 华为 oppo vivo...
兼容性测试在不同平台上测试的功能都是一样的,所以可以自动化测试
软件本身向前或向后的兼容性(软件是一期一期的迭代的,迭代功能要有兼容性)
软件和其他相关软件的兼容性(同一个手机上不同APP的第三方登录,使用微信登录,其微信昵称会同步)
数据兼容性:同一个软件上的数据兼容性
(六)易用性测试
用户体验性测试,遵循一定的易用性标准(经过前期积累经验,越来越符合人的使用习惯和使用需要)开发软件
测试符合标准规范,直观性,灵活性,舒适性、实用性等
软件的展示要和软件定位相关
(七)安装测试(卸载)
APP(应用商店、安装包、命令行)、系统(官网)的安装
APP、系统的卸载
安全性的测试
病毒,SQL注入、xSS OS攻击
木马病毒
(八)性能测试
为什么要进行性能测试?
- 能够快速的响应用户的请求(358原则:3s/5s/8s)
- 系统能够负载所需要的用户数量
- 能够处理系统所需要的事务数量
- 在负载和事务处理的高峰期,系统可以稳定运行
- 在系统能够处理的最高用户负载和用户数量的时候,用户可以获得良好的体验
测试哪些方面?
对资源的利用率(CPU、GPU、内存、硬盘、网络、电源、耗电量)
响应时间:用户发送请求到用户所期待的响应(页面、信息)展示出来
吞吐量:系统在单位时间处理的信息量(按字节算、按事务处理量计算,单位时间内处理的HTTP请求数计算)
日志的级别:info debug warn(警告) error
(九)内存泄漏测试
系统在使用一些内存的时候,没有及时的释放,无法释放,造成系统占用的内存越来越大,系统运行越来越慢,影响了它的APP的运行速度
造成内存泄漏的原因:分配了内存忘记回收;写法有问题导致分配的内存无法回收;错误的使用一些API造成内存无法回收
如何检查?静态测试;用一些专门的工具