软件测试面试题整理

1、请简单介绍下最近的这个项目

薪资考勤管理系统主要是用来管理员工考勤和薪资的,该系统主要包括考勤管理模块和薪资管理模块。公司考勤员通过考勤模块可以进行日历初始化,设置班次和轮班组,考勤登记,考勤变动,自动排班,手动排班,考勤分析,考勤汇总,考勤封账等。薪酬福利专员通过薪资模块进行薪资开启,福利开启,调整社保基数和比例,薪资变动,福利变动,薪资计算, 薪资套设计,获取考勤数据(旷工时数,加班时数,请假时数等),薪资封账等。

注意:项目描述完后,面试官会问你具体的业务流程以及某个功能你这边具体是怎么测试的。

【参考】如何在面试中介绍自己的项目经验
https://www.cnblogs.com/JavaArchitect/p/7586949.html

2、请你讲下考勤管理和薪资管理的流程

3、请你讲下考勤登记你是怎么测的?

思路:主要是从功能(包括界面)角度去讲(要能体现边界值、等价类这些测试思想),功能测试点说完后,可以适当补充兼容性,安全性,以及性能这些方面的测试点

检查考勤登记的界面是否跟原型图一致,主要包括:
1)列表页面(删除按钮和确认对话框,编辑按钮,添加按钮)
2)编辑页面
3)确认成功和失败的信息提示框
4)删除成功和删除失败的信息提示框
考勤登记编辑页的测试点主要如下:
1)必填的字段输入为空的情况
2)输入的内容过长的情况
3)输入的内容包含各种特殊字符(比如单引号,双引号等)
4)如果是单行文本框,输入的内容包含换行符的情况
5)输入的内容是空格的情况
6)检查不允许编辑的字段能否被修改
7)检查字段的默认值是否正确
8)能否被JS脚本注入(安全性)
9)检查下拉框里面的选项列表是否正确(是否有遗漏,是否出现重复)
10)提交成功后,检查显示出来的数据是否与之前输入的数据一致(是否显示出来的还是原来的)
11)输入中文内容,提交成功后,是否会出现中文乱码
12)记录修改成功后,使用更新后的值作为查询条件,看下这条记录能不能被搜索出来
13)重复提交的情况(连续点击两次提交按钮)
14)提交失败的各种情况,提示信息是否正确
考勤登记删除的测试点:
1)点击删除按钮的时候,是否会弹出确认对话框
2)单个删除成功的情况
*3)单个删除失败的各种情况,提示信息是否正确
*4)批量删除的情况
*5)重复删除的情况
考勤登记查询的测试点:
1)查询成功的情况
2)查询失败的各种情况
兼容性的测试点:
使用各种主流的浏览器进行测试
性能的测试点:
1)编辑功能的响应速度如何
2)删除功能的响应速度如何
3)查询功能的响应速度如何
安全性的测试点:
1)非登录状态不能通过URL地址的方式使用考勤登记功能
2)非管理员用户登录进来没有权限使用考勤登记功能

4、白盒测试与黑盒测试的比较

1)黑盒测试关注的是输入和输出(检查软件的运行结果)
2)白盒测试关注的是程序的内部结构(检查代码逻辑的正确性)
3)黑盒测试简单(时间成本低,容易上手),白盒测试难(时间成本高)
4)白盒测试能够发现更多的问题(有些比较有隐蔽性的缺陷不能通过黑盒测试发现)
5)黑盒测试的代码覆盖率相对比较低

【参考】黑盒测试与白盒测试的区别
https://blog.csdn.net/hht006158/article/details/82799285

5、并发测试,你们一般是测多少个?

模拟两个用户并发的场景比较麻烦,需要借助测试工具的,比如loadrunner,jmeter.
可以跟他说说大概的思路
1)如果是针对功能的话,并发数量可以很少(比如就2个)。比如,两个用户同时修改同一条数据,会出什么情况,这就是一个功能测试点。
2)如果是针对性能的话,并发数量就会很多(比如50个)。比如,50个用户同时订票,平均响应时间多少,这个就是性能测试点。
3)使用loadrunner模拟并发的话,先录制脚本,设置事务,文本检查,集合点,创建场景(设置虚拟用户数量和持续时间),最后运行场景和分析报告
4)使用jmeter模拟并发的话,先抓包分析请求,然后构造请求,设置线程数量和循环次数,添加监听(查看结果树和聚合报告),最后运行测试和分析结果

注意:一台电脑能够模拟的虚拟用户数量毕竟是有限的(最好不要超过100个)。

【参考】乐观锁解决并发问题
https://www.jianshu.com/p/6b7e2fa282ff

6、请说出软件测试流程及对应的开发阶段,及各阶段提交件。

image.png
1)单元测试对应详细设计阶段,产出:单元测试计划,单元测试用例,缺陷报告,单元测试报告
2)集成测试对应概要设计阶段,产出:接口测试计划,接口测试用例,缺陷报告,集成测试报告
3)系统测试对应需求分析阶段,产出:系统测试计划,系统测试用例,系统测试用例评审记录,缺陷报告,系统测试报告
4)验收测试对应用户需求阶段,产出:验收测试计划,验收测试用例,缺陷报告,验收报告
系统测试计划主要包括:
1)功能测试的范围,即测试哪些功能点(发布上线的功能点)
2)兼容性测试的范围,即兼容哪些主流的浏览器,移动设备,以及分辨率
3)性能测试的范围,比如:检查请求的响应速度(页面的加载速度),检查测试服务器资源占用情况(cpu使用率,内存使用率,磁盘读写效率),检查安卓测试机和iOS测试机的资源占用情况(cpu使用率,内存使用率,耗电,流量,散热情况)
4)安全性测试的范围,比如:检查普通会员是否拥有vip资源的访问权限,检查非登录状态无法对资源进行评论,发送弹幕等
5)稳定性测试的范围,比如:使用monkey测试安卓app的稳定性
6)第一轮系统测试的起止时间
7)第二轮系统测试(回归测试)的起止时间

注意:实际工作中主要是做功能方面的测试。如果版本更新有涉及性能方面的需求,才需要定义性能测试的范围。比如:本次版本更新对搜索的性能做了优化,则需要测试搜索的性能。另外,如果版本更新有涉及安全方面的需求,则需要定义安全性测试的范围。

7、系统测试及验收测试的流程

image.png

8、你是否参与过需求分析?你提了什么问题?

需求分析阶段,开发人员和测试人员都要对需求进行理解,测试人员主要是通过阅读需求文档(可以通过svn客户端从公司的svn服务器下载)对需求进行理解,测试人员可以针对需求文档中存在的问题向需求经理(负责调研客户需求,编写需求文档)提问。
需求文档一般会存在哪几类问题呢,比如:
1)需求经理对功能点的描述不够准确,存在歧义,用词模棱两可
2)需求经理对功能点的描述不够具体,不完整,导致测试人员无法根据需求描述来判断软件的运行结果是否正确

【思考】请针对考勤管理系统的需求文档,提出1~2个问题。

【参考】浅谈需求:软件需求的分类到底有哪些?
http://www.woshipm.com/pmd/886458.html

9、功能测试用例的组成

1)用例编号
2)用例标题
3)输入
4)测试步骤
5)期望结果

【参考】微信支付的测试用例
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_1&index=1
image.png

10、功能测试点怎么写

思路:把各种成功失败的情况列举出来(考虑到)。测试点的设计最好能细到每个测试点对应一个测试用例。如果一个测试点对应好几个测试用例,那这个点写得就比较粗了。

11、怎么定位缺陷

1)通过抓包工具抓包分析
2)通过查看客户端(浏览器控制台)的日志进行分析(使用exception, error, fail等关键字进行过滤)
3)通过下载查看服务器上的日志进行分析(使用exception, error, fail等关键字进行过滤)
为什么测试人员要定位缺陷?
定位缺陷其实是开发人员的责任,有些软件公司要求测试人员把缺陷发生时的异常日志截图并放到缺陷报告里,这样就可以节约开发人员排查问题原因的时间。
注意:
1)测试人员如果要看测试服务器上的日志的话,需要到测试服务器上把相关的配置文件里面的debug配置项设置为true,然后重启IIS或tomcat
2)生产环境上不要把debug日志开关打开,否则日志文件会很大,比较占用磁盘空间。
【参考】关于BUG的定位
https://www.jianshu.com/p/d80e19cb9764

12、如何判断缺陷是属于前端的还是后台的

根据客户端日志和测试服务器上的后台日志进行分析
根据经验(凭感觉)判断
1)界面文案,界面样式,排版问题(比如:显示字体的太小,文本内容过长导致拆行显示,界面文案有错别字等)属于前端的,缺陷报告应提交给前端开发
2)浏览器兼容性方面的问题,一般也属于前端
3)如果是前端逻辑有问题,则属于前端。比如:表单里面的必填项没有填写,浏览器也可以成功提交数据给后台
4)界面上显示的数据错误,一般是后台问题
5)如果是后台逻辑有问题,则属于后台。比如:余额不足,取款金额大于余额,能够取款成功
6)app客户端出现崩溃(闪退),一般属于前端。

13、缺陷报告的组成

image.png
image.png

14、功能测试报告的组成

1)测试范围及目的
image.png
2)测试执行的时间
image.png
3)用例执行结果
image.png
4)缺陷分布(分别按严重程度,功能模块,问题类型划分)
image.png
image.png
image.png
5)软件评估及测试总结
image.png

15、如何保证测试的覆盖率

https://www.cnblogs.com/TestWorld/p/5211043.html

16、 数据库SQL查询

顾客信息和商品信息
image.png
顾客购买记录
image.png
查询出购买过宝洁产品的用户详细信息
思路:
1)使用商品编号相等作为条件将商品表和购买记录表进行连接
2)使用顾客编号相等作为条件将顾客表和购买记录表进行连接
3)使用供应商为宝洁作为条件查询出购买过宝洁产品的用户信息

select distinct c.* from product prd,purchase pcs,customer c
where prd.productid = pcs.productid and pcs.customerid = c.customerid 
and prd.provider = '宝洁';

查询出牙膏销量最高的供应商
思路:
1)使用牙膏作为条件筛选出牙膏的购买记录
2)对筛选出来的购买记录按照供应商进行分组
3)使用聚合函数SUM计算出每个组里面的购买总量
4)根据购买总量进行排序(从大到小),第1条记录就是销量最高的供应商
5)使用top 1筛选出第1条记录

 --查询出牙膏销量最高的供应商(适用SQL Server)
 SELECT TOP 1 t2.provider,SUM(t3.quantity) total_amount 
 FROM purchase t3,product t2 
 where t2.productid=t3.productid and t2.p_category='牙膏' 
 GROUP BY t2.provider ORDER BY total_amount DESC;
--查询出牙膏最高销量是多少
SELECT MAX(total_amount) FROM
 (SELECT t2.provider,SUM(t3.quantity) total_amount 
 FROM purchase t3,product t2 
 where t2.productid=t3.productid and t2.p_category='牙膏' 
 GROUP BY t2.provider) x;
 --查询出牙膏销量最高的供应商
 SELECT * FROM 
 (SELECT t2.provider,SUM(t3.quantity) total_amount 
 FROM purchase t3,product t2 
 where t2.productid=t3.productid and t2.p_category='牙膏' 
 GROUP BY t2.provider) y WHERE total_amount = (SELECT MAX(total_amount) FROM
 (SELECT t2.provider,SUM(t3.quantity) total_amount 
 FROM purchase t3,product t2 
 where t2.productid=t3.productid and t2.p_category='牙膏' 
 GROUP BY t2.provider) x);

所有的牙膏商品单价增加10%

 --所有牙膏商品的单价增加10%
 select productname,unitprice*1.1 as price,unitprice 
 from product where p_category='牙膏';
 --所有牙膏商品的单价增加10%
 UPDATE product SET unitprice=unitprice*1.1 
 WHERE p_category='牙膏';

查询出从未被购买的商品
思路:
1)使用子查询查出被购买过的商品
2)主查询根据商品编号不在子查询查出来的范围里面作为条件查出从未被购买的商品

--查询出从未被购买的商品
SELECT * FROM product 
WHERE productid not in (select DISTINCT productid from purchase);

思路:
1)子查询使用商品编号作为条件查询该商品是否存在购买记录
2)如果不存在(not exists)购买记录,则主查询就会查出该商品的信息

--查询出从未被购买的商品
SELECT t2.* FROM product t2 
WHERE NOT EXISTS (SELECT 1 FROM purchase t3 WHERE t3.productid=t2.productid);

查询出购买了顾客Dennis购买过的所有商品的顾客信息
使用的数据库是SQL Server,说一下大概的思路:
1)使用子查询查出顾客Dennis购买过的商品集合A
2)使用子查询根据顾客id查出该顾客购买过的商品集合B
3)用A集合减去B集合(使用except关键字),如果得到的集合为空则说明该顾客购买了顾客Dennis购买过的所有商品
4)A集合减去B集合得到的结果如果没有记录则显示该顾客的信息,所以这里使用了not exists关键字,not exists表示没有的意思
5)使用顾客姓名不等于Dennis将顾客Dennis的信息过滤掉

--查询出购买了顾客Dennis购买过的所有商品的顾客信息(适用SQL Server)
select * from customer c where not exists
 (
  --查询出顾客没有买过但是Dennis买过的商品(如果查不到的话,则说明该顾客买过Dennis买过的所有商品)
    (
   select distinct productid from purchase 
   where customerid = (select customerid from customer where c_name = 'Dennis')
    ) 
    except
    (
   select distinct productid from purchase where customerid = c.customerid
    )
) and c.c_name<>'Dennis';

【参考】SQL语句综合练习
https://www.cnblogs.com/xiaoxing/p/5354432.html
【参考】数据库经典45道练习题及答案
https://www.cnblogs.com/xfxy/p/7077749.html

17、SDK平台和渠道是什么?(游戏测试方面的)

SDK的概念SDK即“软体开发工具包”,一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。通俗点是指由第三方服务商提供的实现软件产品某项功能的工具包。通常SDK是由专业性质的公司提供专业服务的集合,比如提供安卓开发工具、或者基于硬件开发的服务等。也有针对某项软件功能的SDK,如推送技术、图像识别技术、移动支付技术、语音识别分析技术等,在互联网开放的大趋势下,一些功能性的SDK已经被当作一个产品来运营。开发者不需要再对产品的每个功能进行开发,选择合适稳定的SDK服务并花费很少的经历就可以在产品中集成某项功能。

【参考】Channel SDK (渠道SDK) for Unity
https://blog.csdn.net/weixin_33881140/article/details/85728455
【参考】SDK是什么?
http://www.498.net/hyxw/article-1478.html
【参考】如何打造一款游戏外挂
https://www.cnblogs.com/LexMoon/p/wgjc.html

18、专业名词解释

关键词含义
case测试用例
test case测试用例
BUG缺陷(漏洞)
Web网站
app手机端应用,比如微信
原生appNative app,比如:某个安卓app是使用纯Java编写的,那么这个app就是原生的
混合app比如:某个安卓app的开发用到了java和html5,那么这个app就是混合app
form表单,用于接收用户输入的数据。表单里面的提交按钮被点击后,填写的数据会发送给后台服务器
抓包通过工具将客户端发送给服务器的请求数据以及服务器发送回来的响应数据抓取
html5手机端界面开发使用到的技术
localhost本机,本地计算机,映射地址为127.0.0.1
host主机,主机名
domain域名,主机名
TCPTransfer Controller Protocal, 传输控制协议,属于传输层的协议
IPInternet Protocal, 网络协议,属于网络层的协议
SSLSecure Socket Layer, 安全套接层。因为HTTP在传输数据时使用的是明文(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL是基于HTTP之下TCP之上的一个协议层,是基于HTTP标准并对TCP传输数据时进行加密
SSL证书HTTPS安全证书,SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。
SSHSecure Shell, 安全外壳协议,属于应用层的协议,用于远程访问Linux服务器,默认端口22
FTPFile Transfer Protocal, 文件传输协议,用于上传文件到远程Linux服务器,从远程Linux服务器下载(日志)文件,安全性比较低,默认端口23
SFTPSSH File Transfer Protocol的缩写,表示使用SSH协议跟远程Linux服务器传输文件,安全性比较高,默认端口22
SMTPSimple Mail Transfer Protocol, 简单邮件传输协议,用于发送邮件,默认端口25
POP3Post Office Protocol 3, 邮局协议,用于接收邮件
RESTful表示URL地址的风格为请求参数被包含在请求资源路径里面,比如:
https://域名:端口/路径/参数值/参数值
传统的URL地址格式是:
https://域名:端口/路径?参数名=参数值&参数名=参数值
WebService简称WS接口,基于SOAP协议,用来处理xml格式的请求报文
cookie缓存在浏览器里面的个人数据。比如:用户的登录状态,上次访问时间等
sessionId客户端(浏览器)跟服务器建立的连接会话的编号
session缓存在服务器上的个人数据。比如:用户的权限范围
token令牌,凭证。可以理解为演唱会的门票。
xhrxml http request, 表示请求类型为异步请求
AjaxAsynchronous Javascript And XML,异步请求,刷新网页的局部。比如:注册163邮箱账号的时候,浏览器会发送检查用户名是否被占用的Ajax请求(type为xhr)
HTTPHypeText Transfer Protocal, 超文本传输协议,属于应用层的协议,默认端口80
HTTPSHTTP+SSL,默认端口443
URLUniform Resource Locator, 网址,访问地址,接口地址,请求地址
Request请求
Request Method表示请求方式,比如:Post请求(上传),Get请求(下载)
Request Header请求头,请求报文头
Request Body请求主体,请求数据(参数列表),请求正文,请求报文
Response响应
Response Header响应头,响应报文头
Response Body响应主体,响应数据,响应正文,响应报文
Content-Type表示响应(或请求)数据的格式和编码方式,比如:
Content-Type: application/json;charset=UTF-8
Windows个人电脑上的操作系统,容易感染病毒,提供图形化操作界面
Linux公司服务器上的操作系统,比Windows快,更加安全
Mac苹果电脑的操作系统,提供图形化操作界面
Android安卓手机上的操作系统,安卓应用开发平台
iOS苹果手机上的操作系统
SDK软件开发工具,框架,开发平台
JIRA项目管理系统(通过浏览器访问)
UI界面,用户交互
系统结构(架构)可划分为:BS结构,CS结构
BSBrowser-Server(浏览器-服务器)
CSClient-Server(客户端-服务器)
API接口,实际上就是函数(程序)
接口1)函数
2)interface关键字定义的数据类型
3)服务器上的后台程序,处理客户端(或者第三方系统)发送过来的请求(比如http请求),并返回响应数据(处理结果)给客户端(第三方系统)
API文档(手册)接口文档,功能说明书,使用说明书
前端界面(前端开发人员负责开发界面)。另外,前端开发人员开发的程序都是在客户端设备上运行的,比如:网站的JS脚本,CSS代码,HTML代码(由浏览器下载并解释执行)都是在客户端电脑上运行的。
后台服务器上的软件(处理客户端过来的请求)+数据库。另外,后台开发人员开发的程序是运行在服务器上的。
需求调研收集(调查)客户的需求
需求分析需求经理根据用户的需求编写详细的需求文档(能够体现具体的业务规则),开发人员和测试人员根据需求文档对功能点进行理解
需求文档软件功能说明书
同行评审需求评审,代码评审,用例评审等。通过评审可以发现存在的问题,这些问题会被记录并提交SVN,便于项目经理进行跟踪
缺陷跟踪测试人员通过公司的缺陷报告系统对缺陷进行管理(跟踪)。另外,缺陷被测试人员验证修复正确后,需要关闭对应的缺陷报告
缺陷定位测试人员可以通过抓包分析,客户端(浏览器控制台)日志或者下载服务器上的日志排查问题原因,过滤日志信息使用到的关键字主要有:exception,error,fail等
并发同时发送请求
并发量同时发送请求的(虚拟)用户数量
请求响应时间从客户端发出请求开始,到客户端完成响应数据的接收所经历的时间
冒烟测试测试人员在开展新的一轮系统测试前,对移交过来的新版本的基本功能进行简单的测试。主要确认新的版本是否存在致命性bug,功能可以正常运行(不会出现跑不通的状况),不会影响下一轮测试的进行,如果上述都符合那么这个版本就可以进行下一轮测试,否则,打回版本,拒绝测试。个人理解冒烟测试最大的优点在于节约测试的时间成本,减少测试轮数。
回归测试对软件修改后进行的测试,指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。回归测试前建议先做冒烟测试,并且验证上一轮测试发现的缺陷是否被正确修复,如果冒烟测试通过并且缺陷也修复正确则可以开始回归测试,否则版本返工,拒绝回归。
压力测试单位时间内模拟大量的并发请求,使服务器的资源占用率非常高,检查系统能够承受多久
负载测试系统在不同的负载情况下,统计对应的性能指标(比如:事务平均响应时间,事务成功率,服务器cpu资源平均占用率等)
进程软件运行期间,操作系统为该软件分配的内存资源称为进程。进程是由线程组成的。比如:Window电脑上运行QQ客户端,会出现QQ的进程,如果把QQ关掉,对应的进程就会消失。
线程线程是执行任务的,比如:迅雷里面使用5个线程同时下载电影
SVNSubversion的简称
Git是分布式版本控制系统
GitHub公共仓库(对外开放,适用个人练手的非商用项目)
GitLab私人仓库(不对外开放,适用公司级的商用项目)
版本控制对软件(包括源代码和文档)的每个版本进行管理。常用的版本控制工具主要有:SVN, GIT
(版本)发布上线对生产服务器上的后台软件进行升级,对数据库进行升级(执行SQL脚本),并发布最新的app客户端安装文件到应用市场
迭代就是循环、重复的意思。每一个版本的开发过程(包括开发,测试,发布上线)称为一次迭代
迭代周期完成一个新版本的开发(包括开发,测试,发布上线)大概需要多长时间(每隔多久发布一次新版本)

【参考】Http请求中Content-Type
https://www.cnblogs.com/klb561/p/10090540.html

19、参考资料

[01] 测试工程师-简历真的拿得出手吗?
https://www.jianshu.com/p/fdc8ec041b8d
[02] 面试时如果发现回答不好,该怎么办?
https://www.cnblogs.com/JavaArchitect/p/9992919.html
[03] 如何在面试中介绍自己的项目经验
https://www.cnblogs.com/JavaArchitect/p/7586949.html

微信扫一扫关注公众号
image.png
点击链接加入群聊

https://jq.qq.com/?_wv=1027&k=5eVEhfN
软件测试学习交流QQ群号:511619105

  • 6
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值