·接口测试核心:URL&HTTP协议详解
·URL:统一资源定位器,通常来说是由五个部分构成:
·protocol:协议
·domain:域名
·port:端口
·path:路径
·URL Parameters:URL地址参数。
示例:https://ke.qq.com/course/317690?tuin=15945f87
·协议:通常就是://之前的部分,协议是指通信双方对于通信的数据的组织格式、含义、规程等所做的约定。
一般来说,对于接口测试而言,最重要的就是协议。一般接口测试都是从应用层的协议进行模拟发送数据。
常见的应用层协议有:
http
https:http+ssl
ftp:
ssh:
smtp:
pop3:
oracle:
mysql:
sql server:
·域名:域名就是指要访问的服务器的地址,可能是域名、计算机名、IP地址。
比如说:
ke.qq.com
www.baidu.com
14.215.177.39
·端口:端口是跟在域名之后,是由服务器(服务器软件)来进行设置的。端口是服务器用来监听、接收客户端的请求的。
格式:“域名:端口”
如果端口是通信协议的默认通信端口,则用户在通过url访问服务器时,是可以省略不写的。
常见的协议及其默认通信端口:
http: 80
https:http+ssl 443 or8443
ftp: 21
ssh: 22
smtp: 25
pop3: 110
oracle: 1521
mysql: 3306
sql server: 1433
·路径:就是要访问的资源or服务在服务器容器路径下的地址。
一般来说,路径体现的就是业务的逻辑。
·URL地址参数:通常来说就是指以问号?作为连接符,连接在path之后的部分。
PS:
·URL地址参数的数据组织格式为:键值对应,即key1=value1&key2=value2&...&keyN=valueN
·在很多工具中,URL地址参数是直接算在path部分的。
·http协议:hypetex transfer protocol、超文本传输协议。
·http协议的特点:
·http协议是一种基于request(请求)和response(响应)的协议。
·http协议是一种简单、灵活的协议。
·http协议是一种快速、无连接的协议。
http1.0及以前默认是无连接(短连接)。
http1.1及之后默认是长连接的。
短连接:是指一个tcp连接上只能建立、完成一个http连接。
长连接:是指一个tcp连接上可以建立、完成多个http连接。
标志:通过信息头Connection:keep-alived
·http协议是一种无状态的协议。
后来引入了session和cookie机制来实现状态的记录。
·准备工作:准备一张抓包工具,看数据时建议直接看raw或者source的数据,这样的数据是原始数据,没有被抓包工具解析过的。
·http协议详解:
http协议是由两个部分构成:http request、http response。
了解和掌握http request是我们去实现接口测试的重要基础。
了解和掌握http response是保证我们的接口测试脚本准确性的基础。
·http request:http请求,通常来说是由三个部分构成:
·request line:请求行
·request headers:请求头
·request body:请求主体。
·request line:请求行、通常来说就是请求数据包中的第一行内容,包含以下信息:
request method、request path、 protocol/version
示例:
GET /phpwind/ HTTP/1.1
·request method:请求方法,一个http请求是必须有请求方法的,如果不指定,则默认为get方法。
常见的请求方法有:
get、post、put、delete、patch、options、trace、header等。
接口所使用的请求方法不是由测试决定,而是由应用、接口本身决定。
对于浏览器应用而言:
get方法所传递的参数一般都是在URL地址参数部分,反之亦然。
post方法所传递的参数一般都是在request body部分。
·request path:请求路径,即URL中的路径部分。
·protocol/version:协议/版本,请求和响应是必然一致的。
·request headers:请求头、是指从请求数据包的第二行开始,到第一个空行截止的部分。
一般来说,请求头是客户端用来和服务器进行通信、控制信息的交互的,和业务通常无关(状态信息头除外:cookie、author、token、csrf)。
请求头是键值对应,请求头的名称是由http协议规定的,不同的请求头代表不同的含义。
重要的请求头:
·User-Agent:客户端用来告知服务器客户端的配置信息,通常和cookie、session等状态信息的生成有关。
建议设置为一个统一的全局的信息头。
·Cookie:状态类的信息头。
·Content-Type: 是客户端用来告知服务器,所发送的请求主体(request body)的数据组织格式。
不同的请求,该信息头的值可能不一样。
要求:要保证Content-Type的值和实际发送的内容的一致性。
·request body:请求主体。是指请求数据包中从第一个空行开始到最后的所有内容。
请求主体就是由客户端(业务)向服务器发送的数据部分。
PS:只要请求主体有值,一定要记得添加信息头:Content-Type
·http response:http响应,通常来说也是由三个部分构成:
·response line:响应行
·response header:响应头
·response body:响应主体
·response line:响应行、通常来说就是指响应数据包中的第一行内容,通常包含以下信息:
protocol/version、response code、response message
示例:
HTTP/1.1 200 OK
·response code:响应代码,又叫状态码。是服务器用来告知客户端,服务器对于请求的逻辑处理情况。逻辑处理仅仅是指网络通信层面的处理,和业务无关。
响应代码通常是三位长度的数字,一般根据首位数字的不同,可以将状态码分为以下几类:
·1xx:表示通信建立过程中所传递的信息。
·2xx:典型的就是200,表示服务器处理成功。
·3xx:表示重定向。
PS:1xx、2xx、3xx表示客户端和服务器的连接通信是成功的。
·4xx:客户端错误
·5xx:服务器错误
从接口和性能测试的角度来说,出现4xx和5xx,则说明脚本一定是没有成功实现业务的。
一旦出现4xx和5xx错误,则建议根据成功的业务的抓包来进行对比分析。
·response message:响应信息,是用来描述响应代码的,没有任何实际作用。
·response header:响应头、是指从响应数据包中的第二行开始到第一个空行截止的部分。
类型、作用、格式等都和请求头类似,区别只是在于是服务器响应给客户端的。
·response body:响应主体、是指响应数据包中从第一个空行之后的所有内容。
通常来说就是服务器对于请求的处理结果。