掉了两根头发总结出来的,软件测试面试合集含答案

软件的生命周期(基础)

计划阶段-〉需求分析-〉设计阶段-〉编码->测试->运行与维护

测试流程有啥(还是基础)

1)、测试需求分析阶段:阅读需求,理解需求,主要就是对业务的学习,分析需求点,参与需求评审会议。

2)、测试计划阶段:主要任务就是编写测试计划,参考软件需求规格说明书,项目总体计划,内容包括测试范围(来自需求文档),进度安排,人力物力的分配,整体测试策略的制定。风险评估与规避措施有一个制定。

3)、测试设计阶段:主要是编写测试用例,会参考需求文档(原型图),概要设计,详细设计等文档,用例编写完成之后会进行评审。

4)、测试执行阶段:搭建环境,执行冒烟测试(预测试)-然后进入正式测试,bug管理直到测试结束。

5)、测试评估阶段:出测试报告,确认是否可以上线。

项目中的测试流程(项目经理)

需求评审(开发人员,产品经理,测试人员,项目经理进行)---需求确定(需求文档及原型图版本确定);

开发设计文档(开发人员在开始写代码前就能输出设计文档:开发计划、架构设计、数据库设计、接口文档);

测试计划、策略确定,编写测试用例---测试计划、用例评审;

接到测试版本后执行测试用例(补充维护用例);

提交bug---开发人员修改;

回归测试(可能又会发现新问题,再按流程开始跑)

验收测试后编写各项报告。

测试用例设计方法(写没写过用例)

白盒测试:逻辑覆盖、循环覆盖、基本路径覆盖

黑盒测试:边界值分析法、等价类划分、错误猜测法、因果图法、状态图法、测试大纲法、随机测试、场景法(老司机靠脑补大法)

软件测试分为几个阶段 各阶段的测试策略和要求(又是基础)

测试过程会依次经历单元测试、集成测试、系统测试、验收测试四个主要阶段

单元测试:是针对软件设计的最小单位(对于功能测试就是模块)

集成测试:是将模块按照设计要求组装起来进行测试,主要目的是发现与接口有关的问题。

系统测试:是在集成测试通过后进行的,目的是充分运行系统,验证各子系统是否都能正常工作并完成设计的要求。

验收测试:以需求阶段的《需求规格说明书》为验收标准,测试时模拟实际用户的运行环境

bug描述与周期(对--基础)

1、bug标题要简洁明了,重新明确

2、要写明问题出现的前提条件

3、操作过程要按步骤写清楚

4、要写实际效果和预期效果

5、要标明bug出现的概率

6、提供必要的截图和日志,比较复杂的操作步骤提供视频

7、bug等级要分好类,致命性bug、严重bug、一般性bug、建设性意见

8、出现bug的软件版本号

9、bug出现的模块

发现》提交》指派》研发确认》研发修复》回归验证》是否通过验证》关闭

测试结束的标准(emmmm)

1、用例全部测试完成。

2、覆盖率达到标准。

3、缺陷率达到标准。

4、其他指标达到质量标准

你在测试中发现了一个bug,但是开发人员认为这不是一个bug,你应该怎样解决(坑爹的沟通能力)

1、将问题提交到缺陷管理库里面进行备案。

2、要获取判断的依据和标准:

3、根据需求说明书、产品说明书、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据;

4、如果没有文档依据,可以根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;

5、与设计人员、开发人员和客户代表等相关人员探讨,确认是否是缺陷;

最后、抛给领导等结果~

快速区分bug来源以及常见状态码(12345)

哥,咱们一起看报文,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对;请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题,状态码如下:

状态码 原因短语

1XX Informational (信息性状态码)接收的请求正在处理

2XX Success (成功状态码)请求正常处理完毕

3XX Redirection (重定向状态码)需要进行附加操作以完成请求

4XX Client Error(客户端错误状态码)服务器无法处理请求

5XX Server Error (服务器错误状态码)服务器处理请求出错

http与https区别(加密传输)

http协议和https协议的区别:传输信息安全性不同、连接方式不同、端口不同、证书zhuan申请方式不同、传输信息安全性不同

1、http协议:是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息;

2、https协议:是具有安全性的ssl加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全。

二、连接方式不同

1、http协议:http的连接很简单,是无状态的;

2、https协议:是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。

三、端口不同

http协议:使用的端口是80; https协议:使用的端口是443。

四、证书申请方式不同

http协议:免费申请 https协议:需要到ca申请证书,一般免费证书很少,需要交费

get和post的区别(更详细的在后面的文章中,其实问put更好)

a、GET请求在URL中传送的参数是有长度限制的,而POST没有

b、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

c、GET参数通过URL传递,POST放在Request body中。

d、GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

e、GET请求只能进行url编码,而POST支持多种编码方式。

f、GET请求会被浏览器主动cache,而POST不会,除非手动设置。

g、GET产生的URL地址可以被Bookmark,而POST不可以。

h、GET在浏览器回退时是无害的,而POST会再次提交请求。

Alpha测试与beta的区别(基础++)

Alpha测试在系统开发接近完成时对应用系统的测试;测试后仍然会有少量的设计变更。这种测试一般由最终用户或其它人员完成,不能由程序员或测试员完成。由一个或多个用户在开发环境下进行测试。

Beta测试当开发和测试根本完成时所做的测试,最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其它人员完成,不能由程序员或测试员完成。由一个或多个用户在用户实际环境下进行而是。

常用的测试工具(可以学学~)

(fiddle、jmeter、postman、roadrunner、selenium、appium、jenkins、git、svn、禅道、xss平台、mysql、monkey等)

fiddle:常用抓包工具,使用方式都是万变不离其宗和jmeter代理服务器一样(详细在下面)

jmeter:比较强大的压测工具,我写了个专栏讲解,感兴趣可以看一下?spm=1001.2014.3001.5482

postman:最简单的接口测试工具,个人觉得很一般...推荐jmeter-.-

monkey:瞎几把点系列 ?spm=1001.2014.3001.5482

工具这东西不是一两句说的清的,后面我会慢慢完善编辑专栏进行分析哈~~~

接口测试常见问题(emmm基础)

1、通过性验证,说白了就是传递正确的参数,是否返回正常的结果

2、参数组合,因为参数有必传和非必传,参数的类型和长度,以及传递时可能业务上的一些限制,所以在设计用例时,就要排列组合这些情况,保证所有情况都能覆盖到

3、接口的安全性,这个又分为几种情况:

1)绕过验证,比如提交订单时,在传递商品价格参数时,修改商品价格,就要看后端有没有验证了。或者我支付时,抓个包将订单金额一改,如果能以我改后的金额支付,那这个借口就有问题了。

2)绕过身份验证,就是某个功能只有有特殊权限的用户才能操作,那我传递一个普通的用户,是不是也能操作呢

3)参数是否加密,这个关系到一些账户的安全,比如我们在登录一些网站时,它要将我们的登录信息进行加密,如果不加密我们的信息就会暴露,危害性极大。

4) 密码安全规则,设置密码时复杂程度的校验。

依赖性接口测试:上下游接口依赖性(+++1)

用一个全局变量来处理依赖的数据,比如登录后返回token,其它接口都需要这个token,那就用全局变量来传token参数

依赖于第三方数据的接口如何进行测试最正确的回答是mock,当然我们简单点去搞也一

1、获取上一个接口的返回值

2、将返回值设置成环境变量或者全局变量

3、设置下一个接口的参数形式

依赖于登录的接口如何处理?

登录接口依赖token的,可以先登录后,token存到一个yaml或者json或者ini的配置文件里面

后面所有的请求去拿这个数据就可以全局使用了,如果是cookies的参数,可以用session自动关联

接口测试用例的举例:登录

参数是否必填、参数间是否存在关联、参数取值范围 业务规则

phoneNumber和password参数正确,登陆成功

phoneNumber参数正确,password类型不为String, 登陆失败

phoneNumber参数正确,password参数缺失, 登陆失败

password参数正确,phoneNumber超过11位,登陆失败

password参数正确,phoneNumber不为String,登陆失败

password参数正确,phoneNumber参数缺失,登陆失败

用户未注册,返回登陆失败 / 密码错误,返回登陆失败

参数故意传入空字符串或null, 可看是否有进行处理

常见面试中坑爹用例设计:如何测试一个纸杯=.=(有时候是花盆、桌子)

功能度:用水杯装水看漏不漏;水能不能被喝到

安全性:杯子有没有毒或细菌

可靠性:杯子从不同高度落下的损坏程度

可移植性:杯子在不同的地方、温度等环境下是否都可以正常使用

兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等

易用性:杯子是否烫手、是否有防滑措施、是否方便饮用

用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述

疲劳测试:将杯子盛上水(案例一)放24小时检查泄漏时间和情况;盛上汽油(案例二)放24小时检查泄漏时间和情况等

压力测试:用根针并在针上面不断加重量,看压强多大时会穿透

APP测试哪些方面(对没错还是基础)

权限测试、安装、运行、卸载测试、UI测试、功能测试、性能测试、中断测试、兼容测试、安全测试、回归测试、升级更新测试、用户体验测试

fiddler抓包使用(没错,有幸被一个步骤一个步骤的问过)

web:打开fiddler工具后,再去浏览器打开网页,fiddler会自动抓包,抓取请求响应数据。他会自动设置为本地代理,还可以设置抓取https协议的包。【亲~浏览器F12了解下】

手机:在手机上的网络设置里,设置代理服务器。就是把fiddler作为代理服务器(fiddler自身要设置为支持远程连接),手机连接fiddler工具,所以手机代理服务器设置页面要输入打开fiddler工具的电脑的ip地址和fiddler的端口号8888,好让手机能连接fiddler,通过fiddler来访问互联网。

什么是性能测试=.=(千言万语emmm)

系统在一定的压力情况下,查看cpu,内存,磁盘,网络带宽,TPS、响应时间、并发用户数、等各项指标,通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求,就是在特定的运行条件下验证系统的能力状况。

什么是负载测试(无力反驳)

负载测试主要是考察软件系统在既定负载下的性能表现。就是站在用户的角度去观察一定条件下软件系统的性能表现。期望结果是用户的性能指标需求得到满足。性能指标一般体现为响应时间、并发量等。

测试环境搭建(我怕麻烦简单bb下)

1、通过winscp上传tomcat,MySQL安装包,JDK(Java开发环境工具包)到linux下

2、利用tar -zxvf解压缩包命令对jdk,tomcat,mysql进行解包、安装,再配置jdk环境变量。

3、把war包(web程序)放到tomcate指定目录webapps下,再启动服务器即可。(输入startup.sh的路径,直接回车即可运行)