经典接口面试题与答案整理首先,非常感谢咱们松勤软件测试学员的面试题分享,最近小明老师把问题的答案整理了一下,分享出来给大家,希望能够帮助大家在面试过程中少踩坑,提高面试通过率。本文持续更新,后期有新的问题会同步分享给大家。有需要其他方面的知识资料的,可以私信我。大家如果对以下问题有什么更好的解答思路,也欢迎讨论区留言
是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。
解决方案:通过cookie和session来保持状态。
http协议目前有4个版本(0.9,1.0,1.1,2.0),其中1.0、1.1版本在互联网上被广泛使用,2.0版本目前应用很少,是下一代的http协议。
cookie数据存放在客户的浏览器上,session数据放在服务器上。
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
https工作在应用层.
会话层为7层协议的第五层,为表示层提供建立、维护和结束会话连接的功能,并提供会话管理服务。
OSI是一个开放性的通信系统互连参考模型,它是一个定义得非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端,点到点的数据流。
注意一些配置是否同步修改
有些url是否是写死在代码的,需要同步修改
有些通过类cms配置的页面,需要更新检查是否更新域名
如果有存在和第三方接口联调的,需要检查是否彼此都更新了。
相关联业务系统之间互相调用是否存在问题,比如http调用https的情况。
接口入参校验:是否必填,临界值,默认值,枚举值,参数组合
业务逻辑校验:新增商品进购物车,当购物车达到最大值是否可以添加,重复添加单一商品验证最大添加次数,没有库存的商品是否可以添加到购物车,一次添加超过库存量的商品。
安全性:是否校验登录状态
异常:接口的异常返回结果是否有专有提示,如网络异常,接口超时,系统异常
性能:多用户并发操作购物车,同一商品被多用户同时操作到购物车
接口入参长度是否满足get接口url的长度
不同的orderid是返回不同的订单信息
orderid不存在的情况,接口返回
orderid过长过短的情况,接口返回
删除一些非必填项入参,调用接口,返回什么
删除一些必填项入参,调用接口,返回什么
不同的入参组合,正常的组合异常的组合,返回什么
未处理和处理成功都好测试,正常流程就可以覆盖
处理中可以通过制造网络延迟来观测处理中的状态,或者用fiddler来打断点
处理失败可以通过网络超时来呈现处理失败的状态,或者抓包修改接口返回值为处理失败的状态。
权限未处理,导致一般用户可以通过接口获取管理员权限
可以输入一些前端限制过的值,比如提取积分接口,通过修改积分为负数,这个在前端无法测试,因为前端会限制你的输入值不能为负,而接口没做相关限制,导致你的积分越提取越多。
根据接口文档设计接口测试用例,使用postman工具实现测试用例,根据不同的用例设置不同的断言,并且保存在集合中。可以通过执行集合的方式重复批量执行接口测试用例。
把接口的url设置为环境变量,当需要切换不同的环境的时候,只需要使用postman的切换环境功能就可以自由切换,在不同环境下测试接口。
设计接口与接口之间有关联的测试用例,通过postman在断言中设置环境变量的方式,保存上游接口的返回值,下游接口调用这个变量,完成接口与接口的关联场景的测试
postman SoapUI jmeter
关注接口的返回值是否正常
关注数据库中的订单表的数据是否被删除
关注是否有删除记录表存放相关删除的记录,方便日后可以追溯
本地文件的形式存放
postman使用断言的方式进行判断
抓包,查看接口的返回值,根据返回值和前端页面的展示作比较,判断是前端对这个值的处理有问题
还是后端返回的值是错误的。
根据接口文档查看具体入参应该返回什么值,和接口实际上返回的值做对比。
有些ui测试无法实现的场景可以用接口进行辅助测试,比如前端ui会对某些输入框作出限制,
导致某些负值,超出最大长度限制的值无法测试,而通过接口就可以发送这样的值。
ui有时候还会对某一个功能重复点击作出限制,如果想测试用户在网络系统异常的情况下连续点击了2次这个按钮,那么通过前端点击可能测试不了,就要通过接口连续并发的方式测试
如果是postman工具的话,把登录的cookie值存储在环境变量中,需要登录状态的接口直接引用该环境变量去实现。
答案同19题
postman工具,使用断言工具中的设定环境变量。对上游接口的返回值中的依赖数据进行变量化,然后在下游接口的入参中引用该变量,完成依赖。
答案同19题
答案同21题
开发人员要到接口的wsdl地址和接口设计说明书。
在soapui中新建工程,导入wsdl地址。
选择自己要测试的接口的方法,选择request。
根据接口设计说明书选择要测试方法的xml请求,并粘贴到soapui的请求栏,然后用自己的测试数据替换原有的xml请求中的参数。
点击运行,查看返回的xml响应,并参照接口设计说明书及自己的输入参数,确定接口返回的xml响应是否是预期结果,以判断接口是否是通的
(1)16位端口号:告诉主机该报文段是来自哪里,以及传给哪个上层协议或者应用程序(目的端口)的。
(2)32位序号:给发送的数据编号。(随机值+偏移量(偏移量决定序号的大小));32位序号能够指定数据传送过去的序号。
作用:A、保证发送的数据有序;B、保证重复的数据报被丢弃。
(3)32位确认号:对A端发送的数据进行确认并回馈的序号。(在32位序中的序号值加1返回回去)。
作用:保证数据能够有效地到达对端。
(4)4位头部长度:因为4位最大能表示15,所以最大为60个字节。
(5)6位标志位:
PSH:通知尽快读取数据;
RST:请求重新建立连接;
SYN:请求建立连接;
FIN:请求断开连接;
ACK:表示确认号是否有效;
URG:表示禁忌之阵是否有效。
(6)16位窗口大小:控制发送数据的速度或流量。
(7)16位校验和:由发送端填充,接收端对TCP报文段在传输过程中是否损坏。检验不仅包括头部部分,还包括数据部分。
(8)16位紧急指针:一个正的偏移量(相当于当前序号的偏移)。紧急指针是发送端向接收端发送紧急数据的方法。
TCP的特点的可靠性就体现在:32位序号,32位确认号16位校验和。面向连接体现在:URG、RST、SYN、FIN、ACK、PSH等六位标志。
假如源WEB服务器在接到第一个请求消息时,其响应消息的头部为:Content- Encoding: gzip; Vary: Content-Encoding那么 Cache 服务器会分析后续请求消息的头部;
检查其 Accept-Encoding,是否跟先前响应的 Vary 头部值一致,即是否使用相同的内容编码方法,这样就可以防止 Cache 服务器用自己 Cache 里面压缩后的实体响应给不具备解压能力的浏览器。例如:Vary:Accept-Encoding
当客户端请求到达第一个代理服务器时,该服务器会在自己发出的请求里面添 加 Via 头部,并填上自己的相关信息,当下一个代理服务器收到第一个代理服务器的请求时,会在自己发出的请求里面复制前一个代理服务器的请求的Via 头部,并把自己的相关信息加到后面,以此类推;
当 OCS 收到最后一个代理服务器的请求时,检查 Via 头部,就知道该请求所经过的路由。例如:Via:1.0 236.D0707195.sina.com.cn:80 (squid/2.6.STABLE13)
osi 七层协议:
应用层:针对特定应用的协议,为应用程序提供服务并规定应用程序中通信相关的细节。包括文件传输、电子邮件、远程登录等协议。
表示层:将来自下一层的数据转换为上层能够处理的格式。负责数据转换、格式化、文本压缩等。
会话层:负责建立和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理。
传输层:管理两个节点之间的数据传输。
网络层:地址管理和路由选择。
数据链路层:互联设备之间传送和识别帧。
物理层:以二进制形式在在物理媒体上传输数据。
TCP/IP:
数据链路层:ARP,RARP
网络层:IP,ICMP,IGMP
传输层:TCP ,UDP,UGP
应用层:Telnet,FTP,SMTP,SNMP.
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
同时我们也看到,由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择。
传统的HTTP协议通信:传统的HTTP报文是直接将报文信息传输到TCP然后TCP再通过TCP套接字发送给目的主机上。
HTTPS协议通信:HTTPS是HTTP报文直接将报文信息传输给SSL套接字进行加密,SSL加密后将加密后的报文发送给TCP套接字,然后TCP套接字再将加密后的报文发送给目的主机,目的主机将通过TCP套接字获取加密后的报文给SSL套接字,SSL解密后交给对应进程。
GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
GET书签可收藏,POST为书签不可收藏。
GET能被缓存,POST不能缓存 。
GET编码类型application/x-www-form-url,POST编码类型encodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。
GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。
GET只允许 ASCII 字符。POST没有限制。也允许二进制数据。
与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET !POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
GET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中。
①用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端了
②浏览器将接收到的url中抽取出域名字段,就是访问的主机名,比如www.baidu.com并将这个主机名传送给DNS应用的客户端
③DNS客户机端向DNS服务器端发送一份查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式DNS集群的工作)
④该DNS客户机最终会收到一份回答报文,其中包含有该主机名对应的IP地址
⑤一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接
http协议是超文本传输协议的简写,用用于从万维网服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据。
他有以下几个特点
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
支持B/S及C/S模式。
地址解析HTTP协议通过标准URL来请求指定的服务器中指定服务;
封装HTTP 请求,这一步把上面写的 URL 以及本机的一些信息封装成一个 HTTP 请求数据包;
封装 TCP 包, 建立 TCP 连接 , 也就是常说的"三次握手" . 由于HTTP位于最上层的应用层 , 所以HTTP在工作之前要由 TCP 和 IP 协议建立网络连接 , 这就是TCP/IP协议族 , 因此互联网又称为 TCP/IP 网络;
第四步就是在连接建立之后 , 客户端发送 HTTP 请求到服务端与请求相关的信息都会包含在请求头和请求体中发送给服务器端;
服务器端在收到请求之后 , 根据客户端的请求发送给客户端相应的信息 , 相关的响应信息都会放在响应头和响应体中;
服务器端在发送完响应之后 , 就会关闭连接 , 如果过客户端的请求的头部信息中有 Connection-alive , 那么客户端在响应完这个请求之后不会关闭连接 , 知道客户端的所有请求都响应完毕 , 才会关闭连接 , 这样大大节省了带宽和 IO 资源。
参考31题
HTTPS还是度一种安全协议,在访问HTTPS网站数据会加密传输。
问是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认答证保证了传输过程的安全性 。
HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)
第一步:浏览器访问HTTPS网站,要求与Web服务器建立SSL连接。
第二步:Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
第三步:客户浏览器验证服务器送过来的证书,是否是由自己信赖的 CA 中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。
第四步:客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
第五步:Web服务器利用自己的私钥解密出会话密钥。
第六步:Web服务器利用会话密钥加密与客户端之间的通信。
我们使用网络浏览器直接链接其他Internet站点并取得网络信息时,需送出Request信号来得到回答,然后对方再把信息传送回来。
代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你。
作者:晓明童鞋
原文链接:https://blog.csdn.net/songqinxiaoming/article/details/106230498