抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 软件测试面试题合集

软件测试面试题合集

时间:2022-06-18 17:44:16

相关推荐

软件测试面试题

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.态势评估:将安全扫描,道德黑客和风险评估结合起来,已显示组织的总体安全态势。

如果觉得《软件测试面试题合集》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。