目录
测试分类
按开发阶段划分
测试金字塔
投入相同的人力和精力,越往上层,产出越低
越往上层,定位问题越困难
越往上层,效率越低
越往底层走,测试独立性越高
单元测试
其实是针对代码进行测试
对程序的一个单元进行测试,这个单元可能是一个类,可能是一个方法。
测试阶段:开发前(TDD:Test-Driven-Development)、开发后
测试对象:单元模块
测试人员:白盒测试工程师或开发工程师
测试依据:代码和注释+详细设计文档
测试方法:白盒测试
测试内容:
(1)模块接口的测试
主要关注输入输出,输入参数的数量,类型,类型的排列,输出是否符合接口设计文档
(2)局部数据结构测试
(3)路径测试
if…else、switch
(4)错误处理测试
(5)边界测试
单元测试步骤:
1.在pox.xml添加依赖
2.下载插件
file-settings-plugins_junit
3.创建相应的单元测试类
选中被测试类,ctrl+shift+T 可以创建单元测试类
4.单元测试类当中写每一个方法的单元测试代码
@Test 每一个单元测试方法上必须有,不然不会被认为是单元测试,不会被执行
@ignore 忽略一个单元测试
@before 在执行每一个的单元测试方法之前执行
@after 在执行每一个单元测试方法之后执行
集成测试
集成:按照一定的策略(逻辑)组合单元模块形成一个具有完整功能的大模块。
测试阶段:单元测试之后
测试人员:黑盒测试工程师、白盒测试工程师
测试方法:灰盒测试
测试依据:概要设计文档
测试内容:接口之间数据的传输、全局数据结构、模块组装的功能的正确性、单个功能模块缺陷对整体的影响、模块和模块之间的功能冲突
模块功能的正确性、组成模块的单元之间的接口测试、全局数据结构测试、单个模块的功能缺陷对整个模块的影响
系统测试
测试阶段:集成测试之后
测试对象:整个软件系统
测试方法:黑盒测试方法
测试人员:黑盒测试工程师
测试依据:需求文档
测试内容: 功能、界面、易用性、性能、安全性、兼容性、可靠性
(1)回归测试
在系统进入新的代码(增加新功能、修改bug)时候进行回归测试。
回归测试要有策略,针对新代码可能会影响旧代码的部分进行回归测试 或自动化测试。
(2)冒烟测试
对系统的主要功能和核心的流程进行测试。
评判系统是否进入正式的测试环节的依据—准入原则
验收测试
软件在上线前最后一次测试,也称为“交付测试”。
客户(甲方)按照用户的需求对系统进行测试
测试对象:整个软件系统
测试人员:客户
测试依据:用户需求
测试方法:黑盒测试
测试内容:和系统测试一样+文档测试(软件设计文档、功能设计文档、用户使用手册、详细功能使用文档等)
按实施组织划分
α测试和β测试也是验收测试的一种。
α测试
用户到开发环境下进行测试
优点:测试过程中发现的问题可以及时反馈给开发人员,及时得到解决
缺点:用户在开发环境下,容易受到开发人员和测试人员的影响
β测试
实际用户在真实的环境下进行测试,测试环境地域不受限制
测试的结果很接近用户实际使用的情况的反馈
β测试在α测试之后
α测试和β测试对比
地域不同:α测试在开发环境下,β测试在用户实际使用环境下
时间的集中程度不同:α测试的测试时间比较集中,β测试时间相对比较分散
第三方测试
由软件的第三方测评机构进行测试
按照是否运行划分
静态测试
不运行代码,检查代码的风格,格式是否符合公司的规范标准,检查代码的逻辑结构是否满足需求要实现的功能。
动态测试
写测试用例,运行程序,对系统进行测试,查看分析系统的输出是否符合预期。
按是否手工划分
手工测试
设计测试用例,运行程序,一步一步手动执行测试用例,对系统进行测试
缺陷:容易出错,效率低
优点:测试时比较灵活,可以根据不同的实际情况进行测试用例的修改和完善。
自动化测试
把手工测试的测试用例转换成自动化脚本,让机器去执行脚本;给定预先设计好的条件和结果的预判去执行。
接口自动化、性能自动化、web自动化、APP自动化
1.自动化意义:解放双手、提高测试效率、节省大量的人力和时间。
2.如何判断一个自动化脚本是否有意义?
自动化脚本的使用率,使用率越高越有价值
3.什么项目可以使用自动化?
(1)项目周期长,不停迭代
(2)适用于需求比较稳定的项目
按是否查看代码划分
黑盒测试
不看代码
1.测试的时候,只关心输入和输出,而不去看功能的内部逻辑和代码的具体实现。
站在用户的角度去设计测试用例,设计测试用例是根据软件需求来设计的,不容易遗漏需求。
2.黑盒测试的设计测试用例的方法?
等价类、边界值、因果图、正交表、错误猜测、场景法
白盒测试
看代码
对程序的内部的逻辑,结构,功能进行的测试,看代码是否实现了需求。
单元测试属于白盒测试
白盒测试的方法:
(1)语句覆盖法
(2)逻辑覆盖法
1.路径覆盖
2.判定覆盖
3.判定组合覆盖
4.条件覆盖
(3)循环覆盖法
灰盒测试
介于黑盒测试和白盒测试之间,既要关心输入输出,又要关心程序内部逻辑(集成测试、接口)
按地域划分
国际化测试
软件国际化:开发一款软件的时候运用了一种工程技术,可以使得软件适应不同国家的语言和当地的风俗习惯而不用修改软件源代码。
如:苹果手机、华为手机、office
国际化测试的要点:
(1)本地化后的软件在外观上与原来版本是否存在很大的差异,外观是否整齐、不走样。
(2)是否对所有界面元素都进行了本地化处理,包括对话框、菜单、工具栏、状态栏、提示信息(包括声音的提示)、日志等。
(3)在不同的屏幕分辨率下界面是否正常显示。
(4)是否存在不同的字体大小,字体设置是否恰当。
(5)日期、数字格式、货币等是否能适应不同国家的文化习俗。例如,中文是年月日,而英文是月日年。
(6)排序的方式是否考虑了不同语言的特点。例如,中文按照第一个字的汉语拼音顺序排序,而英文按照首字母排序。
(7)在不同的国家采用不同的度量单位,软件是否能自适应和转换
(8)软件是否能在Windows或者其他操作系统的当地版本上正常运行
(9)软件是否能在不同类型的硬件上正常运行,特别是在当地市场上销售的流行硬件上
(10)联机帮助和文档是否已经翻译,翻译后的链接是否正常。正文翻译是否正确、恰当, 是否有语法错误。
本地化测试
具体到某一个国家。
按测试对象划分
界面测试
测试软件界面元素完整性、正确性、一致性。
1.文字:大小、类型、粗细、是否斜体、颜色、是否加下划线、是否是链接
2.图片:大小、颜色、清晰度、排版、是否重叠
3.控件:按钮、文本框、滚动条、下拉框、勾选框
4.有效控件和无效控件:置灰、高亮
5.备注:提示说明语言是否清晰
6.整体布局的排版
7.响应式测试:页面可以随着屏幕的分辨率不同而自适应
响应式设计注意点:
(1)页面上的文字随着屏幕分辨率变化的时候不会出现重叠、遮挡、消失
(2)页面上的图片随着屏幕分辨率变化的时候不会出现重叠、遮挡、消失
(3)页面上的功能随着屏幕分辨率变化的时候不会消失
(4)页面上的功能随着屏幕分辨率变化的时候可以正常使用
(5)要严格遵循UI设计图
(6)页面在不同的屏幕分辨率进行衔接,衔接是否丝滑,不出现断层
8.界面测试常见的错误:
(1)不合适的快捷键
(2)截断
(3)没有对齐
(4)文字消失(没有正常展示)
(5)自动换行
(6)重复的快捷键
(7)重叠展示
9.界面设计(颜色、布局)考虑当下时事
容错性测试
当系统因为外部环境的影响或者用户的误操作导致系统发生错误,但是系统可以自我处理,使系统正常稳定运行。不让用户感知。
1.数据级别:日期(2月份29天)、时间、钱数(ATM机输入小于100的钱数,有提示)
2.验证级别:查询信息的前后空格、验证码忽略大小写字母、同一个系统前后信息的容错处理、注册、密码、确认密码
3.环境容错处理:当系统运行的时候出现断电、断网,服务器故障的时候可以随时切换用电器、网络、备用服务器,并让用户无法感知。
4.界面容错处理:进行一些危险或者用户禁用操作的时候,是否给用户提示,或者把这些功能屏蔽掉; 注册的时候账户和密码的位数的限制,当用户输入最大位数的时候就禁止输入了;用户只能输入一些规定好的固定选项的时候,以下拉框的形式展示; 在一些复杂容易出错的操作,会给用户提示。
5.灾难恢复性测试:人为让系统发生一系列故障,让系统出现断电断网系统崩溃的极端情况,检测系统是否可以自我恢复数据,以及恢复这些数据的正确性和耗时。
文档测试
对软件开发过程中产生的文档进行测试,包含 软件设计文档、流程图文档、功能分析设计文档、用户使用手册等。
主要测试文档和软件系统的一致性
文档的术语是否得当、文档的正确性、完整性、易用性。
兼容性测试
进行兼容性测试的原因:不同的浏览器内核不同,对同一个页面的解析不一样。
web系统的兼容性
Windows : Windows10 、 Windows7
Mac : IOS的不同版本
浏览器(Firefox、Chrome、edge、Opera、360、IE、Safari),每一个浏览器的不同版本
APP的兼容性
iOS:不同版本的iOS系统
Android:华为、OPPO、vivo…每一个品牌有不同的机型,在每一个机型上进行Android系统的主流版本的测试。
软件本身向前向后的兼容性
当前的版本不能影响之前的版本。
软件和其他相关的软件的兼容性
淘宝、支付宝
数据的兼容性
设计功能的时候,要考虑用户已有的数据。
数据库中的用户表,现在给user表添加了一个字段,旧的表要对于这个字段设置一个默认值,不能让新表影响到旧表。
易用性测试
也称“用户体验”。
符合标准规范
用户信息提示符号:白色
警告信息提示符号:黄色
严重错误提示符号:红色
直观性(用户期望的操作在可见范围之内)、灵活性(键盘:九宫格、手写、全键盘)、舒适性(下载的进度条)、实用性(B站推送视频、知乎推送文章)
安装 / 卸载测试
APP的安装方式:应用商店、安装包、命令行、压缩包解压、第三方应用安装(手机助手、电脑管家)
APP的卸载方式:应用商店、桌面卸载、第三方应用卸载、命令行卸载
断电、断网情况下的安装和卸载
安装过程中空间不足怎么办
安装或卸载过程中如果暂停,继续安装或卸载是否会成功
安装和卸载的过程中出现了手机关机,手机重新开机后是否还可以正常安装和卸载。
卸载的过程中是否可以清除产生的有关数据
卸载软件,如果取消了,软件是否可以正常使用
性能测试
为什么要进行性能测试?
(1)希望用户有很好的体验,系统能够快速的响应用户的需求
(2)系统能够处理预期的用户负载
(3)系统能够处理预期的事务数量
(4)系统在满足以上指标的情况下,可以稳定运行,用户有良好的用户体验。
测试点:
响应时间
TPS(transaction per second):每秒处理的事务数量
吞吐量
系统在单位时间内处理的信息量
点击率:每秒向服务器发送的HTTP请求的个数
系统在运行时占用的资源的情况:CPU、内存、磁盘、网络带宽、耗电量
安全测试
安全性指信息安全,软件保护用户的数据、隐私,以及数据传输过程中的安全性,防止病毒侵入和黑客攻击。
(1)SQL注入
(2)上传下载:对于付费,保密的文件进行测试,防止会被半路截取信息;在上传 的时候,防止上传有病毒的文件;上传过大文件或下载过大文件
(3)防爬虫
(4)XSS注入、黑客、病毒
(5)输入域,能够检测带病毒的字符串或者文件
内存泄漏测试
在分配内存的时候,没有及时释放内存,或者无法释放,导致系统运行占用的内存越来越多,系统运行越来越慢,甚至崩溃。
原因:
(1)使用API函数不正确
(2)程序写的有问题,无法释放内存空间
(3)分配了内存空间之后,忘记释放
可靠性测试
可靠性指软件正常运行的能力,软件正常运行的时间和总体运行的时间的百分比。
可靠性=软件正常运行的时间/(非正常运行的时间+正常运行的时间)
影响软件的可靠性的因素:网络、软件环境、硬件环境等
环境的异常都会使得软件运行异常。
怎么测试软件的可靠性?
让软件运行一周,出现故障的时间记录下,计算百分比。
一个微信群100人以上,发了一个100元的红包,100个人抢,抢完后,怎么判断抢的钱数和发的钱数一致?
接口测试(postman、jmeter)
发红包接口:
输入:群id、发红包人微信id、钱数
输出:红包id
抢红包id:
输入:群id、红包id、抢红包人id
输出:抢的钱数
调用生成微信id的接口生成100个微信id。