2024年3月13日发(作者:)

HTTP接口测试教程

HTTP基础知识介绍:

HTTP协议中文名超文本传输协议,适用于OSI七层协议中的应用层,在web应用中

使用抓包工具(例如fiddler)可以了解到,一个完整的HTTP协议都包含了请求和响应的

过程。请求有开始行、请求头、body构成;响应由状态行、信息头、响应报文构成;

开始行

开始行一般有三部分构成:分别是请求方式、请求地址的相对路径、HTTP的版本,

我们需要重点理解一下HTTP的请求方式,HTTP有八种请求方式,分别是:

GET 请求获取Request-URI所标识的资源

POST 在Request-URI所标识的资源后附加新的数据

HEAD 请求获取由Request-URI所标识的资源的响应消息报头

PUT 请求服务器存储一个资源,并用Request-URI作为其标识

DELETE 请求服务器删除Request-URI所标识的资源

TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT 保留将来使用

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

重点掌握GET请求和POST两种请求方式,他们的区别如下:

第一:GET把参数包含在URL中,POST通过request body传递参数。

第二:GET产生一个TCP数据包;POST产生两个TCP数据包。

第三:GET是获取数据请求;post是提交数据请求,会改变服务器状态

第四:GET 请求不应在处理敏感数据时使用,post较安全

第五:GET参数有长度限制(受限于url长度,具体的数值取决于浏览器和服务器的

限制),而post无限制

第六:GET 请求可被缓存

第七:GET 请求保留在浏览器历史记录中

第八:GET 请求可被收藏为书签

信息头:向服务器发送更加详细的参数,常见的参数如下

Accept:浏览器可接受的MIME类型。

Accept - Charset:浏览器可接受的字符集。

Accept - Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够

向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍

的下载时间。

Accept - Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言

版本时要用到。

Authorization:授权信息,通常出现在对服务器发送的WWW - Authenticate头的

应答中。

Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep - Alive”,

或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连

接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。

要实现这一点,Servlet需要在应答中发送一个Content - Length头,最简单的实现方法

是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。

Content - Length:表示请求消息正文的长度。

Cookie:这是最重要的请求头信息之一,参见后面《Cookie处理》一章中的讨论。

From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用

到它。

Host:初始URL中的主机和端口。

If - Modified - Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,

否则返回304“Not Modified”应答。

Pragma:指定“no - cache”值表示服务器必须返回一个刷新后的文档,即使它是

代理服务器而且已经有了页面的本地拷贝。

Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。

User - Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常

有用。

UA - Pixels,UA - Color,UA - OS,UA - CPU:由某些版本的IE浏览器所发送的

非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。

body:存放请求参数,post请求方式存放在请求body上,get请求方式直接跟随

在URL上

举例,ams登录完整的http请求:

#******开始行********#

GET /ams/sysLogin/ HTTP/1.1

#******请求头********#

Host: 218.17.83.17:2195

Connection: keep-alive

Content-Length: 75

Accept: */*

Origin: 218.17.83.17:2195

X-Requested-With: XMLHttpRequest

User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36

(KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Referer: 218.17.83.17:2195/ams/sysLogin/

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9

Cookie:service_org_name=%E6%B7%B1%E5%9C%B3%E7%BD%91%E4%BF%

A1%E5%8A%9E;

service_orgid=10006;ogin_entrance=general;JSESSIONID=00F40A3A69C7C985D2

38E8146E8271E7; my_name=; contextPath=%2Fams

#******body********#

agent vms2

loginname sz-test

loginpassword 25d687e2c7e715b2f1c9bc30a47b0863

状态行:

1、状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回

的响应状态代码;Reason-Phrase表示状态代码的文本描述。

举例:

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态代码、状态描述、说明:

200 OK //客户端请求成功

400 Bad Request //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报

头域一起使用

403 Forbidden //服务器收到请求,但是拒绝提供服务

404 Not Found //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢

复正常

eg:HTTP/1.1 200 OK (CRLF)

响应头:这里不做详细介绍,有兴趣查阅相关文档继续学习

响应报文:请求返回的数据,可以是多种类型数据:0、-1、1,json格式数据、xml

格式数据等

举例,ams登录的http响应:

#******开始行********#

HTTP/1.1 200 OK

#******响应头********#

Server: nginx/1.10.2

Date: Wed, 06 Dec 2017 05:53:43 GMT

Content-Type: text/plain;charset=utf-8

Transfer-Encoding: chunked

Connection: keep-alive

content-encoding: gzip

#******响应报文********#

{"result":"","code":1}

学习完上述的HTTP的简单介绍,我们就可以通过工具来进行HTTP接口测试了,如

果有接口文档我们可以直接参照接口文档进行测试,如果没有就需要使用抓包工具来抓取

接口的参数;

工具准备:

抓包工具:fiddler,百度就可以下载到,下载解压就可以使用;有兴趣的朋友可以去

汉化,便于前期的学习和使用。

接口测试工具:postman、jmeter等,此次教程以jmeter作为示例,jmeter去官网

下载资源包,安装jdk环境,解压就可以使用jmeter了。

步骤1:

首先设置打开fiddler,对URL进行过滤,如果不过滤的URL的话,很多后台程序的

链接也会被抓取到,不便于抓取到期望的接口;如下图设置

步骤2:

在浏览器上操作系统,例如进行登录的操作,我们可以从结果上抓取到我们想要的数

据,请求的相对路径、请求参数、响应报文,有了这些参数之后就可以在jmeter上进行

这个接口的测试了

步骤3:在 打开jmeter-->右键测试计划创建线程组-->右

键线程组创建取样器sample(选择Http请求)-->右键Http请求创建响应断言-->填

写测试协议的类型(HTTP)-->接口IP地址和端口-->请求方式post(fiddler的开始行

上可以抓取到)-->请求地址的相对路径-->填写请求参数--》填写断言

步骤4:右键线程组创建结果观察树,然后点击三角图标运行脚本,查看接口测试情

况,如果用例图标是绿色状态,说明接口测试成功。

类似的Http接口测试都可以参照这个教程,至于fiddler和jmeter的其他功能,大

家可以慢慢去挖掘,谢谢!