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

一 软件测试基础理论题

  • 常见的测试方法有哪些?

1 从是否关心内部结构来看分为:白盒,黑盒,灰盒
    黑盒测试不考虑程序内部结构和逻辑结构,主要是用来测试系统的功能是否满足需求规格说明书。一般会有一个输入值,一个输入值,和期望值做比较。
    白盒测试主要应用在单元测试阶段,主要是对代码级的测试,针对程序内部逻辑结构,测试手段有:语句覆盖、判定覆盖、条件覆盖、路径覆盖、条件组合覆盖
    灰盒是一种综合测试法,它将黑盒与白盒结合在一起,是基于程序运行时的外部表现又结合内部逻辑结构来设计用例,执行程序并采集路径执行信息和外部用户接口结果的测试技术。
2 从是否执行代码来看分为:静态测试和动态测试
   静态测试:指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。
   动态测试:是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。
3 从开发过程级别来看分为:单元测试,集成测试,系统测试,验收测试。
   单元测试的粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。
   集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由开发小组采用白盒加黑盒的方式来测试,既验证“设计”,又验证“需求”。
   系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合“需求规格说明书”。系统测试中具体的类型类型有:功能测试,性能测试,接口测试,安全性测试,兼容性测试等
   验收测试与系统测试相似,主要区别是测试人员不同,验收测试由用户执行。

  • 测试用例设计方法(可能会结合具体的题让你用方法设计测试用例)有哪些?

等价类划分,边界值分析,判定表,正交实验法,错误推测,因果图,场景法等
常见的设计测试用例题:给你一部电梯怎么设计测试用例,针对一支笔设计测试用例,对手机上的计算器设计测试用例,给你一个纸杯怎么怎么设计测试用例,针对美团支付尽可能多的设计测试用例

  • 说一说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下修改了服务器端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。
还有升级测试:升级测试的提醒机制,升级取消是否会影响原有功能的使用,升级后用户数据是否被清除了。

  • 接口怎么测试?

接口测试点:
1 业务功能是否实现,包括正常、异常场景是否实现。
   正常包括单个参数,组合参数,必填参数,非必填参数都在接口文档范围内输入
   异常场景包括少传,多传,不传接口文档里规定的参数,重复提交、并发提交、多机环境、大数据量测试
2 检查接口返回的数据是否与预期结果一致。
    如新增成功时业务code是否返回00,新增用户已存在时code是否返回02,传参类型错误时code是否返回03,与接口文档对比
    响应body:是否与文档里给的结果和字段一致
    响应数据:是否与数据库数据匹配
3 检查接口的容错性,假如传递参数值为空,长度不一致,错误数据,不同数据类型等时是否可以处理。
4 接口参数的边界值。例如,传递的参数足够大,足够小或为负数时,接口是否可以正常处理。
5 接口的性能,http请求接口大多与后端执行的SQL语句性能、算法等比较相关。
6 接口的安全性,外部调用的接口尤为重要。
   1 敏感信息是否加密
   2 必要参数是否后端也进行验证(绕过前端很容易,需要后端同样进行控制)
   3 接口是否防恶意请求(SQL注入)
7 接口的兼容性,比如接口进行了调整,但是前端没有进行变更,这时候需要验证新的接口是否满足旧的调用方式

 二 数据库题

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

                      

外连接分为左外连(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,返回两张表都满足条件的部分

  • 多表查询/分组查询题

现有三张表,分别为:
学生表(学生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;

  • 什么是数据库事务?

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

 三 网络协议篇

  • 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请求是非幂等的

  • 在浏览器中输入一个url后发生了什么?

1 在浏览器中输入一个url地址
2 浏览器通过DNS域名解析器找到域名对应的ip和端口
3 确认ip和端口后,向该ip对应的服务器的端口发送TCP请求(三次握手),建立连接
4 浏览器给web服务器发送一个http请求
5 服务器处理请求
6 服务器发送回一个HTML响应
7 关闭TCP连接(四次挥手)
8 浏览器开始显示HTML
9 浏览器发送获取嵌入在HTML中的对象
10 构建渲染树
11 浏览器布局渲染

  • 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来记录连接的状态

  • 说一说对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三次握手完之后,就代表连接已经建立完成

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

第一次握手:客户端发送一个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的时间才会关闭

  • http常见的状态码分别代表什么?

1xx:信息提示
2xx:成功
    200:成功。请求的所有数据都在响应体中
3xx:重定向
    301:(Moved Permanently)当客户端触发的动作引起了资源URI的变化时发送此响应代码。另外,当客户端向一个资源的旧URI发送请求时,也发送此响应代码。
4xx:客户端错误
    400:(Bad Request)客户端方面的问题。实体主题中的文档(若存在的话)是一个错误消息。希望客户端能够理解此错误消息,并改正问题。
    401:(Unauthorized未授权)需要输入用户名和密码
    404:(Not Found未找到)服务器无法找到所请求URL对应的资源
5xx:服务器错误
    502:(Bad Gateway)指错误网关,无效网关;在互联网中表示一种网络错误

四 linux相关

五 编程题(python)

 六 自动化

原文地址:https://www.cnblogs.com/wenm1128/p/12109862.html

时间: 2024-08-04 21:23:11

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

面试官看到一定会打我---软件测试工程师面试套路和暗语灵魂解密

一.前言:自古深情留不住,总是套路得人心! 在我们的生活中,处处充满套路,事事都有潜规则.对于一切以利益为中心的职场来说,更是如此. 我相信每一个职场人都有自己的奋斗目标,谁也不愿意一辈子碌碌无为,但在实际工作中,有很多人都像中了邪似的,不懂得转变努力的方向,总是被吊死在一棵树上.这是为什么呢?是因为他们被套路了,他们成了潜规则的牺牲品.只有被坑过才知道,资产阶级在招聘启事上放出的蜜糖,简直就是我们无产阶级的心灵砒霜. 为了避免你被继续套路,下面为你分享职场招聘中话术圈套,不告诉你,你永远都无法

面试前必看:Redis 和?Memcached 的区别

面试前必看:Redis 和 Memcached 的区别 2016-07-07 程序员的那些事 (点击上方公众号,可快速关注) 来源:标点符 链接:http://www.biaodianfu.com/redis-vs-memcached.html 主页君注:这篇文章前几天在「数据库开发」推荐后,有位童鞋评价非常高:「写的很不错,面试前必看」. Redis 的作者 Salvatore Sanfilippo 曾经对这两种基于内存的数据存储系统进行过比较: Redis支持服务器端的数据操作:Redis相

前端面试题总结——Html5(持续更新中)

前端面试题总结--H5(持续更新中) 1.HTML5 为什么只需要写 <!DOCTYPE HTML>? HTML5 需要doctype来规范浏览器的行为,让浏览器按照它们应该的方式来运行:HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型. 2.HTML5的form如何关闭自动完成功能? 给不想要提示的 form 或某个 input 设置为 autocomplete=off. 3.HTML5 中如何嵌入音频? 当前,audio 元素支持三种音频格式:&l

前端面试题总结——HTML(持续更新中)

前端面试题总结--HTML(持续更新中) 1.什么是HTML? HTML:HyperText Markup Language超文本标记语言 2.XHTML和HTML有什么区别 HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的标记语言 3.简述一下你对HTML语义化的理解? html语义化让页面的内容结构化,结构更清晰,便于对浏览器.搜索引擎解析; 前端学习圈:767273102 ,从最基础的HTML+CSS+JavaScript.jQuery,Ajax,node,angula

前端工程师面试利器!助你在前端求职竞争中脱颖而出

在 ECMScript 的标准化演进和开源社区的蓬勃发展中,作为一名前端工程师,如何从越来越饱和的求职市场竞争中脱颖而出?如何融入环境胜任新的岗位?又该如何晋级成长,完成角色转型? 与你分享前端工程师的面试.岗位适应.晋级成长三大话题和完整职业成长历程.既有提纲挈领的方法论,也会推荐一些实用的学习资料.工具和方法,让你读完就能实践落地. 这些面试利器,助你在前端求职竞争中脱颖而出 1. 面试流程 下面是一份常规的面试流程,不同的公司和团队会有所差异. 面试的第一关一般是笔试. 每个公司和团队使用

Android开发面试经——4.常见Android进阶笔试题(更新中...)

Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http://blog.csdn.net/finddreams/article/details/44301359 上一篇文章我们已经了解了Android笔试的一些基础题目, [<Android开发面试经——2.常见Android基础笔试题> ] (http://blog.csdn.net/finddreams/a

ASP.NET工程师面试前需要认真准备的几大知识点。

凭借个人进几年的工作经验和面试经验以及个人认为比较重要的进行如下总结,希望对自己以后和对大家有所帮助.过于基础的问题就省略了. 1.C#语言的基础知识(网上有这发面的面试题对基础知识的涵盖面很全,面试钱一定要好好的做一下) 2.算法:冒泡排序.快速排序.快速排序的几大优化等.(一定要掌握几个不一定所有算法都要懂.一般面试官会出考题,问用什么样的算法处理,你就用你自己了解的算法来处理即可) 3.必须理解掌握的几个大概念如下 a) http协议的原理.Get和Post 的异同点(老生常谈的,不懂就没

软件测试863面试前小结

1.软件测试是什么? 尽可能多的发现软件中的缺陷,开发人员修复它,提高软件质量 2.为啥要软件测试? 软件是人的产物,人有缺陷况且软件了,大神程序员根本不会测试自己的软件,程序员测试软件可能会进入死胡同.死角.测试的不彻底,不能站到用户的角度去思考问题. 3.软件测试类型:黑盒重功能,白盒重代码,灰盒测试:是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出.输入的正确性,同时也关注程序内部的情况.感觉灰盒测试和调试程序.调用接口差不多. 其实简历少写东西了,我也进行

如何成为一名优秀的测试工程师(QA)——持续更新中

从事软件测试这一行.有很多岗位的 敏捷教练 测试工程师 高级测试工程师 WEB测试工程师 APP测试工程师 测试开发工程师 也可以从其他行业转过来 比如: 运营 研发 产品 测试不仅仅是要负责,心细,更多的还是专业度.