最新:JMeter性能测试Http Request附加参数全剖析

当使用JMeter来测试HTTP Request时,在配置请求参数时初学者往往不得要领,加之JMeter提供了灵活多变的参数附加形式,若不注意其中的诀窍与细节,迷惑不解也在所难免.针对此种情况,本文逐一为大家解惑.

首先我们还是先要了解下HTTP协议的基础知识.

1、HTTP报文格式

HTTP协议是Web客户端与Web服务器之间通信规则的集合.协议有语法,语义与时序三个要素.在通信过程中通信双方需要遵循基本的语法要素,而HTTP报文的格式体现的语法层次的基本要求.

一般来说HTTP报文(消息)可以分为HTTP请求报文与HTTP响应报文,这里参考最新的HTTP1.1 RFC7230-7239,HTTP-message具体格式如下图所示:
HTTP-message格式

2、HTTP请求方法

2.1 HTTP/1.1标准方法
HTTP/1.0定义了三个方法:GET,HEAD,POST;HTTP/1.1在其基础上扩充了PUT,DELETE,CONNECT,OPTIONS,TRACE方法;后来在RFC 5789中又新增了PATCH方法,可以看成是对PUT方法的补充.
在这里插入图片描述
2.2 WebDAV扩展方法
WebDAV(Web-based Distributed Authoring and Versioning)一种基于HTTP/1.1协议的通信协议。它扩展了HTTP/1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。WebDAV扩展的主要方法如下:
在这里插入图片描述
2.3 RESTful HTTP请求方法
REST(Representational State Transfer)是Roy Thomas Fielding博士于2000年在他的博士论文中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。表现层状态转换是根基于超文本传输协议(HTTP)之上而确定的一组约束和属性,是一种设计提供万维网络服务的软件构建风格。符合或兼容于这种架构风格(简称为 REST 或 RESTful)的网络服务,允许客户端发出以统一资源标识符访问和操作网络资源的请求,而与预先定义好的无状态操作集一致化。

HTTP请求方法在RESTful API中的典型应用如下:
在这里插入图片描述

3 HTTP Request支持的请求方法

JMeter取样器"HTTP Request"支持的请求方式与其实现方式有关,在最新的JMeter5.2.1版本中有"HttpClient4"与"Java"两种方式,具体细节如下表所示:
在这里插入图片描述

4 HTTP请求参数附加的位置

发送HTTP请求时,参数可以附加的位置可以是:

1.request-target;

2.message-body;

3.request-target与message-body两者.

具体情形如下:
在这里插入图片描述

5 HTTP Content-Type

Content-Type首部字段

HTTP协议在"Content-Type"与"Accept"首部字段的值域中使用Internet Media Types.其目的是为了提供开放式,可扩展的数据类型以及类型协商.Media Types定义了某种数据格式以及各种数据处理模型,以便接收方根据上下文来正确处理接收到的数据.

其语法格式为:

media-type = type “/” subtype *( OWS “;” OWS parameter )

type = token

subtype = token

“Content-Type"首部字段等价于"media-type”.

Content-Type = media-type

Content-Type: application/soap+xml;charset=UTF8;action=“http://WebXml.com.cn/getSupportCity”

其中:

"application"是MIME主类型

“soap+xml"是"子类型”

";"是类型与参数的分隔符,前后可带可选的空白(OWS)

“charset"与"action"是两个参数,参数之间也以”;"分隔.

常见的Content-Type值域

主类型包含独立类型与Multipart类型两大类:
独立类型
独立类型表明了对文件的分类,可以是如下之一:
独立类型
Multipart 类型
multipart/form-data

multipart/byteranges

Multipart 类型表示细分领域的文件类型的种类,经常对应不同的 MIME 类型。这是复合文件的一种表现方式。multipart/form-data 可用于联系 HTML Forms 和 POST 方法,此外 multipart/byteranges使用状态码206 Partial Content来发送整个文件的子集,而HTTP对不能处理的复合文件使用特殊的方式:将信息直接传送给浏览器(这时可能会建立一个“另存为”窗口,但是却不知道如何去显示内联文件。)

6 JMeter附件参数规则

  1. 1 可带查询字符串的请求方法

在HTTP请求中,查询字符串是以"key=value"方式表示的字符串数据,多个"key=value"之间以"&“连接,形如"k1=v1&k2=v2&k3=v3&…&kn=vn”."key"在某些情况下是可选的,比如:

“id=100&31415926535897932”,后面的参数"key"省略了,没有"key"的参数称为"无名参数".同样"value"也是可选的,比如:“username=xxx&passord=yyy&submit=”,“sumbmit"没有对应的值,没有"value"的参数称为"无值参数”.

GET请求带查询字符串是最常见的,除此之外,DELETE、POST、PUT、PATCH也可以携带查询字符串,不过JMeter处理的方式不同:

  1. GET、HEAD、DELETE将查询字符串附加在请求request-target之后

如图所示:
在这里插入图片描述
2) POST、PUT、PATCH将查询字符串放在请求message-body中单独发送
在这里插入图片描述
6.2 查询字符串设置
查询字符串设置有如下四种方式:

1.直接放在Path配置项中
在这里插入图片描述
2.在"Parameters”选项卡通过设置"name/value"对生成

下面的配置会生成"a=1&b=2&c=3"的查询字符串:
在这里插入图片描述
3.根据“Parameters”选项卡中的“name/value”对生成字符串并追加到"Path"中的查询字符串末尾(两者以&连接),此规则仅对于GET请求有效。

下面的配置会生成"k=v&a=1&b=2&c=3"的查询字符串:
在这里插入图片描述
4.放在"Body Data"选项卡中
在这里插入图片描述
注意:对于GET请求,将查询字符串写在"Body Data"中不是不允许,JMeter允许你这么做,但是这样取决于服务器是否支持.
6.3 Parameters无名参数处理
在"Parameters"选项卡中,JMeter允许设置"无名参数",也就是没有"Name"的参数.

下面分两种情况讨论:

1.对于POST、PUT与PATCH方法,且没有上传文件

则将参数值首尾相连作为message-body。这些值的末尾不会自动加入行结束符,可以调用${__char(13,10)}来插入CRLF。
在这里插入图片描述
在这里插入图片描述
2.对于GET,HEAD方法

若参数没有参数名,则JMeter会忽略该参数。

下面的例子中,参数值"1"与"3"被JMeter忽略了:

对GET方法,若所有参数没有设置"name",还是会作为message-body发送.

在"Parameters"中所有参数没有设置"Name",等同于在"Body Data"中设置.
在这里插入图片描述
6.4 带无名参数的请求
当JMeter发送如下类型的HTTP请求时:

1)GWT RPC HTTP

2)JSON REST HTTP

3)XML REST HTTP

4)SOAP HTTP

可以看成是HTTP请求附加了"无名参数".

这些参数可以在如下两个地方设置:

1)在"Body Data"选项卡中设置

在此模式下,除了最后一行之外,每行末自动附加CRLF。要在最后一行数据之后发送CRLF,只需确保其后面有一空行即可。
在这里插入图片描述
2)在"Parameters"选项卡中设置

不设置"name",只设置"value".

6.5 message-body设置
在JMeter中,HTTP请求的message-body有如下三种设置方式:

1)在“Parameters"选项卡中,不设置"Name"

参见6.3节与6.4节内容

2)将请求参数放在“Body Data”选项卡中

参见6.3节与6.4节内容

3)在“File Upload”选项卡中,不设置“Parameter Name”

但需要设置“MIME Type”,其值为资源对应的MIME类型.

JMeter允许将message-body保存到外部文件中,再从文件中读取数据发送HTTP请求.

下面看一个SOAP HTTP请求的例子:
POST /WebServices/WeatherWebService.asmx HTTP/1.1
Host: ws.webxml.com.cn
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 388

<?xml version="1.0" encoding="utf-8"?>

<soap12:Envelope xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:soap12=“http://www.w3.org/2003/05/soap-envelope”>
soap12:Body

string

</soap12:Body>
</soap12:Envelope>
先将发送的SOAP消息保存到test.txt文件中,在"File Upload"选项卡中,设置:

i)“File Path”: 文件路径(D:/testdata/test.txt)

ii)“Parameter Name”: 不设置,为空

iii)“MIME Type”: 设置为SOAP1.2的MIME类型

如下图所示:
在这里插入图片描述
响应结果显示"POST Data"取自于外部文件中:
在这里插入图片描述
6.6 message-body与Content-Type设置
一般来说,对于带有message-body的HTTP请求,设置Content-Type才有意义.

对于GET,HEAD,DELETE等不带message-body的请求,不需要设置Content-Type,但是一旦设置了,JMeter在发送HTTP请求时还是会带上该首部字段.

JMeter提供了"Parameters","Body Data"与"Files Upload"三个选项卡可以附加HTTP请求参数.

附加的位置不同,其默认的Content-Type也不尽相同,其规则如下:

6.6.1 仅附加在Parameters且Name不全为空
此种情况要求仅在"Parameters"选项卡中设置参数,并且Name不能全为空.

默认Content-Type为"application/x-www-form-urlencoded".

下面是一个例子:
在这里插入图片描述
6.6.2 仅附加在Parameters且Name全为空
此种情况要求仅在"Parameters"选项卡中设置参数,并且Name全为空.

默认Content-Type为"text/plain".

下面是一个例子:
在这里插入图片描述
6.6.3 仅附加在Body Data
此种情况要求仅在"Body Data"选项卡中设置参数.

默认Content-Type为"text/plain".

这样6.6.2节中讲述的"仅附加在Parameters且Name全为空"的情况是等价的.
在这里插入图片描述

6.6.4 仅附加在Files Upload且Parameter Name不为空
此种情况要求仅在"Files Upload"选项卡中设置参数,并且"Parameter Name"不能为空.

默认Content-Type为"multipart/form-data".

下面是一个例子:
在这里插入图片描述
6.6.5 仅附加在Files Upload且Parameter Name为空
此种情况要求仅在"Files Upload"选项卡中设置参数,并且"Parameter Name"为空.

则Content-Type值与设置的"MIME Type"值一致.

下面是一个例子:
在这里插入图片描述
6.6.6 附加在Parameters与Files Upload两者中
此种情况在"Parameters"与"Files Upload"选项卡两者中都设置了参数,并且"Files Upload"选项卡中的"Parameter Name"不能为空.

默认Content-Type为"multipart/form-data".

6.6.7 使用指定的Content-Type
为了能使服务器正确解析message-body,有时需要指定合适的Content-Type,可以在适当位置添加一个"HTTP Header Manager"配置元件,并在其中添加一个首部字段,“name"设置为"Content-Type”,"value"设置为正确的"MIME"类型即可,在该配置元件的作用域范围内,会覆盖默认的Content-Type.
设置如下图示:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值