整理了网课的PPT和老师的知识要点笔记:
URL:统一资源定位符,一般来说,一个URL由5个部分构成:
protocol,domain,port,path,URL parameters。
protocaol:协议,协议是指通信双方对于通信所采用的数据的组织格式,规程,含义等所做的一个约定。协议是分层的(参考OSI,TCP/IP),通常来说,接口测试中使用到的协议是位于应用层的协议。常见的协议有:http(HypeText Transfer Protocal)https(http+ssl),ftp,ssh,smtp,pop3,mysql,oracle等。
Domain:域名,是我们要访问的服务器的机器名,域名,ip地址等。有一些接口文档中没有给出域名,要根据测试环境的服务器来决定这个参数。
Port:端口号,在域名之后domain:port。端口号是由服务器(软件)来设置指定的,服务器就会去时刻不停地监听用户发送到指定端口的请求。如果服务器设定的端口和其所用的通信协议是默认的对应关系,则用户在使用url访问服务时,端口可以省略。端口好的范围为0-65535,一般自定义端口号使用10000以后的比较安全,不会和一些默认协议端口冲突。常见的协议以及对应的默认通信端口为:
http:80 https:443/8443 ssh:22
ftp:21 smtp:25 pop3:110
mysql:3306 oracle:1521
path:是指端口之后的所有内容,path通常是指我们要访问的资源or服务在服务器的容器路径下的绝对地址。
url parameters:url地址参数,是以问好?作为链接符,拼接在path之后的,url地址参数采用键值对的方式,多个键值对之间使用&作为链接符。
注意:从协议的角度,url是没有长度限制,但是很多浏览器对url的长度作出了限制,所以不能把所有参数都放在url中,可以放在请求体中。
http协议:超文本传输协议,是BS应用中普遍使用的一种协议。目前来说,该协议因其本身的快速,灵活的特性,已经在很多领域得到广泛的应用。
特点:
1. http协议是一种基于request和response的协议
2. http协议是一种简单,灵活的协议,只需要指定方法,url即可实现访问。
3. http协议是一种无链接,快速的协议。
http的无链接是指短链接(信息头中的标识connection:close)从http1.1版本开始,默认已经变更为长链接(信息头中的标识connection:keep-alive)
短链接:一个tcp链接之上只能建立一个http链接,http链接关闭,则对应的tcp链接也会关闭。
长链接:一个tcp链接之上可以建立多个http链接,heep链接关闭,tcp链接不会关闭,直到收到关闭信号位置。
http2.0实现了多路复用,但还是基于tcp协议的。
http3.0计划将弃用tcp协议,使用udp协议。
4. http协议是一种无状态的协议,后引入了session和cookie机制来维持状态。
http request:http请求,通常包含三个部分:request line,request headers,request body。
request line:请求行,是指请求数据包中的第一行内容:
eg:GET /phpwind/ HTTP/1.1
request method请求方法+request path请求路径+ protocol协议/version协议版本
request method请求方法:如果没有指定,将使用默认的方法get
get和post:都是请求方法,都可以向服务器传递数据,区别在于,如果使用get方法发送数据,数据将组织在url地址参数中,使用post方法发送数据,数据将位于请求主体中。
post方法比get方法要安全,并不是因为参数的组织形式,而是因为post方法请求在客户端是不会缓存的,而get方法请求在客户端是会有缓存的。
request headers:请求头,是指从第二行开始到第一个空行截止的部分。请求头是客户端用于和服务器进行信息交互,控制的一个部分,通常来说和业务无关,请求头中的参数是键值对形式的,每对参数都是有特殊作用的。常见的请求头参数:
User-agent:是用来告知服务器,客户端的一些节本信息,服务器是通过该信息来识别客户端。通常来说session是和该信息头有关,建议全局统一。
content-type:如果请求主体有内容,则该信息头必须加上,是用于指定请求主体中参数的形式的。
cookie,auth,token:是和鉴权相关的信息。postman会自动管理和保存请求的cookie,而Jemeter需要添加自己添加cookie管理器来保存请求cookie。
在接口测试抓包时,还要关注accept-encoding参数,如果是gzip,表示接口回传的数据是压缩过的。接口测试的时候需要指定这个参数,不然发起的接口测试的压力和实际使用接口时会差别很大。
带上accept-encoding:gzip,deflate时,返回的数据大小是13277bytes
disable HTTP信息头管理器之后,返回数据的大小变成了54191byte:
如果是多语言的接口,还需要关注头文件中的Accept-Language。
request body:请求主体,是指从第一个空行之后的所有内容。通常来说请求主体就是我们的客户端所封装的数据。客户端封装数据的格式是由客户端(产品,接口)来决定的,我们只能遵循,不能自定义。
掌握http请求的构成和要点之后,就能够帮助我们去完成基本的接口脚本的封装。
http response:http响应,通常来说,http响应也是由三部分构成:response line,response header,response body。
response line:响应行,是指响应数据包的第一行。
eg:HTTP/1.1 200 OK
protocol/version +response code + response message
response code:响应状态码,是服务器用来告知客户端,服务器对请求的处理状态,这里的处理状态仅仅是从通信逻辑上的处理状态,而不是业务逻辑的处理状态。
响应状态码通常是由3位长度的数字构成,根据首位数字的不同,可以分为5类:
1**:表示链接建立过程中的通信,交互信息。
2**:表示服务器处理成功,典型的是200。
3**:表示重定向。
1**,2**,3**都表示客户端和服务器通信是成功的,但是最终业务是否正确,还是要根据对响应主体的检测才可以判断。
4**:表示客户端错误。404
5**:表示服务器错误。
websocket:简称ws协议,本质上是双方先使用http协议建立链接,然后再升级申请专属的tcp链接。
老师使用的抓包工具HttpWatch: