软件测试面试题
1.介绍项目2.印象深刻的bug3.Bug的生命周期4.开发不认同BUG怎么办5,影响测试进度的因素6.半路接收一个项目,需要做什么7.测试流程8.进程和线程的区别9.Token和Session的区别10.职业规划11.get和post的区别12.HTTP和HTTPS的区别13.集群,分布式和微服务的区别14.你有过漏测bug的经历吗?15.常用的Linux命令16.浏览器中输入URL会发生什么(即HTTP工作过程)17.内存溢出和内存泄漏的区别18.having和where的区别19.给一个物品,怎么测试,比如杯子20.接口请求不通如何排查21.启动tomcat端口被占用怎么办22.自动化测怎么处理验证码23.App测试和web测试的区别24.Linux下如何查找一个文件路径25.linux下如何结束一个进程26.常见的聚合函数有哪些26.用Jmeter怎么做接口测试27.Jmeter是怎么实现接口之间关联的28.为什么要做接口测试29.线上出现Bug怎么办30.怎么做APP的兼容性测试31.主键,外键,索引有什么区别32.接口响应状态码33.Jmeter参数化的方式有哪些34.Jmeter常用的断言方法有哪些35.怎么设置接口测试用例36.常见的黑盒测试用例设计方法37.什么是安全测试38.安全测试的七种类型1.介绍项目
项目基本情况
项目是一个什么项目,一句话概括,用户量多少,日活多少,项目持续时间,迭代频率。项目有哪几个角色,每个角色有什么功能模块。
项目测试情况
测试人员数,测试数据,自己负责的模块,担任的角色,完成的工作
项目过程中用到的测试工具和框架
比如:XXX项目是一个B/S架构对的web项目,管理基金情况的系统。用户量在20w左右,日活大概10w,项目持续了2年时间,每个月2次迭代。项目包含申请用户,购买基金,赎回基金,基金清盘等模块。一个测试人员,每次迭代大概两周测试,从需求评审,测试用例,测试执行,跟踪bug,测试报告全由我负责。测试过程主要是在页面执行命令,验证数据库数据修改正确,结合日志去发现解决问题。
2.印象深刻的bug
选择的Bug不能太低级例如UI级别,也不能太严重例如生产事故。通过步骤,结果,预期来描述一下Bug,然后分析bug产生的原因,通过查看请求参数,查看响应参数,查看数据库表,查看服务器日志,查看环境网络来排查的。
从这个bug中获得的启发。
3.Bug的生命周期
提交-指派-确认-解决-回归验证-验证通过关闭bug,否则激活
4.开发不认同BUG怎么办
如果是无法重现的,可以先找到服务器日志,然后在测试环境下给开发演示讲解一遍Bug 的出现情况,如果开发能修复bug,就更好。如果开发不能修复bug,将多次尝试下,bug出现率,记录bug,日志等资料发给组长,然后产品,开发,测试大家一起沟通预测,最后没有修复的话,在上线之后时刻关注该模块,一旦出现问题能及时维护。
5,影响测试进度的因素
测试人员的能力—需求文档详细程度—对项目的熟练度—提测质量—开发修复bug速度—测试环境稳定性
首先是测试人员自身的能力,能不能快速定位bug,不漏测,测试速度快。需求文档不详细,会导致开发理解有误,做出来的有偏差,然后测试对需求文档的理解也会不同,导致在测试确认是否为bug产生分歧。测试人员对项目熟悉,操作起来也会快,不需要经常去问。开发做的系统质量高,Bug少,就不用在验证bug上一遍一遍耗费时间。开发解决bug快,就能尽快进行bug后面的功能测试。测试环境稳定性也很重要,有时候部署包,环境就容易出现问题,解决环境问题,等待环境部署好也耗费时间。
6.半路接收一个项目,需要做什么
项目业务流程—文档环境—边看文档边操作—看缺陷库
首先让之前的测试将系统资料发过来,然后查看系统业务思维导图,了解主要业务,其次让之前测试讲解一下,将自己的疑问提出解答,然后根据环境文档将环境布置好,边看文档边使用,最后查看缺陷库。
7.测试流程
提测邮件—需求宣讲—测试要点思维导图—用例编写—用例评审—冒烟测试—需求测试—回归测试—测试报告—测试资料归档—上线
8.进程和线程的区别
进程指的正在运行的应用程序,比如打开微信就是一个进程,线程是进程中一个单一顺序的控制流,比如微信里聊天,朋友圈。
进程有自己独立的地址空间,线程共享进程的地址空间。
进程是系统进行资源分配的最小单位,同一个进程内的线程共享进程的资源。
线程的创建和切换开销比进程小。
线程是CPU调度的基本单位。
9.Token和Session的区别
Session比Token的服务器占用资源大
Session是存储在服务器内存之中的,随着用户量的增加,服务器的压力会越来越大。
Session比Token的安全性低
Session是基于Cookie进行用户识别的,如果是Cookie被截获了,用户就非常容易受到跨站请求伪造(CSRF)的攻击。
Session没有Token的拓展性强
如果使用多服务器进行负载均衡,用户第一次访问是服务器1,存放Session,第二次可能访问的是服务器2,就获取不到Session,判定用户没有访问过。
10.职业规划
熟悉业务和项目—做好本职工作—提升自动化测试技术—资深测试工程师
首先熟悉公司的产品和业务,然后把测试的本职工作做好,其次会提升自己的自动化测试技术,帮助公司实现自动化测试,最后积累经验,学习技术发展成为一位资深的测试工程师。
11.get和post的区别
请求效率(重点)
Get比Post的请求效率更高。Get产生一个TCP数据包,Post产生两个TCP数据包。
安全性
Get是不安全的,在传输过程中,数据被放在请求的URL中,Post相对安全,将请求数据放在body中,但是通过抓包也是可以获取到参数的,想要真正的安全,需要用HTTPS的加密协议。
传输数据量
Get请求数据大小受限于URL长度(1024字节),Post请求数据不受限制。
使用场景
Get主要从服务器上获取数据,例如查看,Post主要用于向服务器提交数据,例如登录。
12.HTTP和HTTPS的区别
安全性
HTTP明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP)数据传输过程是加密的,安全性较好。
证书
使用HTTPS协议需要到CA申请证书,一般免费证书比较少,因而需要一定费用。
响应速度
HTTP页面响应速度比HTTPS快,主要是因为HTTTP使用TCP三次握手建立连接,客户端和服务器需要交换3个包,而HTTPS除了TCP的三个包,还要加上SSL握手需要的9个包,所以一共是12个包。
资源消耗
HTTPS其实就是构建在SSL/TLS之上的HTTP协议,所以HTTPS比HTTP要耗费服务器资源。
13.集群,分布式和微服务的区别
集群是个物理形态,分布式是一个工作方式,微服务是一种架构风格。
分布式:一个业务分拆多个子业务,部署在不同的服务器上。
集群:同一个业务,部署在多个服务器上。
微服务:微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。
(1)分布式是指将不同的业务分布在不同的地方,而集群指的是将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群,而集群并不一定就是分布式的。
(2)分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
(3)系统中的各个微服务可被独立部署,各个微服务之间是松耦合的,每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每一个任务代表着一个小的业务能力。
14.你有过漏测bug的经历吗?
没有出现漏测严重的bug—说一个小问题,因为兼容性,网络等原因导致的问题
我所测试的模块,没有出现过P0和P1级别的bug,但是会有一些很小的问题,例如兼容性的问题,手机品牌,系统版本众多,我们会根据目前的市场占有率,尽量地覆盖主流的机型,但是依然无法保证100%覆盖,在一些小众机型上偶尔会出现一些兼容性的问题,但是都不严重。
15.常用的Linux命令
特别基础的命令不要说,模式:实际业务场景+Linux命令
在搭建环境的过程中,查看进程和服务器有没有起来,会用到ps -ef命令,查看端口会用到netstat命令。查看后台日志,会用tail -f命令,编辑文档会用到vi命令,在文档里面搜索文件会用grep命令。如果不知道日志所在目录,会用find命令进行查找。查看网络通不通,会用到ping,telnet。
16.浏览器中输入URL会发生什么(即HTTP工作过程)
(1)进行DNS的域名解析
(2)建立TCP的连接,发起TCP三次握手
(3)发生一个HTTP的请求
(4)服务器处理相关的请求,并返回处理后的结果
(5)关闭TCP连接
(6)浏览器接收到服务器处理后的结果,开始解析
(7)浏览器将解析后的资源进行请求,并对页面进行渲染呈现给用户
17.内存溢出和内存泄漏的区别
内存溢出通俗的理解就是内存不够,通常在运行大型软件或者游戏的时候,软件和游戏所需要的内存远远超出了主机所安装的内存,这就是内存溢出。内存泄漏
指程序在申请内存之后,无法释放申请的内存空间,可能一次的内存泄漏,影响不大,可以忽略,但是如果内存泄漏堆积,那后果就很严重了,无论有多少内存池,迟早都会被吃光。
18.having和where的区别
用的地方where可以用于select,update,delete以及insert语句中,having只能用于select语句中。
执行顺序
where是在group by之前执行的,having是在group by之后执行的,如果where和having一起使用的话,where会先执行,having会后执行。
子句
where子句的条件表达式,having都可以跟,而having子句当中一些聚合函数,例如求和统计等函数,where不可以跟。
19.给一个物品,怎么测试,比如杯子
界面测试—功能测试—易用性测试—性能测试—兼容性测试—可移植性测试—安全性测试
界面测试:主要关注水杯外观,颜色,设计等方面
外观是否完整
外观是否舒适
颜色搭配及使用是否让人感到舒适
杯子外观大小是否适中
杯子是否有图案,图案是否易磨损
功能测试
水杯是否可以正常装水
水杯是否可以正常喝水
水杯是否有盖子,盖子是否可以正常盖住
水杯是否有保温功能,保温功能是否正常保温
水杯是否会漏水,盖住盖子拧紧后是否会漏水
易用性测试:关注水杯使用是否方便
水杯喝水是否方便
水杯拿起放下是否方便
水杯装水是否方便
水杯携带是否方便
水杯是否有防滑功能
水杯是否清洗方便
水杯装有低温或者高温水时,是否会让手感到不适
性能测试
水杯装满水时,是否会漏出来
水杯最大使用次数
水杯的保温性是否达到要求
水杯的耐寒性是否达到要求
水杯的耐热性是否达到要求
水杯掉落时,是否可以正常使用
水杯长时间放置时,是否会发生泄漏
兼容性测试:主要关注水杯是否可以装其他液体
如果汁,汽油,酒精等
可移植性测试:主要关注水杯放置环境等
将水杯放在常温环境中,使用是否正常
将水杯放在零下的环境中,使用是否正常
将水杯放在高于正常温度的环境中,使用是否正常
20.接口请求不通如何排查
(1)查看IP,端口或者URL是否正确
(2)查看服务器程序内部是否发生错误
(3)查看是否有访问权限,如缺乏token和cookie之类的
(4)如果时浏览器访问,查看host是否正确
(5)查看服务端的项目是否部署好了
(6)查看客户端和服务端的网络是否通的
(7)查看服务器的防火墙是否有拦截
(8)查看客户端是否设置了代理
21.启动tomcat端口被占用怎么办
通过netstat -apn | grep 8080命令,找到8080端口所对应的进程
通过ps -ef命令找到这个进程所属的程序,如果这个程序没有用的话,可以使用kill命令把这个程序杀掉,如果这个程序有用的话,那么就修改现在tomcat端口。
22.自动化测怎么处理验证码
(1)产品上线之前,可以找开发在测试环境把验证码注释掉,在上线之前记得加上验证码
(2)让开发预留一个万能码,只要输入这个万能码就可以登录成功,但是这个只能在测试环境干,在生产环境要记得删掉。
(3)系统如果可以勾选保存用户名和密码,可以通过cookie来跳过登录验证码,使用抓包工具处理即可。
(4)可以使用验证码识别技术,java下有个Tess4j库,python下有个tesserocr库,成功率大多比较低,不是很推荐。
23.App测试和web测试的区别
系统架构
web项目,一般都是B/S架构,App项目,一般都是C/S架构的,用户需要安装客户端进进行测试,web测试只要更新了服务器端,客户端就会同步更新。
性能方面
web只需要关注响应手机,App还需要关注流量,电量,CPU,内存等硬件指标。
兼容性
web需要测试不同浏览器下的兼容性,浏览器不同版本。app测试需要关注分辨率,屏幕尺寸,操作系统的版本,不同厂家的硬件兼容性。
专项测试
相比web测试,app还要考虑安装卸载更新,弱网,触碰手机界面,中断。
24.Linux下如何查找一个文件路径
(1)可以用find / -name命令。比如find / -name test.log 可以全局查找test.log在系统中的路径
(2)可以用locate test.log
locate命令的效率比find的效率高很多,因为它是基于locatedb数据库搜索查找的。
25.linux下如何结束一个进程
利用ps -ef | grep,找到进程ID,然后kill -9结束进程
26.常见的聚合函数有哪些
SUM() 求和
AVG() 平均值
COUNT() 计数
MAX() 最大值
MIN() 最小值
26.用Jmeter怎么做接口测试
(1)根据开发提供接口文档,编写接口测试用例
(2)利用Jmeter做接口测试,添加线程组,HTTP请求,在HTTP请求中,添加对应的IP,port,url,请求参数。
(3)添加断言
(4)添加查看结构树
(5)执行用例
(6)查看结果,验证接口返回与预期是否一致
27.Jmeter是怎么实现接口之间关联的
有两种方式,正则表达式提取器和Json提取器。
比如说我们要获取一个token,可以把获取到的token值赋予一个变量,在下一个接口调用这个变量即可。
如果需要提取的文本时页面上某元素的属性值,建议使用json提取器;
如果需要提取的文本在页面上的位置不固定,或者不是元素的属性,建议使用正则表达式提取器。
28.为什么要做接口测试
(1)提前介入测试,尽早发现问题
现在的很多系统,都是前后端分离的,前端和后端的工作进度,很多时候可能不一样,为了尽早的进行测试,尽早的发现更多的问题,在前端界面还没有开发完成的情况下,只要后端的接口开发完了,我们就可以提前做这个测试了,这其实也叫测试左移,再结合自动化的技术,就可以极大地提高我们测试的工作效率。
(2)保证系统的安全性
基于安全的考虑,只依赖前端性的限制,已经完全不能满足系统的安全要求,毕竟绕过前端验证太容易了,所以我们还要做后端验证,也就是说要从接口进行验证一遍。
29.线上出现Bug怎么办
(1)评估Bug的严重程度以及影响范围
评估是否为核心功能的Bug,是否影响大批量的用户。
(2)确定修复方案:停服?回滚?线上修复?
比较严重的且影响范围比较大,比如无法下单,一般采取回滚。
一般的bug,比如页面兼容问题,可以立马改完验证后上线。
(3)追责
测试用例未覆盖到,原型文档上未说明,测试环境无法模拟,其他平台修改接口未通知。
如果是后面3个原因,那么应该说明原因,并反馈给相关负责人,及时规范流程。如果是测试用例未覆盖,主动承担责任,补充用例库,及时总结,后续避免犯同样错误。
30.怎么做APP的兼容性测试
一般优先覆盖主流
(1)操作系统
安卓系统:7.x , 8.x, 9.x, 10.x版本
IOS系统:12.x , 13.x , 14.x 版本
(2)屏幕分辨率
安卓机:1989,1280720,23401080等,尺寸5.x,6.x英寸
IOS:22081242,1334750,24361125等,尺寸5.5-6.5英寸
(3)厂家
一般会根据设备市场的占有率和自身产品使用的数据,来挑选相应的设备
(4)网络
wifi,3G,4G,5G等
31.主键,外键,索引有什么区别
(1)主键:唯一标识一条记录,不能有重复,不能为空
(2)外键:是另一张表的主键,外键可以重复,也可以为空
(3)索引:不能重复了,可以为空。主要对数据库中的某些关键词进行存储,类似于数据中的目录,提高查询排序的速度。
32.接口响应状态码
1**:表示请求已接收,继续处理
2**:成功
3**:重定向,要完成请求必须进行更进一步的操作
4**:客户端错误,请求有语法错误或请求无法实现
5**:服务器错误
33.Jmeter参数化的方式有哪些
(1)CSV Data Set Config
在配置元件中添加,适合场景参数范围较大的场景,方便用户随时修改参数数据,使用较多的就是参数化用户名和密码的场景。
(2)函数助手
是Jmeter自带的函数,适合生成随机数的场景,例如生成随机字符串,随机日期,随机数字等。
(3)用户自定义参数
在配置元件中添加,适用于在测试计划中参数不经常变化的场景,比如设置host,端口号,url等。
(4)用户参数
在前置处理器中添加,适用于参数取值范围很小的场景,一般会将登录的用户账号和密码等作为用户参数。
34.Jmeter常用的断言方法有哪些
(1)响应断言
最常用的断言方法,主要对响应结果中的文本内容进行断言。比如响应结果是否包含指定的值,或者是否等于指定的值。响应断言可以适用各种返回类型的响应结果。
(2)JSON断言
它一般用于断言某个字段值是否等于指定的值。只能针对响应结果为JSON格式的。
(3)持续时间
通常用于做性能测试,一般用于检查HTTP请求的响应时间是否超过预期值。
(4)beanshell断言
可以用于更复杂的个性化需求,使用灵活,功能更强大。
35.怎么设置接口测试用例
(1)参数校验
主要包含:参数必填项校验,组合可选参数,枚举变量覆盖所有枚举值,参数的顺序,参数的类型,参数有/为空/为null,参数边界值校验,参数包含特殊字符等。
(2)业务功能测试
多接口组合测试,验证某个业务功能点
(3)安全测试
验证传输数据是否加密,身份权限,密码的规则是否符合需求。
(4)异常场景
重复提交,不存在的参数值
36.常见的黑盒测试用例设计方法
(1)等价类划分法
有效等价类(符合要求的数据),无效等价类(不符合要求的数据)
(2)边界值分析法
通常边界值分析法是作为等价类划分法的补充,去正好等于,刚刚大于或小于边界的值作为测试数据
(3)因果图法
输入条件的各种组合,设计测试用例,适合用户检查程序输入条件设计的各种组合情况
(4)判定表驱动法
判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。判定表通常由4个部分组成:条件桩,动作桩,条件项,动作项。
(5)场景法
场景主要包括4种主要的类型:正常的用例场景,备选的用例场景,异常的用例场景,假定推测的场景。
37.什么是安全测试
安全测试是一种软件测,可以发现软件应用程序中的漏洞,威胁和风险,可以防止来自入侵者的恶意攻击。目的是为了提升产品的安全质量,降低修复成本,评估系统的安全等级。
如果产品有高危漏洞,不小心被黑客袭击,导致服务器瘫痪或资金损失,重要数据泄漏和丢失,或者服务器资源被黑客恶意利用,会导致公司业务无法正常运转或损失惨重。
38.安全测试的七种类型
1.漏洞扫描:自动软件针对已知的漏洞扫描系统。
2.安全扫描:手动或自动识别网络和系统弱点的技术。
3.渗透测试:渗透测试是关于安全测试的,它有助于识别系统中的漏洞。
4.风险评估:包括对系统中可能的风险进行分析,风险分为低,中,高三种。
5.安全审计:完成对系统和应用程序的检查,以检测漏洞。
6.道德黑客:为检测系统中的缺陷,而非个人利益对系统进行的黑客攻击。
7.态势评估:将安全扫描,道德黑客和风险评估结合起来,已显示组织的总体安全态势。
如果觉得《软件测试面试题合集》对你有帮助,请点赞、收藏,并留下你的观点哦!