漫游测试之性能测试(2.1、HTTP的简要描述)
HTTP协议是日常工作中的主要用到的协议,因此了解此协议也是进行大多数后端性能测试工作的前端。
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议,它是一个应用层协议,由请求和响应构成。HTTP是一个无状态的协议。
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上此时称之为HTTPS协议。如下图所示:
HTTP协议都是客户端发起请求,服务器回送响应,HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。
一次HTTP操作称为一个事务,其工作过程可分为5步:
a)首先客户机与服务器需要建立连接(创建连接,比如说点击某个连接)。
b)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号、请求修饰符、内容等等。
c)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码可能的内容等。
d)客户端接收服务器所返回的信息
e)然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端。返回的错误信息不定会在应用中进行体现,但是通过抓包是肯定能够看到的。
网上这篇文章对此过程进行了描述和计解:
出自:https://www.cnblogs.com/wangning528/p/6388464.html
如下例所示一个HTTP协议发出的请求:
C代码客户端,S代码服务端的返回;根据上图,可知HTTP的内容无论是发出请求的客户端还是回应的服务端消息,其只包括2部分内容,即地址、包头、内容;
HTTP请求的方法、地址、版本:POST http://experiment.appadhoc.com/get_flags_async HTTP/1.1
请求包头:
Host: experiment.appadhoc.com
Connection: keep-alive
Content-Length: 535
Origin: http://blog.****.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
Content-Type: application/json;charset=UTF-8
Accept: */*
Referer: http://blog.****.net/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
请求内容:
{"app_key":"ADHOC_3f25bcb4-f154-4b7c-8a82-f79b81816578","client_id":"621f3b94-de90-3ec1-50de-c5a875480dde"}
响应包头:
HTTP/1.1 200 OK
Server: Tengine/2.1.2
Date: Wed, 31 Jan 2018 01:24:57 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 73
Connection: keep-alive
Access-Control-Allow-Origin: *
响应内容:
{"experiments":[{"id":"CONTROL","name":"CONTROL","flags":[]}],"flags":{}}
客户端请求的时候包头的字段非常多,当遇到不熟悉的包头时,需要引起注意,了解其含义,有时脚本的运行可能就依赖这个包头,比如以下请求的token包头用来控制用户的session信息:
POST http://xxx.xx.xx.xx:5408/app/xxxxName.do HTTP/1.1
Host: xxx.xx.xx.xx:5408
Accept: */*
version: 3.1.1
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept-Language: zh-Hans-CN;q=1
platform: ios
flag: 01
token: 0f7ce211b91f454e8a57023da02cbe79
User-Agent: QHZC_DEV/3.1.1 (iPhone; iOS 10.3.3; Scale/2.00)
Connection: keep-alive
Content-Length: 63
Content-Type: application/x-www-form-urlencoded
如果想了解更多的包头字段http://blog.****.net/charleslei/article/details/50621912。
返回消息包头一般不需要太观注,一般只在登录后获取到的session消息用来传递到下面的请求,一般的性能测试工具都可以自动的关联session。
比如某登录请求的响应:
下一个请求中使用到了上一个请求返回中的seesion信息。
HTTP一共有8种请求方法,但我们实际工作中经常遇到的大多只有GET和POST方法:
GET 方法:
向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。
POST 方法:
向指定资源提交数据进行处理请求,如提交表单或者上传文件。POST请求可能会导致新的资源的建立和/或已有资源的修改。
更多HTTP方法:http://blog.****.net/resilient/article/details/52585724。