JMeter快速入门知识系列(3)JMeter测试HTTP GET请求

3.1 HTTP协议简介

超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。从2007开始到2014为止,经过多年的努力,RFC2616和RFC2617已经被废弃,被新的RFC7230-RFC7239共10个文档所代替。

下面对HTTP协议的介绍都是基于最新的RFC7230-RFC7239。

HTTP报文格式

1.请求方法

传统HTTP请求方法:

RESTful HTTP请求方法:

状态码

首部

3.2 HTTP Request(GET)

配置项

Web Server:

1.Protocol [http]:

若为HTTP协议可以不填写(默认为HTTP);若为HTTPS协议可以填写“https”;还可以为FILE协议(本地文件传输协议);

2.Server Name or IP:

HTTP/Web服务器的域名或IP地址,本机可以使用localhost或127.0.0.1表示;

3.Port Number:

HTTP/Web服务器的监听端口,若为HTTP协议,默认端口为80;若为HTTPs协议,默认端口为443。使用默认端口可以不填,非默认端口必填。

HTTP Request:

1.Method:

请求方法,测试GET请求,请选择“GET”。

2.Path:

HTTP请求行中的request-target,可以使用绝对地址或相对地址。

比如: http://www.test.com/ecshop/index.php (绝对地址)

/ecshop/index.php(相对地址)

注意: 若使用绝对地址,则会覆盖“Web Server”中的配置。

3.Content-encoding:

通常用于在发送POST、PUT、PATCH请求时对message-body进行内容编码,以防止请求出现乱码或服务器无法正确处理请求。

注意其与请求的首部字段“Content-encoding”无关。

4.Redirect Automatically:

自动重定向。在JMeter中不记录重定向的过程,只能看到最终的重定向请求。

5.Follow Redirects:

跟随重定向。在JMeter会详细记录重定向的过程,可以看到多个重定向请求。

其中4与5是互斥的。

比如,使用http://www.sina.com/访问新浪,会有两次重定向:

第一次请求: GET http://www.sina.com/ 重定向返回: Location: http://www.sina.com.cn/

第二次请求: GET http://www.sina.com.cn/ 重定向返回: Location: https://www.sina.com.cn/

第三次请求: GET https://www.sina.com.cn/

若设置自动重定向,在查看结果树中只能看到最终的请求:GET https://www.sina.com.cn/

若设置跟随重定向,可以看到全部的三次请求。

6.Use KeepAlive:

勾选在请求中加入首部字段“Connection: Keep-Alive”,否则设置为“Connection: Close”,默认为勾选。

7.Use multipart/form-data:

是否以multipart/form-data传输message-body。

8.Browser-compatible headers:

勾选此项,在使用multipart/form-data时,会抑止Content-Type与Content-Transfer-Encoding首部字段,仅发送Content-Disposition首部字段。

请求参数放置的位置

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

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

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

b.POST、PUT、PATCH将查询字符串作为message-body单独发送。

2.查询字符串生成

a.直接放在Path配置项中(?后的一串字符,但不包括片段信息,各name=value通过&连接,name=可选)

比如,Path设置为:/ecshop/upload/goods.php?act=price&id=9&attr=227&number=1&1551081863462462

则查询字符串为:act=price&id=9&attr=227&number=1&1551081863462462

b.由“Parameters”选项卡中参数列表的“name/value”名值对生成(以name=value形式通过&连接)

比如:

Name Value

username zhangsan

password 123456

则生成的查询字符串为:username=zhangsan&password=123456

c.根据“Parameters”选项卡中参数列表的“name/value”名值对生成字符串并追加到Path中的查询字符串末尾(两者以&连接),

此规则仅对于GET请求有效。

比如,Path设置为: /index.php?cc=3

参数列表中的“name/vaue”名值对为:

Name Value

a 1

b 2

则生成的查询字符串为:cc=3&a=1&b=2

3.无名参数处理

对于POST、PUT与PATCH方法,若没有上传文件,并且参数没有对应的参数名,则将参数值之间连接起来作为message-body。

这些值的末尾不会加入行结束符,可以调用KaTeX parse error: Expected group after '_' at position 2: {_̲_char(13,10)}来插…{__char(13,10)}

line2

则message-body为:

line1

line2

对于其他请求方法比如GET,若参数没有参数名,则JMeter会忽略该参数。

4.当请求只有未命名的参数(或根本没有参数)

可以将请求参数放入“Body Data”选项卡中(也可以放在Parameters选项卡中)。一般用于发送如下类型的请求:

a.GWT RPC HTTP

b.JSON REST HTTP

c.XML REST HTTP

d.SOAP HTTP

在“Body Data”模式下,除了最后一行之外,每行末自动附加CRLF。要在最后一行数据之后发送CRLF,只需确保其后面有空行即可。

5.POST、PUT与PATCH方法的请求,message-body可以是如下之一:

a.在“File Upload”选项卡中,不设置“Parameter Name”,设置“MIME Type”为Content-Type;

b.在“Parameters"选项卡中,不设置“Name”;

c.将请求参数放在“Body Data”选项卡中。

6.参数的Content-Type设置

a.参数仅放在“Parameters”选项卡中,默认为“application/x-www-form-urlencoded”;

b.参数放在“Body Data"选项卡中,默认为“text/plain”;

c.参数仅放在"Files Upload”选项卡中,默认为“multipart/form-data”;

d.参数放在“Parameters”与“Files Upload”两个选项卡中,默认为“multipart/form-data”。

若要指定Content-Type,可以在取样器请求下添加一个HTTP首部管理器,并在其中设置Content-Type首部字段与值域。

3.3 应用案例

测试案例说明

1.接口说明:

查询被购买商品的总金额接口。

2.请求方式:

HTTP GET请求。

3.接口地址:

/ecshop/upload/goods.php

4.请求参数:

4.1输入参数:

4.2请求示例:

GET /ecshop/upload/goods.php?act=price&id=9&attr=227&number=1&1551081863462462 HTTP/1.1

Accept: /

X-HttpWatch-RID: 22945-10042

Referer: http://localhost/ecshop/upload/goods.php?id=9

Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko

Host: localhost

Connection: Keep-Alive

Cookie: ECS[history]=9; ECS[visit_times]=2; ECS_ID=2a50bfdc24b5443814e73a5783912e21a55af811

5. 返回参数:

5.1响应参数:

5.2响应实例:

HTTP/1.1 200 OK

Date: Mon, 25 Feb 2019 08:16:27 GMT

Server: Apache/2.2.4 (Win32) PHP/5.2.4

X-Powered-By: PHP/5.2.4

Cache-control: private

Content-Length: 50

Keep-Alive: timeout=5, max=86

Connection: Keep-Alive

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

{“err_msg”:"",“result”:"\uffe52298\u5143",“qty”:1}

测试步骤

1.在“Test Plan”节点上右键,选择Add–>Threads(users)–>Thread Group;

2.在“Thread Group”节点上右键,选择Add–>Sampler–>HTTP Request;

3.在“HTTP Request”节点上右键,选择Add–>Listener–>View Results Tree;

4.选中“HTTP Request”对HTTP请求进行配置;

5.点击“Save”,保存测试计划;

6.点击“Start”,运行JMeter测试。

HTTP GET请求的参数有两种配置方法:

1.放在Path配置项中:

2.放在Parameters选项卡中:

你可能感兴趣的:(JMeter快速入门知识系列(3)JMeter测试HTTP GET请求)