ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

接口测试面试题

2020-08-29 21:02:23  阅读:2276  来源: 互联网

标签:面试题 缓存 浏览器 请求 接口 测试 服务器


HTTP, HTTPS协议
1、什么是DNS
DNS,域名解析系统,其实是域名及ip映射关系的一个库,用户输入域名后,需要通过该系统解析出对应的ip地址

2、HTTP协超文本传输协议,应用层协议,在TCP之上,指定了客户端可能向服务端发送什么形式的消息及收到什么样的响应
典型的HTTP事务处理有如下的过程:
1)客户端与服务端建立连接
2)客户端发送请求
3)服务端接收到请求后,返回对应请求的处理结果
4)关闭连接议

3、怎么抓取HTTPS协议
打开fiddler,就可以在电脑上进行https抓包了

4、说出请求接口中常见的返回状态码
3xx (重定向) 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理。
5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。
301:永久移动,请求的网页已永久移动到新位置。
302:临时移动,服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
404:未找到, 服务器找不到请求的网页。
500:服务器内部错误,服务器遇到错误,无法完成请求。

http协议请求方式
1、OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD 向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET 向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。
4、POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
5、PUT 向指定资源位置上传其最新内容
6、DELETE 请求服务器删除Request-URL所标识的资源
7、TRACE 回显服务器收到的请求,主要用于测试或诊断
8、CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

HTTP和HTTPS协议区别
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

POST和GET的区别
区别:
1、传送方式:get通过地址栏传输,post通过报文传输。
2、传送长度:get参数有长度限制(受限于url长度),而post无限制
3、GET和POST还有一个重大区别,简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包
长的说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?
1. GET与POST都有自己的语义,不能随便混用。
2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;
案例:一般情况下,登录的时候都是用的POST传输,涉及到密码传输,
post较get安全性较高,get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等.
get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码,post支持标准字符集,可以正确传递中文字符。

HTTP请求报文与响应报文格式
HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成
HTTP响应也由三个部分组成,分别是:状态行、消息报头、响应正文。


什么是Http协议无状态协议?怎么解决HTTP协议无状态协议
无状态指的是任意一个Web请求必须完全与其他请求隔离,当请求端提出请求时,请求本身包含了相应端为相应这一请求所需的全部信息。
cookies, session
Cookie是通过客户端保持状态的解决方案。从定义上来说,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。
Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态。

常见的POST提交数据方式
application/x-www-form-urlencoded
multipart/form-data
application/json
text/xml

Session和Cookies区别
①存在的位置:cookie 存在于客户端,临时文件夹中; session存在于服务器的内存中,一个session域对象为一个用户浏览器服务
②安全性: cookie是以明文的方式存放在客户端的,安全性低,可以通过一个加密算法进行加密后存放; session存放于服务器的内存中,所以安全性好
③网络传输量 cookie会传递消息给服务器; session本身存放于服务器,不会有传送流量
④生命周期(以20分钟为例) cookie的生命周期是累计的,从创建时,就开始计时,20分钟后,cookie生命周期结束;session的生命周期是间隔的,从创建时,开始计时如在20分钟,没有访问session,那么session生命周期被销毁。但是,如果在20分钟内(如在第19分钟时)访问过session,那么,将重新计算session的生命周期。关机会造成session生命周期的结束,但是对cookie没有影响
⑤访问范围 cookie为多个用户浏览器共享; session为一个用户浏览器独享

为什么说session 比cookie更安全?
真正的cookie存在于客户端硬盘上的一个文本文件,如果两者一样的话,只要cookie就好了,让客户端来分提服务器的负担,并且对于用户来说又是透明的。但实际上不是。
session的sessionID是放在cookie里,要想功破session的话,得分两步:
第一要得到sessionID。攻破cookie后,你要得到sessionID,sessionID是要有人登录,或者启动session_start才会有,你不知道什么时候会有人登录。
第二取有效sessionID。sessionID是加密的,第二次session_start的时候,前一次的sessionID就没有用了,session过期时sessionid也会失效,想在短时间内功破加了密的 sessionID很难。session是针对某一次通信而言,会话结束session也就随着消失了。

HTTPS在哪一层, 会话层在第几层
在应用层,会话层在四层
1、物理层:OSI的物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组织制定的标准。连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。【巨程网】
2、数据链路层: 它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。
3、网络层:这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。
4、传输层:这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。
5、会话层:它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。
6、表示层:这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。
7、应用层:与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。示例:TELNET,HTTP,FTP,NFS,SMTP等。

浏览器输入url按回车背后经历了哪些?
1、首先,在浏览器地址栏中输入url,先解析url,检测url地址是否合法
2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作。
浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求;
操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存);
路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存;
ISP缓存:若上述均失败,继续向ISP搜索。
3、在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。
4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。
5、握手成功后,浏览器向服务器发送http请求,请求数据包。
6、服务器处理收到的请求,将数据返回至浏览器
7、浏览器收到HTTP响应
8、浏览器解码响应,如果响应可以缓存,则存入缓存。
9、 浏览器发送请求获取嵌入在HTML中的资源(html,css,javascript,图片,音乐······),对于未知类型,会弹出对话框。
10、 浏览器发送异步请求。
11、页面全部渲染结束。

TCP, UDP协议
TCP/UDP协议的区别,TCP如何保证正确,微信基于什么协议,QQ基于什么协议,为什么?
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
TCP通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP对系统资源要求较多,UDP对系统资源要求较少。

TCP如何保证正确:校验和、序列号、确认应答、超时重传、连接管理、流量控制、拥塞控制、
微信基于什么协议
你熟悉OSI协议吗?原理是什么
就是OSI七层协议
接口用例设计
怎么设计接口测试用例?
1.等价类划分法
2.边界值分析法
3.错误推测法
4.因果图法
5.判定表驱动法
6.正交试验法
7.功能图法
8.场景图法

HTTPS测试点
从HTTP变化到HTTPS协议,测试点
购物车模块, 加入购物车接口测试点分析
1.功能测试
a)、未登录时:
将商品加入购物车,页面跳转到登录页面,登录成功后购物车数量增加。
b)、登录后:
所有链接是否跳转正确;
商品是否可以成功加入购物车;
购物车商品总数是否有限制;
商品总数统计是否正确;
全选功能是否可用;
删除功能是否可用;
价格总计是否正确;
商品文字太长时是否显示完整;
购物车中下架的商品是否有标识,是否还能支付;
新加入购物车商品排序(添加购物车中存在的店铺的商品和购物车中不存在的店铺的商品);
是否支持快TAB、ENTER等快捷键;
商品删除后商品总数是否减少;
收藏功能是否可用;
购物车结算功能是否可用。
2.兼容性测试
BS架构:不同浏览器测试,比如:IE,火狐,谷歌,360这些。
APP:在主流的不同类型,不同分辨率,不同操作系统的手机上测试,华为,vivo,oppo等
3.用户体验测试
删除商品是否有提示;
是否支持快捷键功能;
是否有回到顶部的功能;
商品过多时结算按钮是否可以浮动显示;
购物车有多个商品时,能不能只对单个商品结算;
界面布局、排版是否合理;
文字是否显示清晰;
不同卖家的商品是否区分明显。
4.性能测试
打开购物车页面要多长时间

根据以下界面设计测试用例
比如这个输入框,平常拿到这个web页面,会对输入框做用例设计:
输入一个负数(如:-100),点提交
输入金额为0(如:0),点提交
输入金额为0-100的数(如:20),点提交
输入金额为100(如:100),点提交
输入金额大于100(如:108),点提交
输入1位小数(如:10.1),点提交
输入2位小数(如:10.12),点提交
输入3位小数(如:10.123),点提交

image
一个订单的几种状态如何全部测到,如:未处理,处理中,处理失败,处理成
未处理和处理成功都好测试,正常流程就可以覆盖
处理中可以通过制造网络延迟来观测处理中的状态,或者用fiddler来打断点
处理失败可以通过网络超时来呈现处理失败的状态,或者抓包修改接口返回值为处理失败的状态。

接口测试
什么叫接口测试
接口测试是测试系统组件间接口的一种测试。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
为什么要做接口测试
接口测试的必要性就体现出来了:
1.可以发现很多在页面上操作发现不了的bug
2.检查系统的异常处理能力
3.检查系统的安全性、稳定性
4.前端随便变,接口测好了,后端不用变
5.可以测试并发情况,一个账号,同时(大于2个请求)对最后一个商品下单,或不同账号,对最后一个商品下单
6.可以修改请求参数,突破前端页面输入限制(如金额)

你平常做接口测试的过程中发现过哪些BUG
根据上面的界面设计测试用例说出几个。
权限未处理,导致一般用户可以通过接口获取管理员权限
可以输入一些前端限制过的值,比如提取积分接口,通过修改积分为负数,这个在前端无法测试,因为前端会限制你的输入值不能为负,而接口没做相关限制,导致你的积分越提取越多。

平常你是怎么测试接口的
通过性验证:首先肯定要保证这个接口功能是好使的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。
参数组合:现在有一个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type传2的时候是删除商品,商品id是必传的,这样的,就要测参数组合了,type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。
接口安全:
1、绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?
2、绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功
3、参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。
4、密码安全规则,密码的复杂程度校验
异常验证:所谓异常验证,也就是我不按照你接口文档上的要求输入参数,来验证接口对异常情况的校验。比如说必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11,总之就是你说怎么来,我就不怎么来,其实也就这三种,必传非必传、参数类型、入参长度。
性能测试
接口并发情况,如上面提到的:一个账号,同时(大于2个请求)对最后一个商品下单,或不同账号,对最后一个商品下单
接口响应时间,响应时间太长了,肯定需要优化,一般都是毫秒级别

平常用什么工具测接口的
接口测试工具很多,首先postman 其次用jmeter
没有接口文档,如果做接口测试
自我发挥

接口都有那些部分组成呢?
首先,接口文档应该包含以下内容:
1、接口说明
2、调用url
3、请求方法(getpost)
4、请求参数、参数类型、请求参数说明
5、返回参数说明
接口文档可知,接口至少应有请求地址、请求方法、请求参数(入参和出参)组成,部分接口有请求头header。
标头 (header):是服务器以HTTP协议传HTML资料到浏览器前所送出的字串,在标头与 HTML 文件之间尚需空一行分隔,一般存放cookie、token等信息
有人问我header和入参有什么关系?它们不都是发送到服务器的参数吗?
首先,它们确实都是发送到服务器里的参数,但它们是有区别的,header里存放的参数一般存放的是一些校验信息,比如cookie,它是为了校验这个请求是否有权限请求服务器,如果有,它才能请求服务器,然后把请求地址连同入参一起发送到服务器,然后服务器会根据地址和入参来返回出参。也就是说,服务器是先接受header信息进行判断该请求是否有权限请求,判断有权限后,才会接受请求地址和入参的。
接口测试的流程

常用什么接口测试工具, 说一个你在工作中具体怎么做接口测试的实例
使用postman工具
在没有拿到接口文档以前先部署环境
新建一个项目
新增一个用例
添加请求信息
添加头信息
预处理和结果检查
全局变量与环境变量 在用例数据项里面我就可以这样使用,{{username}}
导出用例为代码
批量执行用例
根据接口文档设计接口测试用例,使用postman工具实现测试用例,根据不同的用例设置不同的断言,并且保存在集合中。可以通过执行集合的方式重复批量执行接口测试用例。
把接口的url设置为环境变量,当需要切换不同的环境的时候,只需要使用postman的切换环境功能就可以自由切换,在不同环境下测试接口。
设计接口与接口之间有关联的测试用例,通过postman在断言中设置环境变量的方式,保存上游接口的返回值,下游接口调用这个变量,完成接口与接口的关联场景的测

不可逆的操作,如何处理,比如删除一个订单这种接口如何测试
用sql语句delete删除订单数据,使用接口get方法查询该数据是否存在

接口产生的垃圾数据如何清理
用sql语句delete删除订单数据,使用接口get方法查询该数据是否存在

测试的数据你放在哪
本地文件的形式存放
测试数据存放总结:
1.对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如ini)
2.对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成
3.对于一个接口有多组测试的参数,可以参数化,数据放yaml,text,json,excel都可以
4.对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理
5.对于邮箱配置的一些参数,可以用ini配置文件
6.对于全部是独立的接口项目,可以用数据驱动方式,用excel/csv管理测试的接口数据
7.对于少量的静态数据,比如一个接口的测试数据,也就2-3组,可以写到py脚本的开头,十年八年都不会变更的
总之不同的测试数据,可以用不同的文件管理

当一个接口出现异常时候,你是如何分析异常的
1.抓包,用fiddler工具抓包,或者浏览器上f12,app上的话,那就用fiddler设置代理,去看请求报文和返回报文了
2.查看后端日志,xhell连上服务器,查看日志

你们怎么做的参数化
1、添加用户定义的变量
1) 线程组->右键点击添加->配置元件->用户定义的变量
2)添加成功后,点击左侧用户定义的变量,添加键值对
3)在需要引用该值的地方添加引用,引用变量的格式为 ${变量名},注意要与变量名一致
2、使用函数助手
1)选项->函数助手,随机生成字符串功能,以下功能用于实现随机生成3位数字
2)点击生成按钮
3)复制生成的函数字符串
4)粘贴到需要的地方
3、文档csv/txt
1)线程组->右键添加->配置元件->CSV Data Set Config,配置如图
2)引用 ${}
3)运行时注意,配置同线程数个数同
4、关联参数
在线程组内,当你想用一个请求的响应结果作为另一个请求的入参时就需要用到关联。
用正则表达式关联

如何进行数据清洗
数据删除
如何进行数据检验
通过查询数据库数据是否存在

response怎么验证, 参数特别多
postman使用断言的方式进行判断

做接口测试如何分析是前端还是后端的问题
1、抓包,查看接口的返回值,根据返回值和前端页面的展示作比较,判断是前端对这个值的处理有问题
还是后端返回的值是错误的。
2、这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对
请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题咯

在测试接口中怎么知道请求成功还是失败
根据接口文档查看具体入参应该返回什么值,和接口实际上返回的值做对比。
通过状态码来验证请求成功还是失败

如何模拟弱网测试
在fiddle中模拟弱网中修改配置文件--send(300)代表上传速度--received(150)代表下载速度数值越大网络越差

异步接口怎么测试
异步接口我们一般采取轮询的方法,每隔一定时间间隔取请求一下查询结果的接口,直到接口返回的状态是已完成/查询到指定数据或超时
如果异步接口没有提供追踪id和查询接口,我们可以通过同样的方法轮询查取数据库数据或日志数据直到获取到指定结果或超时

接口的加密测试中对称加密与非对称加密有什么区别?如何开展测试?请详解
没测过

请详细阐述接口测试和UI测试在测试活动中是如何协同测试的?
有些ui测试无法实现的场景可以用接口进行辅助测试,比如前端ui会对某些输入框作出限制,
导致某些负值,超出最大长度限制的值无法测试,而通过接口就可以发送这样的值。
ui有时候还会对某一个功能重复点击作出限制,如果想测试用户在网络系统异常的情况下连续点击了2次这个按钮,那么通过前端点击可能测试不了,就要通过接口连续并发的方式测试

接口依赖
用一个全局变量来处理依赖的数据,比如登录后返回token,其它接口都需要这个token,那就用全局变量来传token参数

很多接口都需要登录怎么处理?
如果是postman工具的话,把登录的cookie值存储在环境变量中,需要登录状态的接口直接引用该环境变量去实现。

接口测试质量评估标准
a) 业务功能覆盖是否完整
b) 业务规则覆盖是否完整
c) 参数验证是否达到要求(边界、业务规则)
d) 接口异常场景覆盖是否完整
e) 接口覆盖率是否达到要求
f) 代码覆盖率是否达到要求
g) 性能指标是否满足要求
h) 安全指标是否满足要求

在手工接口测试或者自动化接口测试的过程中,上下游接口有致据依赖如何处理
用一个全局变量来处理依赖的数据,比如登录后返回token,其它接口都需要这个token,那就用全局变量来传token参数

依赖于第三方数据的接口如何进行测试
有mock平台,写入参,请求返回你要的结果
这个需要自己去搭建一个mock服务、模拟接口返回数据

接口测试中依赖登录状态的接口如何测试
如果是postman工具的话,把登录的cookie值存储在环境变量中,需要登录状态的接口直接引用该环境变量去实现。

Web Service
HTTP接口测试和Web Service接口测试区别是什么?
没测试过Web Service接口,测的是http接口

Web Service接口是如何测试的
没测试过Web Service接口,测的是http接口

接口框架
接口测试框架怎么搭建的?
就是搭建测试环境

你有没有做过框架稳定性优化相关的工作?
说的性能测试吧

持续集成怎么做的?
使用jinkens,定时执行任务

Mock
Mock怎么使用
根据数据模板生成模板数据
模拟ajax请求,生成请求数据
基于html模板生成模拟数据


性能
JMeter怎么存储变量, 让下一个接口使用
线程组->右键点击添加->配置元件->用户定义的变量
添加成功后,点击左侧用户定义的变量,添加键值对
在需要引用该值的地方添加引用,引用变量的格式为 ${变量名},注意要与变量名一致

如何进行接口压测
1. 本次压测主要包含两个接口的压测,一个是商品详情接口,一个是商品列表接口
2. 首先添加一个线程组,在线程组添加一个HTTP Request
3. 添加一个HTTP Header Manager,来设置传参格式,例如我这里用的是:application/json; charset=utf-8。传参为json格式,并且放在body data中。
4. 如果想要从csv中读取数据传参,那么需要添加一个CSV Data Set Config,此时需要注意csv文件的编码格式需要和JMeter中选择的一致,否则传参会出现乱码的现象。
5. 添加完csv文件之后,我们可以改一下传参的数据,将csv中的数据读取并传参
6. 我们可以在线程组中设置并发数量、时间以及循环次数,并且添加结果树和分析报表,可以监控压测结果:
7. 执行完压测脚本之后,我们通过分析报表来查看结果。通过分析报告我们看到最小响应时间,最大响应时间,平均响应时间和出错率:

JMeter执行10次
JMeter获取上一个request的结果
JMeter完成一个用例
做接口测试当请求参数多时tps下降明显,此接口根据参数从redis中获取数据,每个 参数与redfs交互一次,当一组参数是tps5133,五组参数是tps1l69,多次交互影响了处理住能,请详细描述述如何改进增进效果的方案
高能部分
TCP报头格式
(1)16位端口号:告诉主机该报文段是来自哪里,以及传给哪个上层协议或者应用程序(目的端口)的。
(2)32位序号:给发送的数据编号。(随机值+偏移量(偏移量决定序号的大小));32位序号能够指定数据传送过去的序号。作用:A、保证发送的数据有序;B、保证重复的数据报被丢弃。
(3)32位确认号:对A端发送的数据进行确认并回馈的序号。(在32位序中的序号值加1返回回去)。作用:保证数据能够有效地到达对端。
(4)4位头部长度:因为4位最大能表示15,所以最大为60个字节。
(5)6位标志位:

UDP报头格式
相对于 TCP 报文,UDP 报文只有少量的字段:源端口号、目的端口号、长度、校验和等,各个字段功能和TCP 报文相应字段一样。

Session机制、Cookie机制
ession是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

TCP三次握手、四次挥手(这个问题真的要回答吐了,不过真的是面试官最喜欢问的,建议每天手撸一遍,而且不只是每次请求的过程,各种FIN_WAIT、TIME_WAIT状态也要掌握)。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据.

为什么要三次握手
三次握手的目的是建立可靠的通信信道,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

四次挥手
第一次挥手:
Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:
Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:
Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:
Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥

打开网页到页面显示之间的过程(涵盖了各个方面,DNS解析过程,Nginx请求转发、连接建立和保持过程、浏览器内容渲染过程,考虑的越详细越好)。
1、首先,在浏览器地址栏中输入url,先解析url,检测url地址是否合法
2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作。
浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求;
操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存);
路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存;
ISP缓存:若上述均失败,继续向ISP搜索。
3、在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。
4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。
5、握手成功后,浏览器向服务器发送http请求,请求数据包。
6、服务器处理收到的请求,将数据返回至浏览器
7、浏览器收到HTTP响应
8、浏览器解码响应,如果响应可以缓存,则存入缓存。
9、 浏览器发送请求获取嵌入在HTML中的资源(html,css,javascript,图片,音乐······),对于未知类型,会弹出对话框。
10、 浏览器发送异步请求。
11、页面全部渲染结束。

IP地址子网划分
POST和GET区别

TCP如何保证数据的可靠传输的(这个问题可以引申出很多子问题,拥塞控制慢开始、拥塞避免、快重传、滑动窗口协议、停止等待协议、超时重传机制,最好都能掌握)
地址解析协议ARP
1、每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
2、主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等), 会发送免费ARP报文。免费ARP报文会将自己IP地址与Mac地址的映射关系广播给其他主机
3、网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。
4、某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址等。
5、当本网络的所有主机收到该 ARP 数据包时,首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖,然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。
6、源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。

交换机和路由器的区别
1、路由器可以为局域网自动分配IP和虚拟拨号。
2、交换机只是用来分配网络数据的。
3、路由器在网络层,根据IP地址寻址。
4、路由器可以处理“TCP/IP”协议,交换机不行。
5、交换机在中继层,根据“MAC”地址寻址。
6、路由器可以把一个IP分给多个主机使用,对外IP相同。
7、交换机可以把很多主机连接起来,对外的IP不同。
8、路由器可以提供防火墙,交换机不能提供这个功能。
9、交换机是做扩大局域网接入点的,可以让局域网连进更多的电脑。
10、路由器是用来做网间连接,也就是用来连接不同网络的。

API接口与SDI接口的区别(API是提供给别人的接口)
1. webservice走HTTP协议和80端口。2. 而你说的api,用的协议和端口,是根据开发人员定义的。3. 这么说吧,api类似于cs架构,需要同时开发客户端API和服务器端程序。4. 而WebService则类似于bs架构,只需要开发服务器端,不需要开发客户端,客户端只要遵循soap协议,就可以调

你怎么理解http协议
说说http协议的工作流程
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

http中的200,302,403,404,500,503都代表什么状态
200 请求被成功处理 成功请求
302 临时性重定向 比如用户在未登录时访问个人中心页面,这时可以临时重定向到登录的url。
403 没有访问权限 系统中某些页面只有在某些权限下才能访问,当用户去访问了一个本身没有访问权限的url,回报403错误。
404 没有对应资源 一般是自己输入了一个url,这个url并不合法。404 找不到,Web 服务器找不到您所请求的文件或脚本。请检查URL 以确保路径正确。
500 服务器错误比如服务器某一个函数代码出错了,有没有捕获异常,这时候会报500错误。500 服务器的内部错误,Web 服务器不能执行此请求。请稍后重试此请求。
503 服务器停机或正在维护 系统正在维护或者服务器暂停的时候,回报500错误。

什么是web缓存?有什么优点
web缓存,是指在用户访问网站后,在用户客户端留下的缓存。没缓存的情况下,客户端会对整站进行加载。有缓存的时候,会跳过已缓存的内容。
使用缓存的2个主要原因:
降低延迟:缓存离客户端更近,因此,从缓存请求内容比从源服务器所用时间更少,呈现速度更快,网站就显得更灵敏。火箭
降低网络传输:副本被重复使用,大大降低了用户的带宽使用,其实也是一种变相的省钱(如果流量要付费的话),同时保证了带宽请求在一个低水平上,更容易维护了。

从HTTP变化到HTTPS协议,测试点
注意一些配置是否同步修改
有些url是否是写死在代码的,需要同步修改
有些通过类cms配置的页面,需要更新检查是否更新域名
如果有存在和第三方接口联调的,需要检查是否彼此都更新了。
相关联业务系统之间互相调用是否存在问题,比如http调用https的情况。

8、http://...?orderId=,**, 接口设计用例
接口入参长度是否满足get接口url的长度
不同的orderid是返回不同的订单信息
orderid不存在的情况,接口返回
orderid过长过短的情况,接口返回
删除一些非必填项入参,调用接口,返回什么
删除一些必填项入参,调用接口,返回什么
不同的入参组合,正常的组合异常的组合,返回什么

什么是https,说说https的工作原理
HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

什么是http代理服务器,有什么用
1、HTTP代理:HTTP代理就是介于浏览器和web服务器之间的一台服务器,连接代理后,浏览器不再直接向web服务器取回网页,而是向代理服务器发出request信号,代理服务器再想web服务器发出请求,收到web服务器返回的数据后再反馈给浏览器。
2、HTTP代理作用HTTP代理其作用就是说代理互联网客户去获得网络信息。比如芝麻HTTP代理。
3、HTTP代理应用场景:数据抓取、ASO优化、电商采集、游戏工作室、营销推广。

什么是分布式系统
分布式系统(distributed system)是建立在网络之上的软件系统。

分布式系统你会考虑哪些方面
1.消息如何接收和分发
2.应用之间如何互相调用通信
3.数据如何快速访问
4.数据如何安全快速存取

分布式系统设计你会考虑哪些策略
如何检测你还活着?
如何保障高可用
容错处理
重试机制
负载均衡

为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

(2)为什么连接之前要进行三次握手?
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

 

标签:面试题,缓存,浏览器,请求,接口,测试,服务器
来源: https://www.cnblogs.com/hnio/p/13583490.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有