1、软件的接口是什么?
指程序中具体负责在不同模块之间传输或接受数据并做处理的类、方法、函数。
2、HTTP和HTTPS的区别?
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以, HTTPS 比 HTTP 要更耗费服务器资源。
5、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
3、tcp/IP五层模型内容,且每层的协议
1.五层协议:应用层、传输层、网络层、数据链路层、物理层
2、应用层:为操作系统或应用程序提供访问网络服务的接口。例如:telnet-远程连接服务、FTP-件传输协议、HTTP/HTTS、DNS-域名服务解析器等。
传输层:会话层负责决定建立连接和断开连接的时机,而传输层进行实际的建立和断开处理。常见:TCP、UDP、进程、端口。
网络层:将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某个地址。因此这一层主要负责寻址和路由选择。常见:路由器、多 层交换机、防火墙。
数据链路层:负责物理层上的互联、节点之间的通信传输。常见:网卡、网桥、二层交换机。
物理层:负责0、1比特流(0、1序列)与电压的高低、光的闪灭之间的互换。常见:中继器、集线器、网线
4.get和post的区别
POST和GET都是向服务器提交数据,并且都会从服务器获取数据。
区别:
(1)传送方式:get通过地址栏传输,post通过报文传输,故而post更相对来说私密性一点
(2)传送长度:get参数有长度限制(受限于url长度),而post无限制
(3)get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留
(4)get方式大多用作查询接口,获取响应数据;而post方式更多做数据添加、修改或删除等操作
5.常见的post提交数据方式
主要有四种方式:application/x-www-form-urlencoded 表单传递、multipart/form-data主要用于上次文件、application/json json字符串、text/xml等。
6.什么是HTTP协议无状态协议?怎么解决HTTP协议无状态
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能改变这个结果。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。客户端与服务器进行动态交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。
7、cookie和session的区别
(1)作用范围不同cookie保存在客户端浏览器,session保存在服务端
(2)存取方式不同,cookie只能保存ASCII,session可以存任意数据类型,一般情况下我们可以在session中保存一些常用变量信息,比如UserId
(3)有效期不同,cookie可以设置为长时间保持,比如我们经常使用的默认登录功能,session一般失效时间较短,客户端关闭或者Session超时都会失效
(4)安全性不同,cookie存储在客户端,比较容易遭到不法获取,session存储在服务端,安全性要好一些
(5)存储大小不同,单个cookie保存的数据不能超过4K,session可存储数据远高于cookie。
(6)服务器性能。session 对服务器的压力会更大一些,而 Cookie 放在客户端,所以对服务器基本没影响
8、HTTP有哪些请求方法
HTTP共有7中请求方式,每种都可以发送Header和Body: get、post、put、delete、options、head、patch
9、请求接口中常见的返回状态码
1xx – 信息提示(表示临时的响应。客户端在收到常规响应之前,准备接收一个或多个1xx响应)
2xx – 成功(表明服务器成功地接受了客户端请求)
3xx – 重定向(客户端浏览器必须采取更多操作来实现请求,例如用户未登录就操作了修改的功能)
4xx – 客户端错误(发送错误,客户端有问题)
5xx – 服务器错误(服务器由于遇到错误而不能完成该请求)
常见的有:
200 OK:服务器成功返回用户请求的数据
201:用户新建或修改数据成功
202:表示一个请求已经进入后台排队(异步任务)
301:删除请求数据
302:在其他地址发现了请求数据
303:建议客户访问其他URL或访问方式
304:客户端已经执行了GET,但文件未变化
400 :用户发出的请求有错误,服务器没有进行新建或修改数据的操作
401:表示用户没有权限(令牌、用户名、密码错误)
403 :表示用户得到授权(与401错误相对),但是访问被禁止
404:用户发出的请求针对得到是不存在的记录,服务器没有进行操作,该操作是幂等的
500:服务器发生错误,用户将无法判断发出的请求是否成功。
502:服务器返回超时
10、TCP和UDP的的区别,
TCP是可靠的、面向连接、面向字节流、全双工、传输效率低且传输速度慢
UDP是不可靠的、无连接、面向报文、传输效率高且传输速度快
12.怎么设计接口测试用例
设计接口测试用例需要考虑以下几个方面:
①是否满足前提条件
有些接口需要满足前置条件,才可成功获取数据。常见的,需要登陆Token。
逆向用例:
针对是否满足前置条件(假设为n个条件),设计0~n条用例
②是否携带默认值参数
带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值,其它不填写,设计1条用例;
③业务规则、功能需求
这里根据实际情况,结合接口参数说明,可能需要设计n条正向用例和逆向用例
④参数是否必填
逆向用例:
针对每个必填参数,都设计1条参数值为空的逆向用例
⑤参数之间是否存在关联
有些参数彼此之间存在相互制约的关系
逆向用例: 根据实际情况,可能需要设计0~n条用例
⑥参数数据类型限制
逆向用例:针对每个参数都设计1条参数值类型不符的逆向用例
⑦参数数据类型自身的数据范围值限制
正向用例: 针对所有参数,设计1条每个参数的参数值在数据范围内为最大值的正向用例
逆向用例:
针对每个参数(假设n个),设计n条每个参数的参数值都超出数据范围最大值的逆向用例
针对每个参数(假设n个),设计n条每个参数的参数值都小于数据范围最小值的逆向用例
13、你做接口测试,测什么
①可用性测试-根据约定的协议、方法、格式内容,传输数据到接口经处理返回期望的接口
接口功能是否正确实现;
返回值测试-返回值除了内容要正确,类型也要正确,保证调用方能够正确的解析;
参数值边界值、等价类测试
②错误和异常处理测试
输入异常值(空值、特殊字符、超过约定长度等),接口能正确处理,且按预期响应
输入错误的参数,接口能正确处理,并按预期响应
多输入、少输入参数,接口能正确处理,且按预期响应
错误传递数据格式(如json格式写成form格式)测试
③安全性测试,主要指传输数据的安全性
敏感数据等是否加密传输
返回数据是否含有敏感数据,如用户密码、完整的用户银行账户信息等
接口是否防止恶意请求(如大量伪造请求接口致使服务器崩溃)
④性能测试,如接口的响应时间、并发处理能力、压测处理情况:
接口响应时长在用户可忍受的范围内;
并发请求相同的接口(特别为post请求),接口的处理情况(如插入了相同的记录导致数据出错,引发系统故障)
对于请求量大的接口做压测,确定最大的瓶颈点是否满足当前业务需要;
14.平常用什么工具测接口
常用http协议接口测试工具,如:postman、fiddler、jmeter;webService接口用SoapUI、jmeter等。
15、如果没有接口文档,如果做接口测试?
1.没有接口文档,那就需要先跟开发沟通,然后整理接口文档(本来是开发写的,没办法,为了唬住面试官,先说自己整理了)
2.没有接口文档,可以抓包看接口请求参数,然后不懂的跟开发沟通
3.还有一些接口请求会保存在数据库中,可以找开发要到
16、在手工接口测试或自动化接口测试的过程中,上下游接口有数据依赖如何处理?
用一个全局变量来处理依赖的数据,比如登录后返回token,其它接口都需要这个token,那就用全局变量来传token参数。
17、依赖于第三方数据的接口如果进行测试?
mock
18、接口测试中,依赖登录状态的接口如何测试?
依赖登录状态的接口的本质上是在每次发送请求时需要带上session或者cookie才能发送成功,在构建POST请求时添加必要的session或者cookie
19、如何模拟弱网做测试?
fiddler和charles都可以模拟弱网测试,平常说的模拟丢包,也是模拟弱网测试
用Fiddler实现弱网测试:
在规则菜单选择Performance项,设置为Simulate Modem Speeds即为弱网模式。如果页面能够在弱网模式下正常打开,则说明弱网测试通过,否则前端需要对页面进行压缩。
20、你平常做接口测试的过程中发现过哪些bug?
1.常规错误:接口功能没有实现,没按约定返回结果,边界值处理出错等
2.输入异常值(空值、特殊字符、超过约定长度等),接口抛错,没做封装处理;
3、输入错误的参数、多输入、少输入参数,接口可能出现的错误;
4、安全性错误,如明文传输、返回结果含有敏感信息,没对用户身份信息做校验,没做恶意请求拦截等;
21、当一个接口出现异常的时候,你是如何分析异常的?
先抓包,用fiddler(charles)工具抓包,或者浏览器上F12调试工具;APP上的话,使用fiddler做代理,通过手机设置代理去请求和返回报文。
查看后端日志,如linux系统通过xshell连上服务器,查看接口日志,查看是否有报错信息
22、如何分析一个bug是前端还是后端的?
先抓包看请求报文,对着接口文档,看请求报文有没有问题,有问题就是前端发的数据不对,请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题
23、接口(API)文档包含哪些部分
1. 包含请求方法、请求地址
2. 请求参数(主要在请求体中,有的参数在URL中)
3.返回结果说明(预期结果)