接口测试概述
要进行接口测试,我们肯定要了解什么是接口?什么是接口测试?为什么要进行接口测试?HTTP协议等等知识。
什么是接口
是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作的细节
什么是接口测试
接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系,其中接口协议分为:HTTP,WebServices,Dubbo,Thrift,Socket类型
为什么要进行接口测试
接口测试实施在多系统的平台架构下,有着极为高效的成本收益比
1.节约了测试成本
根据数据模型推算,底层的一个程序bug可能引发UI层的8个左右的bug,而且底层的bug更容易引起全网的死机,接口测试能够提供系统复杂度上升情况下的低成本高效率的解决方案
2.接口测试门槛较低
接口测试是站在用户的角度对系统接口进行全面高效持续的检测
3.效益更高
将接口测试实现为自动化和持续集成,当系统复杂度和体积越大,接口测试的成本就越低,相对应的,效率产出就越高
HTTP协议
HTTP协议是用于从服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少,它不仅保证计算机正确快速的传输超文本协议,还确定传输文档中的哪一部分,以及哪部分内容首先显示等。
HTTP特点
1.无连接
无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,既断开连接,采用这种方式可以节省传输时间。
2.媒体独立
这意味着,只要客户端和服务端知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的MIME
3.无状态
HTTP协议是无状态的,无状态是指协议对于事务处理没有记忆能力,如果服务器不需要先前信息,那么它的应答就比较快,但是缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,此时可以设置缓冲
HTTP与HTTPS
HTTPS简单来讲是HTTP的安全版,既HTTP下加入了ssl层,简称HTTPS
HTTPS的安全基础是SSL,因此通过它传输的内容都是经过SSL加密的,它的主要作用分为两种:
1.建立一个信息安全通道,来保证数据传输的安全
2.确认网站的真实性,凡是使用https的网站,都可以点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过CA机构颁发的安全签章来查询
Request
Request 既请求,由客户端向服务端发出,可以将Request划分为四部分内容
Request Method:请求方法
Request URL:请求链接
Request Headers:请求头
Request Body:请求体
Request Method
请求方法。常见的有两种类型,GET和POST
GET用于信息获取,而且应该是安全的和幂等的(幂等的意思就是一个操作不会修改状态信息,并且每次操作的时候都返回同样的结果)从发送请求的角度,GET请求相当于我们在数据库中做了查询的操作,这样的操作不影响数据库本身的数据。
POST表示可能会修改服务器上资源的请求,也想当于在数据库中做了修改的操作,会影响数据库本身的数据。
除了常规的GET,POST请求,另外还有一些请求方式,如HEAD,PUT,DELETE等
GET 并返回实体主体
POST 向指定资源提交数据进行处理请求,数据被包含在请求体中
PUT 从客户端向服务器传送的数据取代指定的文档的内容,相当于更新
PATCH 对PUT方法的补充,用来对已知资源进行局部更新
DELETE 请求服务器删除指定的页面
HEAD 类似于GET请求,只不过返回的响应中没有具体的请求,用于获取报头
CONNECt HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS 允许客户端查看服务器的性能
TRACE 回显服务器收到的请求,主要用于测试或诊断
Request Header
请求头,用来说明服务器要使用的附加信息,比较重要的有Cookie,Referer,User-Agent等
Accept:请求报头域,用于指定客户端可接受哪些类型的信息
Accept-Language:指定客户端可接受的语言类型
Accept-Encoding:指定客户端可接受的内容编码
Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置,从HTTP1.1开始,Request必须包含此内容
Cookie:也常用Cookies,是网站为了辨别用户进行Session跟踪而储存在用户本地的数据,Cookies的主要功能是维持当前访问会话
Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计,做防盗链处理等
User-Agent:简称UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本,浏览器及版本等信息,在做爬虫时加上此信息可以伪装为浏览器,如果不加很可能会被识别为爬虫
content-type:既Internet Media Type,互联网媒体类型,也叫做MIME类型,在HTTP协议消息头中,使用它来表示具体请求中的媒体类型信息,例如application/x-www-form-urlencoded表示表单数据,text/html代表HTML格式,image/gif代表GIF图片,application/json代表json类型
Request Body
既请求体,一般用于POST请求中,主要定义向服务器提交的数据类型,而对于GET请求Request Body则为空
比如在登录之前我们填写了用户名和密码信息,提交时这些信息就会以Form Data的形式提交给服务器,此时注意Request Headers中指定了connect-Type为application/x-www-form-urlencoded,只有设置connect-Type为application/x-www-form-urlencoded才会以Form Data形式提交,另外我们可以将Connect-Type设置为application/json来提交Json数据,或者设置为multipart/form-data来上传文件
常用Connect-Type和POST提交数据方式的关系
Connect-Type 提交数据方式
application/x-www-form-urlencoded 表单方式提交
multipart/form-data 表单文件上传提交
application/json 序列化Json数据提交
text/xml XML数据提交
application/x-www-form-urlencode与multipart/form-data的区别
在没有type=file时候,用默认的application/x-www-form-urlencode就行
在有type=file时,要用multipart/form-data编码方式,浏览器会把表单以控件为单位分割,并且为每个部分加上Content-Disposition(from-data或file),Content-Type(默认为text/plain)
Response
Response,既响应,由服务端返回给客户端,Response可以划分为三部分
Response Status Code
Response Headers
Response Body
Response Status Code
响应状态码,此状态码表示了服务器的响应状态,如200则表示服务器正常响应,404则表示页面未找到,500则表示服务器内部发生错误,常用状态码如下
200 成功 服务器已成功处理了请求
201 已创建 请求成功并且服务器创建了新的资源
301 永久移动 请求的网页已永久移动到新位置,既永久重定向
302 临时移动 请求的网页暂时跳转到其他页面,既暂时重定向
400 错误请求 服务器无法解析该请求
401 未授权 请求没有进行身份验证或验证未通过
403 禁止访问 服务器拒绝此请求
404 未找到 服务器找不到请求的网页
500 服务器内部错误 服务器遇到错误,无法完成请求
501 未实现 服务器不具备完成此请求的功能
502 错误网关 服务器作为网关或代理,从上游服务器收到无效响应
Response Headers
响应头,其中包含了服务器对请求的应答信息,如Content-Type,Server,Set-Cookie等,下面将一些常用的头信息说明如下
Date:标明Response产生的时间
Last-Modified:指定资源的最后修改时间
Content-Encoding:指定Response的编码
server:包含了服务器的信息,名称,版本号等
Content-Type:文档类型,指定了返回的数据类型是什么,如text/html则返回HTML文档,application/x-javascript则代表返回javascript文件,image/jpeg则返回了图片
Set-Cookies:设置Cookie,Response Headers中的Set-Cookies既告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies内容
Expires,指定Response的过期时间,使用它可以控制代理服务器或者浏览器将内容更新到缓冲中,如果在次访问时,直接从缓冲中加载,降低服务器负载,缩短加载时间
Response Body
既响应体,响应的正文数据都是在响应体中,如请求一个网页,它的响应体就是网页HTML代码,请求一张图片,它的响应体就是图片的二进制数据,一般在接口的响应内容大多都是json数据内容
Json
json数据类型是做接口自动化必须要知道的,后期整理接口自动化文档时在详细说
json是一种轻量级的数据交换格式,它独立于语言和平台,json解析器和json库支持不同的编程语言,json具有自我描述性,很容易理解,目前大多数接口返回的数据类型为json‘
json数据解析
python中可以使用json模块来对json数据进行编解码,它包含了两个方法
json.dumps()将python数据转化为json数据
json.loads()将json数据转化为python数据类型
看两段代码
import json data = {'id': 3, 'name': 'zouzou', 'pwd': '77'} print(type(data)) json_data = json.dumps(data) print(type(json_data)) print(json_data) 执行结果: <class 'dict'> <class 'str'> {"id": 3, "name": "zouzou", "pwd": "77"}
import json #外面必须是单引号 json_data='{"id":3,"name":"zouzou","pwd":"77"}' print(type(json_data)) data=json.loads(json_data) print(type(data)) print(data) 执行结果: <class 'str'> <class 'dict'> {'id': 3, 'name': 'zouzou', 'pwd': '77'}