zoukankan      html  css  js  c++  java
  • 接口基础知识

    在正式进入接口测试之前,我们来回忆和补充一下关于接口的基础知识,这将为我们后面做接口测试奠定基础。好了,废话不多说,直接上干货。

    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”两种方法。
    • 当我们在浏览器输入“http://www.baidu.com”时,浏览器会发送一个Request请求去获取“http://www.baidu.com”的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请求来自哪个页面,是从什么网站来的等。
    • 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;filename=f.txt( 对已知MIME类型资源的描述,浏览器可以根据这个响应头决定是对返回资源的动作,如:将其下载或是打开。)
    • Content-Type:application/json;charset=UTF-8( 当前内容的MIME类型)
    • Date:Wed, 07 Nov 2018 09:33:39 GMT*( 此条消息被发送时的日期和时间(以RFC 7231中定义的"HTTP日期"格式来表示))
    • Server:Tengine( 服务器的名称)
    • Transfer-Encoding: chunked( 用表示实体传输给用户的编码形式。包括:chunkedcompress、 deflategzipidentity。)

    空行:用来分割

    响应体:即响应正文。

    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的一部分。例如:http://www.baidu.com?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是和域名绑定的。
  • 相关阅读:
    HDU 1165 Eddy's research II (推公式)
    HDU 1394 Minimum Inversion Number (线段树&&暴力)
    HDU 2845 Beans (最大不连续子序列和)
    CodeForces 369A Valera and Plates( 水)
    HDU 1241 Oil Deposits(dfs)
    hdu 1016 Prime Ring Problem(dfs)
    hdu 5138 CET-6 test(水)
    ZOJ 3693 Happy Great BG(卡精度)
    HDU 1028 Ignatius and the Princess III(dp 母函数)
    CodeForces 432B Football Kit(水)
  • 原文地址:https://www.cnblogs.com/Cactus-xiaot/p/13049102.html
Copyright © 2011-2022 走看看