接⼝基础知识
在正式进⼊接⼝测试之前,我们来回忆和补充⼀下关于接⼝的基础知识,这将为我们后⾯做接⼝测试奠定基础。好了,废话不多说,直接上⼲货。
1、接⼝的分类
硬件接⼝:指的是两个硬件设备之间的连接⽅式(⽐如:⿏标和电脑之间通过USB接⼝进⾏连接);
软件接⼝:简单来书就是软件程序之间数据交互的通道。
2、软件接⼝分类
程序内部接⼝:指的是客户端与服务器的接⼝,⽤来实现客户端和服务器间的数据传递;
外部接⼝:外部接⼝常见的例⼦就是通过第三⽅登录、第三⽅⽀付等,通过调⽤第三⽅的忌⼝并返回当前的系统。
1)常见的接⼝协议
WebService接⼝:使⽤soap协议通过http传输,请求报⽂和返回报⽂都是xml格式的,常⽤的测试⼯具
有soapUI;
http协议接⼝:⽬前使⽤最⼴泛,使⽤http协议来传输数据,常见的请求⽅法有:get、post等,常⽤的测试⼯具有postman、jmeter等。
2)什么是接⼝测试
  接⼝测试本质是基于某种协议,发送⼀个请求给服务器,然后服务器返回⼀个响应数据,通过对响应数据的分析,判断是否与我们预期的返回⼀致,从⽽验证功能是否正确,这就是接⼝测试。
那么,客户端到底是如何向服务器发送请求的呢?
3、HTTP协议解读
1)初识HTTP协议
HTTP协议:超⽂本传输协议(HyperText Transfer Protocol)是互联⽹上应⽤最为⼴泛的⼀种⽹络协议。所有的HTML⽂件都必须遵守这个标准。设计HTTP最初的⽬的就是为了提供⼀种发布和接受HTML页⾯的⽅法。
HTTPS协议:(HyperText Transfer Protocol over Secure Socket Layer)简单讲就是HTTP协议的安全版,在HTTP协议下加⼊了SSL层。
SSL:(Secure Socket Layer 安全套接层)主要⽤于Web的安全传输协议,在传输层对⽹络连接进⾏加密,保障在Internet上数据传输的安全。
HTTP的默认端⼝:80
HTTPS的默认端⼝:443
发送邮件:25
加密邮件端⼝:465
2)HTTP请求的过程
客户端:PC端应⽤程序、浏览器、APP、⼩程序、爬⾍(代码)
HTTP通信由两部分组成:客户端请求信息和服务器响应信息。
当⽤户在浏览器输⼊⼀个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“GET”和“POST”两种⽅法。
当我们在浏览器输⼊“www.baidu”时,浏览器会发送⼀个Request请求去获取“www.baidu”的html⽂件,服务器把Response⽂件对象发送回给浏览器。
浏览器分析Response中的html,发现其中引⽤了很多⽂件,⽐如Image⽂件、CSS⽂件、JS⽂件。浏览器对⾃动再去发送Request去获取图⽚、CSS⽂件或者JS⽂件。
当所有的⽂件都下载成功后,⽹页会根据HTML语法结构,完整的显⽰出来。
3)HTTP请求信息
在浏览器输⼊URL地址访问某个⽹站,发送⼀个HTTP请求到服务器的请求消息,包含以下格式:
请求⾏:
请求⾏以⼀个⽅法符号开头,后⾯跟着请求URI和协议的版本,以CRLF作为结尾。
请求⾏以空格分隔。除了作为结尾的CRLF外,不允许出现单独的CR或LF字符,格式如下:Method Request-URI HTTP-Version CRLF。Method表⽰请求的⽅法,Request-URI是⼀个统⼀资源标识符,标识了要请求的资源,HTTP-Version表⽰请求的HTTP协议
版本,CRLF表⽰回车换⾏。例如:GET /test.html HTTP/1.1 (CRLF)
请求头部(request headers):
HOST(主机和端⼝号):对应⽹址URL中的Web名称和端⼝号(域名);
Connection(链接类型):表⽰客户端与服务器的链接类型:keep-alive表⽰长链接(HTTP/1.1使⽤keep-alive为默认值);
Upgrade-Insecure-Requests(升级为HTTPS请求):升级不安全的请求,意思是会在加载HTTP资源是⾃动替换成https请求,让浏览器不再显⽰https页⾯中的http请求警报。
User-Agent(浏览器名称):是客户浏览器的名称。
Accept(传输⽂件类型):指浏览器或者其他客户端可以接受的⽂件类型,服务器可以根据它判断并返回适当的⽂件格式: Accept:text/html,application/xhtml+xml;q=0.9,image/*;q=0.8:表⽰浏览器⽀持的⽂本类型分别为 html⽂本、xhtml和
xmlendanger、所有的格式图像资源;
Text:⽂本信息,可以是多种字符集的和或者多种格式的;
Application:⽤于传输应⽤程序数据或者⼆进制数据;
q:权重系数,范围为1 >= q >=0,q值越⼤,越靠前。默认为1,按从左到右排序顺序,q值为0,表⽰浏览器不接受此类型。
Referer(页⾯跳转处):表⽰请求的⽹页来⾃哪个URL,⽤户是从该Referer页⾯访问到该页⾯的。这个属性可以⽤来追踪Web请求来⾃哪个页⾯,是从什么⽹站来的等。session和application的区别
Application-Encoding(⽂件编解码格式):指出浏览器可以接受的编码⽅式。编码⽅式不同于⽂件格式,它是为了压缩⽂件并加速⽂件传递速度。浏览器在接收到Web响应之后会先解码,然后再检查⽂件格式,许多情况下这可以节省⼤量的下载时间;
Accept-Language(语⾔种类):指出浏览器可以接受的语⾔种类,如en或en-us表⽰英语,zh或者zh-cn表⽰中⽂,当服务器能够提供⼀种以上的语⾔版本时要⽤到。
Cache-Control:max-age= 0:明确表⽰不会缓存服务器资源;
Accpet-Charset(字符编码):指出浏览器可以接受的字符编码。如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受;
Cookie:浏览器⽤这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的⼩型数据体,⽤以记载和服务器相关的⽤户信息,也可以⽤来实现会话功能,后⾯我们会详细介绍;
Content-Type(POST数据类型):POST请求⾥⽤来表⽰的内容类型。
4)HTTP响应数据
服务器接收到请求后,返回的HTTP响应也由4部分组成,分别是:
状态⾏:⼀个数字与⽂字组成的状态码,⽤来显⽰请求成功失败信息,如:Status Code:  200 OK
消息报头:响应头与请求头包含许多有⽤信息,例如:服务器类型、⽇期时间、内容类型和长度等。
服务器端的响应Header(response header)
Connection:keep-alive(针对该连接所预期的选项)
Content-Disposition:inline;(对已知MIME类型资源的描述,浏览器可以根据这个响应头决定是对返回资源的动作,如:将其下载或是打开。)
Content-Type:application/json;charset=UTF-8(当前内容的MIME类型)
Date:Wed, 07 Nov 2018 09:33:39 GMT*(此条消息被发送时的⽇期和时间(以中定义的"HTTP⽇期"格式来表⽰))
Server:Tengine(服务器的名称)
Transfer-Encoding: chunked(⽤表⽰实体传输给⽤户的编码形式。包括:chunked、compress、 deflate、gzip、identity。)
空⾏:⽤来分割
响应体:即响应正⽂。
5)HTTP响应状态码
1xx(临时响应)表⽰临时响应并需要请求者继续执⾏操作的状态代码。
100 (继续)请求者应当继续提出请求。服务器返回此代码表⽰已收到请求的第⼀部分,正在等待其余部分。
101 (切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。
2XX (成功)  都表⽰服务器成功处理了请求的状态代码,说明⽹页可以正常访问。
200(成功)服务器已成功处理了请求。通常,这表⽰服务器提供了请求的⽹页。
201(已创建)请求成功且服务器已创建了新的资源。
202(已接受)服务器已接受了请求,但尚未对其进⾏处理。
203(⾮授权信息)服务器已成功处理了请求,但返回了可能来⾃另⼀来源的信息。
204(⽆内容)服务器成功处理了请求,但未返回任何内容。
205(重置内容)服务器成功处理了请求,但未返回任何内容。与 204 响应不同,此响应要求请求者重置⽂档视图(例如清除表单内容以输⼊新内容)。
206(部分内容)服务器成功处理了部分 GET 请求。
3xx (重定向)表⽰要完成请求,需要进⼀步操作。通常,这些状态代码⽤来重定向。
300 (多种选择)针对请求,服务器可执⾏多种操作。服务器可根据请求者 (user agent) 选择⼀项操作,或提供操作列表供请求者选择。301 (永久移动)请求的⽹页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会⾃动将请求者转到新位置。
302 (临时移动)服务器⽬前从不同位置的⽹页响应请求,但请求者应继续使⽤原有位置来进⾏以后的请求。
303 (查看其他位置)请求者应当对不同的位置使⽤单独的 GET 请求来检索响应时,服务器返回此代码。
304 (未修改)⾃从上次请求后,请求的⽹页未修改过。服务器返回此响应时,不会返回⽹页内容。
305 (使⽤代理)请求者只能使⽤代理访问请求的⽹页。如果服务器返回此响应,还表⽰请求者应使⽤代理。
307 (临时重定向)服务器⽬前从不同位置的⽹页响应请求,但请求者应继续使⽤原有位置来进⾏以后的请求。
4xx(请求错误)这些状态代码表⽰请求可能出错,妨碍了服务器的处理。
400 (错误请求)服务器不理解请求的语法。
401 (未授权)请求要求⾝份验证。对于需要登录的⽹页,服务器可能返回此响应。
403 (禁⽌)服务器拒绝请求。
404 (未到)服务器不到请求的⽹页。
405 (⽅法禁⽤)禁⽤请求中指定的⽅法。
406 (不接受)⽆法使⽤请求的内容特性响应请求的⽹页。
407 (需要代理授权)此状态代码与 401(未授权)类似,但指定请求者应当授权使⽤代理。
408 (请求超时)服务器等候请求时发⽣超时。
409 (冲突)服务器在完成请求时发⽣冲突。服务器必须在响应中包含有关冲突的信息。
410 (已删除)如果请求的资源已永久删除,服务器就会返回此响应。
411 (需要有效长度)服务器不接受不含有效内容长度标头字段的请求。
412 (未满⾜前提条件)服务器未满⾜请求者在请求中设置的其中⼀个前提条件。
413 (请求实体过⼤)服务器⽆法处理请求,因为请求实体过⼤,超出服务器的处理能⼒。
414 (请求的 URI 过长)请求的 URI(通常为⽹址)过长,服务器⽆法处理。
415 (不⽀持的媒体类型)请求的格式不受请求页⾯的⽀持。
416 (请求范围不符合要求)如果页⾯⽆法提供请求的范围,则服务器会返回此状态代码。
417 (未满⾜期望值)服务器未满⾜”期望”请求标头字段的要求。
5xx(服务器错误)这些状态代码表⽰服务器在尝试处理请求时发⽣内部错误。这些错误可能是服务器本⾝的错误,⽽不是请求出错。
500 (服务器内部错误)服务器遇到错误,⽆法完成请求。
501 (尚未实施)服务器不具备完成请求的功能。例如,服务器⽆法识别请求⽅法时可能会返回此代码。
502 (错误⽹关)服务器作为⽹关或代理,从上游服务器收到⽆效响应。
503 (服务不可⽤)服务器⽬前⽆法使⽤(由于超载或停机维护)。通常,这只是暂时状态。
504 (⽹关超时)服务器作为⽹关或代理,但是没有及时从上游服务器收到请求。
505 (HTTP 版本不受⽀持)服务器不⽀持请求中所⽤的 HTTP 协议版本。
6)HTTP请求⽅法
根据HTTP标准,HTTP请求可以使⽤多种请求⽅法:
HTTP请求常⽤的GET和POST两种⽅法:
GET是从服务器上获取数据,POST是向服务器传送数据;
GET请求参数显⽰,都显⽰在浏览器⽹址上,HTTP服务器根据该请求所包含URL中的参数来返回响应内容,即 GET请求的参数是URL的⼀部
分。例如:www.baidu?username=cactus&userid=666;
POST请求参数在请求体中,消息长度没有限制⽽且以隐式的⽅式进⾏发送,通常⽤来向服务器提交量⽐较⼤的数据(⽐如请求中包含许多参数或者⽂件上传操作等),请求的参数存在“Content-Type”消息头⾥,指明该消息体的媒体类型和编码。
4、鉴权、授权
我们先来思考⼀个问题,浏览器登录了某些⽹站(⽐如腾讯视频),下次访问为什么不要登录?这其实就是鉴权和授权的原因,下⾯我们将为⼤家详细介绍鉴权和授权,相信⼤家看完之后会对鉴权和授权有更深的了解。
⽤两句话来理解鉴权和授权:
授权:相当于给⼀个通⾏证;
鉴权:鉴定是否有权限访问(判断有没有通⾏证)。
1)Cookies和session
⾸先我们⽤⼀张图来表⽰它们之间的关系:
cookie:
cookie是在HTTP协议下,服务器或脚本可以使⽤⽤户信息的⼀种⽅式。cookie是由web服务器保存在⽤户浏览器(客户端)上的⼩⽂本⽂件,它可以包含有关⽤户的信息。⽆论何时⽤户访问到服务器,都会带上该服务器的cookie信息。
⼀般cookie都是有有效期的,cookie只在浏览器上保存⼀段规定的时间,⼀旦超过规定得到时间,该cookie就会被系统清除。
session:
session将数据存储在服务器中,服务器会为每⼀个⽤户创建⼀条session,⽤户访问服务器的时候需要拿着session去表明⾃⼰的⾝份。
session的实现是基于cookie,session需要借助于cookie来存储sessionID。
token和session的区别:
token是需要⼿动传到参数当中的。session派发的session_id会⾃动存储在浏览器的cookie中,在下次访问这个⽹站的时候,会⾃动带上;
session_id会存到服务器,需要消耗资源,在浏览器传输过来后要进⾏查询,也会消耗资源;
token不需要存储的服务器,服务器会解密,消耗的是cpu;
token可以跨平台、跨域。session是和域名绑定的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。