一文总结软件测试工程师面试前必背的面试题(持续更新中)

一 软件测试基础理论题

  • 常见的测试方法有哪些?
1 从是否关心内部结构来看分为:白盒,黑盒,灰盒
    黑盒测试不考虑程序内部结构和逻辑结构,主要是用来测试系统的功能是否满足需求规格说明书。一般会有一个输入值,一个输入值,和期望值做比较。
    白盒测试主要应用在单元测试阶段,主要是对代码级的测试,针对程序内部逻辑结构,测试手段有:语句覆盖、判定覆盖、条件覆盖、路径覆盖、条件组合覆盖
    灰盒是一种综合测试法,它将黑盒与白盒结合在一起,是基于程序运行时的外部表现又结合内部逻辑结构来设计用例,执行程序并采集路径执行信息和外部用户接口结果的测试技术。
2 从是否执行代码来看分为:静态测试和动态测试
   静态测试:指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。
   动态测试:是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。
3 从开发过程级别来看分为:单元测试,集成测试,系统测试,验收测试。
   单元测试的粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。
   集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由开发小组采用白盒加黑盒的方式来测试,既验证“设计”,又验证“需求”。
   系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合“需求规格说明书”。系统测试中具体的类型类型有:功能测试,性能测试,接口测试,安全性测试,兼容性测试等
   验收测试与系统测试相似,主要区别是测试人员不同,验收测试由用户执行。
View Code
  •  测试用例设计方法(可能会结合具体的题让你用方法设计测试用例)有哪些?
等价类划分,边界值分析,判定表,正交实验法,错误推测,因果图,场景法等
常见的设计测试用例题:给你一部电梯怎么设计测试用例,针对一支笔设计测试用例,对手机上的计算器设计测试用例,给你一个纸杯怎么怎么设计测试用例,针对美团支付尽可能多的设计测试用例
View Code
  •  说一说web测试和app测试有哪些异同点?
相同:
web测试和app测试从流程上来说,没有区别。都需要经历测试计划方案,用例设计,测试执行,缺陷管理,测试报告等相关活动。从技术上来说,web测试和app测试其测试类型也基本相似,都需要进行功能测试、性能测试、安全性测试、GUI测试等测试类型。
不同:
他们的主要区别在于具体测试的细节和方法有区别,比如:性能测试,在web测试只需要测试响应时间这个要素,在app测试中还需要考虑流量测试和耗电量测试。
兼容性测试:在WEB端是兼容浏览器,在App端兼容的是手机设备。而且相对应的兼容性测试工具也不相同,web因为是测试兼容浏览器,所以需要使用不同的浏览器进行兼容性测试(常见的是兼容IE,chrome,firefox,360,Edge,Safari,搜狗)如果是手机端,那么就需要兼容不同品牌,不同分辨率,不同android版本甚至不同操作系统的兼容。(常见的兼容方式是兼容市场占用率前N位的手机即可),有时候也可以使用到兼容性测试工具,但WEB兼容性工具多用IETester等工具,而app兼容性测试会使用Testin这样的商业工具也可以做测试。
安装测试:web测试基本上没有客户端层面的安装测试,但是app测试是存在客户端层面的安装测试,那么就具备相关的测试点。
还有,app测试基于手机设备,还有一些手机设备的专项测试。如交叉事件测试,操作类型测试,网络测试(弱网测试,网络切换)
交叉事件测试:就是在操作某个软件的时候,来电话、来短信,电量不足提示等外部事件。
操作类型测试:如横屏测试,手势测试
网络测试:包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。弱网络的模拟,据说可以用360wifi实现设置。
从系统架构的层面,web测试只要更新了服务器端,客户端就会同步会更新。而且客户端是可以保证每一个用户的客户端完全一致的。但是APP端是不能够保证完全一致的,除非用户更新客户端。如果是app下修改了服务器端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。
还有升级测试:升级测试的提醒机制,升级取消是否会影响原有功能的使用,升级后用户数据是否被清除了。
View Code
  •  接口怎么测试?
接口测试点:
1 业务功能是否实现,包括正常、异常场景是否实现。
   正常包括单个参数,组合参数,必填参数,非必填参数都在接口文档范围内输入
   异常场景包括少传,多传,不传接口文档里规定的参数,重复提交、并发提交、多机环境、大数据量测试
2 检查接口返回的数据是否与预期结果一致。
    如新增成功时业务code是否返回00,新增用户已存在时code是否返回02,传参类型错误时code是否返回03,与接口文档对比
    响应body:是否与文档里给的结果和字段一致
    响应数据:是否与数据库数据匹配
3 检查接口的容错性,假如传递参数值为空,长度不一致,错误数据,不同数据类型等时是否可以处理。
4 接口参数的边界值。例如,传递的参数足够大,足够小或为负数时,接口是否可以正常处理。
5 接口的性能,http请求接口大多与后端执行的SQL语句性能、算法等比较相关。
6 接口的安全性,外部调用的接口尤为重要。   
   1 敏感信息是否加密
   2 必要参数是否后端也进行验证(绕过前端很容易,需要后端同样进行控制)
   3 接口是否防恶意请求(SQL注入)
7 接口的兼容性,比如接口进行了调整,但是前端没有进行变更,这时候需要验证新的接口是否满足旧的调用方式
View Code

 二 数据库题

  •  简述内连接和外连接的区别?

                       

外连接分为左外连(left join)和右外连(right join)
左连接:取左表的全部,右表按条件符合的显示,不符合的则显示null
右连接:取右表的全部,左表按条件符合的显示,不符合的则显示null
SELECT *FROM t_reserve a LEFT JOIN t_advisor b ON a.advisor_id=b.id;
SELECT *FROM t_reserve a RIGHT JOIN t_advisor b ON a.advisor_id=b.id;

内连接关键字为inner join,返回两张表都满足条件的部分
View Code
  • 多表查询/分组查询题
现有三张表,分别为:
学生表(学生id,姓名,性别,分数) )student(s_id, name, sex, score)
班级表(班级id,班级名称) class(c_id, c_name)
学生班级表(班级id,学生id) student_class(s_id,c_id)

1.查询一班得分在80分以上或者等于60,61,62的学生。
SELECT
    s.s_id,
    s. NAME,
    s.score,
    sc.c_id,
    c.c_name
FROM
    student s
LEFT JOIN student_class sc ON s.s_id = sc.s_id
LEFT JOIN class c ON sc.c_id = c.c_id
WHERE
    (
        s.score > 80
        OR s.score IN (60, 61, 62)
    )
AND c.c_name = '一班';

2.査询所有班级的名称,和所有班中女生人数和女生的平均分。
SELECT
    sc.s_id,
    c.c_name,
    COUNT(s.sex),
    AVG(s.score)
FROM
    student_class sc
LEFT JOIN class c ON sc.c_id = c.c_id
LEFT JOIN student s ON sc.s_id = s.s_id
WHERE
    s.sex = ''
GROUP BY
    c.c_name
ORDER BY
    c.c_id ASC;
View Code
  • 什么是数据库事务?

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
View Code

 三 网络协议篇

  •  get和post的区别?
get和post是http协议最常用的两种请求方式:

1.get请求是从服务器获取资源,post请求是向服务器提交数据
2.get请求参数放在url里,通过?拼接;post请求参数放在body里,通过表单提交
               ①url很容易被截获,所以get比post更不安全
               ②因为get放在url里,url存在长度限制一般限制最长256个字符,而post放在body则不存在长度限制
3.get请求通过url可以放在浏览器中,所以可以被缓存和收藏为书签,并且能在浏览器历史中记录下来; 而post则不行
4.get方法发送同一个请求无论执行多少次效果都相同,不会对服务器端数据产生不良影响,所以get请求是幂等的,post请求是非幂等的
View Code
  • 在浏览器中输入一个url后发生了什么?
1 在浏览器中输入一个url地址
2 浏览器通过DNS域名解析器找到域名对应的ip和端口
3 确认ip和端口后,向该ip对应的服务器的端口发送TCP请求(三次握手),建立连接
4 浏览器给web服务器发送一个http请求
5 服务器处理请求
6 服务器发送回一个HTML响应
7 关闭TCP连接(四次挥手)
8 浏览器开始显示HTML
9 浏览器发送获取嵌入在HTML中的对象
10 构建渲染树
11 浏览器布局渲染
View Code
  •  http和https有什么区别?
HTTP协议是超文本传输协议,被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
    HTTPS和HTTP的区别主要为以下四点:
    1.https协议需要到ca申请证书,一般免费证书很少,需要交费。
    2.http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
    3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者默认是80,后者默认是443。
    4.http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络,比http协议安全。

思考:什么是http的无状态?
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送HTTP请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。所以随着人们需求的增加,客户端使用cookie,服务端使用session来记录连接的状态
View Code
  • 说一说对TCP协议的三次握手和四次挥手 的理解?

 

(注:seq代表序号,ack代表确认号)

第一次握手:当客户端需要去建立连接时,客户端就会发送SYN包(seq=x)到服务器,然后客户端进入SYN_SEND的状态,代表已经发SYN包过去,并且在等待服务器确认。此时ACK=0,SYN=1.,这时候由于才第一次握手,所以没有ACK标志
第二次握手:服务器收到SYN包,就会进行确认,由上面的标志位介绍我们可以知道SYN是表示同步序号,这时候会使得确认号=序号+1,即ack就会等于x+1,然后服务器也会像客户端发送一个SYN包(seq=y),这时候也就是服务器会发送SYN+ACK包,来表示服务器确认到了客户端的一次握手并且二次握手建立,此时服务器进入SYN_RECV状态。此时SYN=1,ACK=1,这时候由于是第二次握手,所以就会有一个服务器给客户端的确认标志。
第三次握手:客户端收到服务器的SYN+ACK包,然后就会像服务器发送确认包ACK(ack=k+1)和SYN(seq=x+1),等到这个包发送完毕之后客户端和服务器就会进入ESTABLISHED状态,完成三次握手,而后就可以在服务端和客户端之间传输数据。此时SYN标志位已经不需要,因为当我们发送ACK标志位的时候代表三次握手成功,已经建立完连接了,接下来可以传送数据过去了。
既然都有SYN包那为什么还要ACK来确认呢?SYN是同步序号,当 SYN=1 而ACK=0 时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使 SYN=1 和 ACK=1。因此SYN置1就表示这是一个连接请求或连接接受报文。而ACK状态是用来确认是否同意连接。也就是传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。

当TCP三次握手完之后,就代表连接已经建立完成
View Code

当在传送完数据之后,客户端会和服务端之间有四次握手

第一次握手:客户端发送一个FIN和序号过去(seq=u),用来表示客户端和服务端之间有关闭的请求,同时关闭客户端到服务端的数据传送,客户端就进入FIN_WAIT_1的状态。
第二次握手:服务端收到FIN=1的标志位时,就会发送一个ACK标志位代表确认,然后确认序号就变成了收到的序号加1,即ack=u+1(FIN和SYN在这点上相同,但是作用不一样)这时候服务端进入CLOSE_WAIT状态,这是一个半关闭状态。只能服务端给客户端发送数据而客户端不能给服务端发送数据。
第三次握手:这次握手还是由服务端发起,这是服务端在传完最后的数据(没有就不传)就会发送一个FIN=1和ACK=1,且序号seq会改变(没有传数据则不变),而ack不变。这时候服务端就会进入LAST_ACK状态,表示最后确认一次。
第四次握手:客户端在接收到FIN之后,就会进入TIME_WAIT状态,接着就发送一个ACK和seq=u+1,ack=w+1给服务端,这时候服务端就会进入CLOSED状态。而客户端进入TIME_WAIT状态的时候必须要等待2MSL的时间才会关闭
View Code
  •  http常见的状态码分别代表什么?
1xx:信息提示
2xx:成功
    200:成功。请求的所有数据都在响应体中
3xx:重定向
    301:(Moved Permanently)当客户端触发的动作引起了资源URI的变化时发送此响应代码。另外,当客户端向一个资源的旧URI发送请求时,也发送此响应代码。
4xx:客户端错误
    400:(Bad Request)客户端方面的问题。实体主题中的文档(若存在的话)是一个错误消息。希望客户端能够理解此错误消息,并改正问题。
    401:(Unauthorized未授权)需要输入用户名和密码
    404:(Not Found未找到)服务器无法找到所请求URL对应的资源
5xx:服务器错误
    502:(Bad Gateway)指错误网关,无效网关;在互联网中表示一种网络错误
View Code

四 linux相关

五 编程题(python)

 六 自动化

猜你喜欢

转载自www.cnblogs.com/wenm1128/p/12109862.html