接口测试 Jmeter 接口测试-请求 Headers 与传参方式

grizz · April 05, 2018 · Last by wuxq replied at November 08, 2018 · 6097 hits

一、 背景:

在使用Jmeter进行接口测试时,有些小伙伴不知道Headers和请求参数(Parameters,Body Data)的联系,本文主要讲Content-Type为application/x-www-form-urlencoded和application/json的场景。
1、使用Parameters时,Content-Type要么不传,要么传application/x-www-form-urlencoded,因为不传时默认值就是application/x-www-form-urlencoded,如果传application/json的话会报错。
2、使用Body Data时,Content-Type可以是application/x-www-form-urlencoded或application/json。
附一张Jmeter请求参数(Parameters,Body Data)截图:

二、 Headers基础概念:

Headers常见字段:User-Agent,Accept,Content-Type
User-Agent浏览器类型、操作系统及版本、浏览器渲染引擎、浏览器语言等信息的标识, 服务器会根据用户使用浏览器的不同,显示不同的排版从而为用户提供更好的体验(即浏览器兼容性)。

Accept属于请求头, Content-Type属于实体头。
Accept代表发送端(客户端)希望接受的数据类型。
比如:Accept:text/xml;
代表客户端希望接受的数据类型是xml类型

Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。
比如:Content-Type:text/html;
代表发送端发送的数据格式是html。

二者合起来:
Accept:text/xml;
Content-Type:text/html
即代表希望接受的数据类型是xml格式,本次请求发送的数据的数据格式是html。

三、常见的content-type

(1)application/x-www-form-urlencoded
最常见的 POST 提交数据的方式,如果不设置Headers的content-type,基本默认会以 application/x-www-form-urlencoded 方式提交数据。
(2)application/json
现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。这种方案,可以方便的提交复杂的结构化数据,特别适合 RESTful 的接口。各大抓包工具如 Chrome 自带的开发者工具、Firebug、Fiddler,都会以树形结构展示 JSON 数据,非常友好直观。
(3)multipart/form-data
这种方式一般用来上传文件。
(4)text/xml
XML 作为编码方式的远程调用规范,一般用不到。

四、接口实例讲解

鉴于公司接口安全问题,用python+flask在本地搭了一个服务器用于演示。

1、application/x-www-form-urlencoded + Parameters

2、application/x-www-form-urlencoded + Body Data

3、直接在URL后拼接请求参数

URL(Uniform Resource Locator 统一资源定位符),但有时候我们会听到URI(Uniform Resource Identifier 统一资源标识符),有什么区别呢,举个例子:
URL为http://127.0.0.1/login.json,则URI为login.json,同时URL是URI的子集,因为定位符定位时会根据某些字段进行标识。有点走题了,我们继续贴图。

4、application/json + Body Data

进行这个操作前记得先在jmeter的HTTP Header Manager中设置Content-Type为application/json

总结一下,首先上面4种方式调登录接口/login都是成功的,并且传参都是userid=001,test=true(传到服务器的都是键值对)。那么我们测试接口的时候要用哪种方式呢(嗯,当然是都可以啦,因为都成功了,方式不一样而已…)。只能说推荐哪种方式,那肯定第四种application/json + Body Data了,因为这种方式参数可以直接复制粘贴,修改灵活,信息直观。但有些小伙伴刚开始常常会把json格式写错,带来一些烦恼,那么请进入www.json.cn进行json格式校验,校验通过后再放到Body Data中请求接口。

我们再来比较一下前3种的不同,不同就是传参方式不同,那相同呢,就是都能成功,并且参数其实都是一样的,贴图:

因为参数都是userid=001&test=true,Headers是application/x-www-form-urlencoded,所以服务器就会以urlencoded的编码方式去解析入参,所以前3种方式的本质是一样的,传的一样的参数,并且告诉服务器解析的传参方式也是一样。

为了增强说服力,贴上4种请求方式接口的返回值,接口响应断言为"returnFlag":"1000"

希望本文能给你带来帮助,谢谢阅读。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 5 条回复 时间 点赞
1Floor has been deleted

好实用,好厉害

很实用,很牛批

grizz #4 · April 12, 2018 作者
damon 回复

牛批牛批

grizz #5 · April 12, 2018 作者
luoziyu 回复

跟大佬们一起学习前进

点赞

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up