测试基础
测试相关
测试理论
白盒测试
白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,
常见的白盒测试的方法有:语句覆盖,条件覆盖,判定覆盖,路径覆盖,条件组合覆盖,基本路径覆盖等等。
优点:暴露底层,可以检测代码的每条分支和路径;从而揭示隐藏在代码中的错误;对代码的测试比较彻底,覆盖率较高。
缺点:耗费比较大;不能检测到代码中遗漏的逻辑;不能直接验证需求的正确性
黑盒测试
黑盒测试也称功能测试或数据驱动测试,它不看代码内部的逻辑,只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
常见方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。
优点:容易实施,不需要关注内部实现;贴近用户需求。
缺点:覆盖率比较低,因为不知道内部逻辑,很难进行完备测试
单元测试
单元测试:软件组成单元进行测试,其目的是检验软件基本组成单位的正确性,通常情况下是白盒的,能够尽早的发现错误,降低修改成本。
性能测试关注啥
指标:响应时间(RT)、每秒能完成的响应数(TPS)、CPU利用率、内存占用、网络(带宽使用率)、手机app的话还考虑耗电量……
考虑负载加大时,各项指标如何变化,联网的考虑各种不同的网络环境(正常网、超快网、网速慢、断网)时指标的变化
压力测试关注啥
并发用户数和在线用户数的区别
在线用户数:用户同时在一定时间段的在线数量
并发用户数:某一时刻同时向服务器发送请求的用户数
(在线用户只要在线就好了只要服务器中该用户对应的session没有过期他就是在线的,并发用户计算的是和服务器有交流的用户,一般比例5%-20%)
测试的阶段
测试应该尽早进行。越早就可以花越少的消耗得到越大的回报。
单元测试
单元测试是对软件组成单元进行测试,其目的是检验软件基本组成单位的正确性,测试的对象是软件设计的最小单位:函数、或者类。
项目中的测试类就是测试接口类的,属于单元测试,一般由开发人员测试。
集成测试
集成测试也称综合测试、组装测试、联合测试,将多个程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。其主要目的是检查软件单位之间的接口是否正确,集成测试的对象是多个单元集成在一起的模块。
系统测试
系统测试是对整个系统的测试,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统说明书的地方,主要包括功能测试、界面测试、可靠性测试、易用性测试、性能测试。 功能测试主要针对包括功能可用性、功能实现程度(功能流程&业务流程、数据处理&业务数据处理)方面测试。在集成测试之后。
集成测试和系统测试之间的比较:
1、测试内容:集成测试是测试各个单元模块之间的接口,系统测试是测试整个系统的功能和性能;
2、测试角度:集成测试偏重于技术的角度进行测试,系统测试是偏重于业务的角度进行测试。
验收测试
也称交付测试,是针对用户需求、业务流程进行的正式的测试,以确定系统是否满足验收标准,由用户、客户或其他授权机构决定是否接受系统。
验收测试包括alpha测试和beta测试,alpha测试是由用户和开发人员都在场进行的软件测试,beta测试是由用户在脱离开发人员下进行的软件测试。
回归测试 测试的类型
功能测试:关注功能正常(包含兼容性测试),除了下面分类都测;
性能测试:关注(比如前端性能、后端性能);
安全测试:关注传输、存储等安全;
特性测试:特性指平台差异(即部分兼容性测试),如PC端鼠标,键盘操作特性(Tab键等);如手机触屏操作,横竖屏,中断恢复(来电)等
QPS(每秒查询率)
QPS:每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准
是衡量服务器的机器性能的一个重要指标。
QPS和TPS的区别
TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数。TPS包括一条消息入和一条消息出,加上一次用户数据库访问。
是软件测试结果的测量单位。
系统吞吐量
测试生命周期
测试周期是指从测试项目计划建立到BUG提交的整个测试过程。
包括软件项目测试计划,测试需求分析,测试用例设计,测试用例执行,BUG提交五个阶段。 软件测试周期并行与软件生命周期,存在于软件生命周期的各个阶段。
软件生命周期
软件生命周期是指软件的产生直到废弃的生命周期。
包括软件的定义及规划,需求分析,软件设计(概要,详细),编码实现,软件测试(单元测试,集成测试,系统测试,验收测试),运行维护
测试用例设计方法
黑盒测试包括:等价类划分、边界值分析、因果图、场景法、正交实验设计法、判定表、驱动分析法、错误推测法、功能图分析法,依据是用户需求规格说明书、详细涉及说明书
白盒测试包括:语句覆盖、判定覆盖、条件覆盖、路径覆盖、条件组合覆盖,依据是代码结构和逻辑
等价类划分:把可能的数据输入集合分为若干子集,每个子集中的子集内的元素对于揭露程序中的错误都是等效的,在每个等价类中取的数据用来测试,比较有代表性。 先划分等价类,“有效等价类”和“无效等价类”,根据划分的等价类编写测试。
边界值分析:选取指定数据集中的边界值进行测试。上点,内点,离点。
设计测试用例的方法
测试用例的组成元素
用例编号
用例标题
功能模块名称
前置条件
输入数据
操作步骤
预期结果
优先级
执行结果
编写人
执行人
其他补充项
BUG描述、评级
对bug的描述尽量简短但要求清晰,对bug出现的条件进行详细的描述,包括输入的测试用例、使用的环境、有没有和其他软件同时运行,以及需要写清bug出现的位置,帮助开发更好定位。
按照用户体验(bug是否很严重的影响用户体验)、影响系统的程度进行评级。
一条bug记录的组成
(1)bug内容
(2)bug发现时间
(3)测试条件(系统配置信息、环境、软件版本、浏览器版本…)
(4)预期结果和实际结果的对比,相关的分析
(5)如何重现这个bug的步骤
(6)这个bug的严重性(会多大程度的影响系统或用户使用)
(7)bug发生的位置
……
瀑布模型和敏捷模型
瀑布模型:
把软件开发模型分为好几个阶段,包括软件计划、需求分析、设计、实现、软件测试、软件运行维护。
具有一种比较明显的分层,每一阶段的结果文档会作为下一阶段的输入,强调文档,整个周期完成的差不多了才能看到结果;
没有迭代和反馈,只能一步一步来,流程没有回头路。不能适应客户不断变化的需求,后期需要改动时成本也比较大
测试比较晚,基本上是在软件完成之后进行的测试
敏捷开发:
按一个短的迭代周期工作,强调“快”,每次迭代交付一些成果,(或者说先做出一个不完美但能实现一定的功能的版本);让客户参与进来,有新需求就,快速响应变化,迭代产生新版本,缩短软件版本的周期。
强调开发软件而不是文档。
特点:让客户参与进来,客户需求的变动和软件有些不符合需求的地方可以第一时间进行了解和改动; 缩短版本周期; 每隔一段时间(一个迭代周期),团队可以在工作方面进行反省和改进,调整自己的行为; 强调开发软件而不是文档,提高编程人员的积极性。
敏捷测试:
以用户需求为中心,在每一个迭代周期都需要进行测试,
基于自动化测试->速度快、敏捷
更强调测试的速度和适应性,侧重计划的不断调整以适应需求的变化
强调面对面的沟通、协作,强调团队的责任,不太关注对缺陷的记录与跟踪。缺陷修复的成本也较低
V模型和W模型
V模型:把测试过程作为在需求分析、系统设计及编码之后的一个阶段,忽视了测试对需求分析,系统设计的验证,需求的满足情况一直到后期的验收测试才被验证。(应该比较多包括系统测试和验收测试)
W模型:测试的活动与软件开发同步进行,测试的对象不仅仅是程序,还包括需求和设计。因为在需求阶段测试就已经介入了,后面每一阶段的开发都需要经过测试,能够尽早发现软件的缺陷,降低debug的成本
Web和app测试的区别
1. 首先是web和app的区别:web是b/s架构的,基于浏览器;app是c/s架构的,必须要有客户端。Web测试中只要更新了服务器,客户端就会同步更新,保证每个用户用的客户端一样;app就不能保证完全一致,因为app客户端需要用户主动更新,如果app测试中修改了服务器,就意味着客户端用户使用的所有核心版本都要进行回归测试
2. 性能方面:web主要看响应速度;app还看电量、流量、CPU、内存…
3. 兼容方面:web基于浏览器,主要看电脑硬件、电脑系统;app依赖于手机或平板,关注的系统主要是安卓和ios,还要关心分辨率、屏幕尺寸
4. App比web测试多一些专项测试:弱网测试,安装、卸载、更新,界面操作、触摸手势等
软件测试流程
需求分析;制定测试计划(在研发计划制定时就应该定好测试计划);设计测试用例;执行测试(包括单元测试、集成测试、系统测试、回归测试、验收测试);测试评估(出报告,确认是否可以上线);面向用户
测试一款产品/一个功能
(角度)
功能:
性能:响应速度、CPU占用,联网的话考虑多用户并发/弱网环境,app的话考虑耗电量
易用性
兼容性:多平台/多系统/多版本
安全:用户名密码有没有保存功能,数据往服务器传是不是加密的,有没有防止一些脚本或者SQL注入攻击
UI:符合大众期望,有无错别字,排版和颜色搭配
稳定性:压力测试、极端条件测试
(查看产品的使用说明书)
软件质量模型的6大特性:
功能性,可靠性,易用性,效率,维护性,可移植性
案例/情景题
以百度搜索为例,设计测试方案
从以下几个角度进行测试
功能测试:
输入搜索信息,点击搜索按钮是否能获取搜索结果,跳到结果界面;
搜索结果界面弹出的信息是不是符合我输入的信息
没有输入信息,按搜索看会有什么结果
对输入框能输入的最大字符数进行边界测试,(假设限制是30个字符),那么分别输入20,30,31个字符的文本进行测试,测试超出输入限制会出现的结果
测试输入敏感词时的搜索结果
输入不同国家语言的搜索结果
查询不到搜索结果的情况显示的结果
从搜索结果界面返回的按钮能不能正常返回
点击百度的标签能不能跳到相关的热搜界面
测试百度的图片搜索能不能正常使用
图片拖曳和上传的功能是否均能实现,粘贴图片网址能不能用
如果粘贴的图片网址不存在是否能给出正确的提示反馈
输入特别大的图会发生什么现象
性能测试:
测试搜索时的响应时间能否符合需求
网速慢的条件下还能不能正常搜索
多用户同时访问,或者一个时间点访问量突然增大的情况,对这些特殊情况进行模拟,测试还能不能进行正常搜索
易用性测试:
使用操作是否简单,是不是输入查询信息之后点击搜索按钮或者按回车就行了;
在输入框输入搜索词的过程中下拉框能否弹出相关的联想搜索(你可能要搜)
输入框有没有保存最近搜索的信息的记录
除了点击搜索按钮进行搜索,测试按回车进行检索的功能
兼容性测试:
多种系统下的多种不同的浏览器下是否能正常显示、正常使用;
在不同的手机浏览器中打开是否能正常显示、正常使用;
各种语言平台下是否都能正常使用
安全性测试:
能不能防止搜索时对数据库的恶意攻击的情况,如SQL注入
UI:
界面设计是否简介,是否符合用户审美
图标能不能正常显示,界面有无错别字
测试用例:上传文件 测试用例:微信扫码点餐 如何测试网站的高并发性(不是很会…)
测试多用户同时访问,访问量的缓慢增加/迅速增加。。。
大量相同类型访问,大量不同类型的访问
服务器角度,能够承受多大的压力(?),客户端角度,数据能否成功得到需要的信息,响应时间怎么样
实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息
一方面保证数据不丢失、一方面保证性能
测试一个前端页面,button按钮不好使,原因,不获取源码的前提下,如何解决(提示接口测试)
因为这是个前端界面,可以按F12打开开发者工具,在network里按钮点击时请求有没有发出去,看状态码,有没有生成新文件之类的,确定是不是连接的问题。
postman模拟发包过去测试也行。
selenium流程、获取元素方法
先import,然后webdriver模拟打开一个浏览器(初始化),获取特定的网址,然后通过获取元素模拟鼠标点击页面上的按钮(或者其他动作,比如在特定的文本框输入特定的内容),(最后quit()一下)
获取元素方法:xpath,css选择器,文本内容…..等等,比如find_element_by_xpath、find_element_by_css_selector、find_element_by_link_text
其他
app登录和网页登录的区别
估计美团外卖一天内的全国订单量
淘宝页面价格显示不出来,该怎么测
如果有一部分用户反馈APP的视频加载不出来,你会从哪里方面去定位问题
在一个产品的周期中,你会怎么安排测试工作
岗位理解题