在当今竞争激烈的软件测试职场中,想要获取一份满意的offer,就要在面试前做足充分准备,不断挖掘用人单位岗位需求,才能做到“知己知彼,百战不殆。”

避免面试过程中间“采坑”,专门为各位即将入行软件测试的小伙伴们准备了一份最全的面试问题及详解答案,助你offer手到擒来!

NO.1  你在测试中发现了一个bug,但是项目经理认为这不是一个bug,你应该怎样解决?

首先,将问题提交到缺陷管理库里面进行备案。然后,要获取判断的依据和标准:

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

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

• 根据用户的一般使用习惯,来确认是否是缺陷;

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

合理的论述,向测试经理说明自己的判断的理由,注意客观、严谨,不参杂个人情绪。

等待测试经理做出最终决定,如果仍然存在争议,可以通过公司政策所提供的渠道,向上级反映,并由上级做出决定。

NO.2  给你一个网站,你如何测试?

首先,查找需求说明、网站设计等相关文档,挖掘测试点

制定测试计划,确定测试范围和测试策略,一般包括以下几个部分:功能性测试、UI测试、性能测试、数据库测试、安全性测试、兼容性测试、用户体验测试

测试用例设计:

功能性测试可以包括,但不限于以下几个方面:

• 链接有效测试。链接是否正确跳转,是否存在空页面和无效页面,是否有不正确的出错信息返回。

• 提交功能的测试。

• 多媒体元素是否可以正确加载和显示。

• 多语言支持是否能够正确显示选择的语言等。

界面测试可以包括但不限于以下几个方面:

• 页面是否风格统一,美观

• 页面布局是否合理,重点内容和热点内容是否突出

• 控件是否正常使用

• 对于必须但未安装的控件,是否提供自动下载并安装的功能

• 文字检查

性能测试一般从以下两个方面考虑:

压力测试;负载测试、强度测试、稳定性测试

数据库测试要具体决定是否需要开展。数据库一般需要考虑连接性,对数据的存取操作,数据内容的验证等方面。

安全性测试:

• 基本的登录功能的检查

• 是否存在溢出错误,导致系统崩溃或者权限泄露

• 相关开发语言的常见安全性问题检查,例如SQL注入等

• 如果需要高级的安全性测试,确定获得专业安全公司的帮助,外包测试,或者获取支持

兼容性测试,根据需求说明的内容,确定支持的平台组合:

• 浏览器的兼容性;

• 操作系统的兼容性;

• 软件平台的兼容性;(第三方软件)

• 数据库的兼容性

开展测试,并记录缺陷。合理的安排调整测试进度,提前获取测试所需的资源,建立管理体系(例如,需求变更、风险、配置、测试文档、缺陷报告、人力资源等内容)。

定期评审,对测试进行评估和总结,调整测试的内容。

NO.3  一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?

• 300个用户在一个客户端上,会占用客户机更多的资源,而影响测试的结果。线程之间可能发生干扰,而产生一些异常。

• 300个用户在一个客户端上,需要更大的带宽。

• IP地址的问题,可能需要使用IP Spoof来绕过服务器对于单一IP地址最大连接数的限制。

• 所有用户在一个客户端上,不必考虑分布式管理的问题;而用户分布在不同的客户端上,需要考虑使用控制器来整体调配不同客户机上的用户。同时,还需要给予相应的权限配置和防火墙设置。

NO.4  什么是测试用例?什么是测试脚本?两者的关系是什么?

• 为实施测试而向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定的集合。

• 测试脚本是为了进行自动化测试而编写的脚本。

• 测试脚本的编写必须对应相应的测试用例

NO.5  简述什么是静态测试、动态测试、黑盒测试、白盒测试、α测试、β测试

• 静态测试是不运行程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程。  

• 动态测试是实际运行被测程序,输入相应的测试实例,检查运行结果与预期结果的差异,判定执行结果是否符合要求,从而检验程序的正确性、可靠性和有效性,并分析系统运行效率和健壮性等性能。

• 黑盒测试一般用来确认软件功能的正确性和可操作性,目的是检测软件的各个功能是否能得以实现,把被测试的程序当作一个黑盒,不考虑其内部结构,在知道该程序的输入和输出之间的关系或程序功能的情况下,依靠软件规格说明书来确定测试用例和推断测试结果的正确性。

• 白盒测试根据软件内部的逻辑结构分析来进行测试,是基于代码的测试,测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量,一般黑盒测试由项目经理在程序员开发中来实现。

• α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成。

• β测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。

NO.6  如何测试一个纸杯?

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

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

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

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

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

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

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

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

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

如何找到并发数、平均响应时间、tps的最佳平衡点?

先回顾下基础,性能测试常用的指标有三个:并发、响应时间、tps

并发:跑道里参加赛跑的人数(这里的并发是广义的并发,即同一个时间段内对系统发起的请求数量)

响应时间:也就是平均每个事务的处理时间

tps:每秒处理的事务数

需求指标:分为单指标和多指标

单指标:一般是单测试tps,或者根据并发测试响应时间,或者根据响应时间测试并发,只考虑单指标的很少

多指标:要同时考虑多个指标,比如tps + 响应时间(<1s)

这个题,意思就是要找到这三个指标同时最佳值的点,即:不能只追求并发数大,而忽略tps,所以,这是一个多指标性能需求,假设是这样的:要求响应时间1秒以内,并发数要尽可能的多,tps要尽可能的大。

是不是依旧有点懵逼?先画一个简单的示意图,方便大家理解:

随着并发数增加,响应时间肯定是越来越高,所以,上面红线是响应时间;

随着并发数增加,tps是先升高到峰值,然后下降(也可能是一直平稳,或者平稳一段时间再下降),所以,上面蓝线是tps;

紫色表示并发用户数;

该怎么去找这个最佳平衡点呢?

1. 尽可能多的做不同并发数下的压测,记录下响应时间(1s以内)和最大tps,当然,服务器端,各个服务器的资源利用率在可接受范围内(每个公司不一样,我们是90%以内);

2. 然后根据获取到的不同并发下的指标数据(并发数、tps、响应时间),画出上图,关注右侧的交点,即tps下降的地方和响应时间的交点,这个点的tps最大,如果响应时间在1s以内,此时并发数也是比较大的,这个点就可以认为是三个指标都不错的平衡点(当然,我这里把tps放在第一位优先考虑了,这个就看大家最在乎哪个指标了,排个优先级)。

如果响应时间大于1s,最佳平衡点就往左找,找到响应时间为1秒的点,此时对应的tps和并发值,就是最佳平衡点。总之,测试采样越多,获取的平衡点就越准确。

另外,如果是用loadrunner作为并发工具,并发过程中是可以增加或者减少并发用户数的,就不用必须压完一次,再调整并发数继续压,但是,loadrunner并发过程中调整了并发数,还是要尽可能跑久一点,比如10-15min。

最全软件测试面试题_软件测试基础